禁用JTable中的用户编辑

创建JTable组件时,默认情况下启用单元格编辑。 如何阻止用户编辑JTable的内容?

JTable使用AbstractTableModel对象。 这是你传递给JTable的构造函数的东西。 您可以按如下方式编写自己的AbstractTableModel

public class MyTableModel extends AbstractTableModel { public boolean isCellEditable(int row, int column){ return false; } } 

然后初始化你的JTable

 JTable myTable = new JTable(new MyTableModel()); 

您可以使用以下代码创建JTable:

  JTable jTable = new JTable() { private static final long serialVersionUID = 1L; public boolean isCellEditable(int row, int column) { return false; }; }; 

基本上我们在这里做的是重写isCellEditable并始终从它返回false。 这将使一个非editabe JTabel。

 myTable.setDefaultEditor(Object.class, null); 

嗨,我在java上工作很多,所以我会按照你的方式给你:第一次在netbeans下有两种可能性。 去自定义代码并使其像这样:

 JTArticleJPAddArrticle = new javax.swing.JTable(); JTArticleJPAddArrticle.setBackground(new java.awt.Color(204, 204, 255)); JTArticleJPAddArrticle.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Reference","Libellé","Marque","Prix d'achat","Prix de vente","Quantité","Total","Etat" } ){ public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } }); jScrollPane8.setViewportView(JTArticleJPAddArrticle); 

我的另一种方法是创建表模型的实例。 这是第二种方式:

 model=new DefaultTableModel(head, 0){ @Override public boolean isCellEditable(int i, int i1) { return false; //To change body of generated methods, choose Tools | Templates. } }; jtable.setmodel(model); 

享受这个对我来说很好。 我想做的就是帮助你们,因为我早就得到了帮助。

你有没有尝试过:

 JTable table = new JTable(); table.setEnabled(false); 

关于JComponent.setEnabled(boolean)它说:

设置是否启用此组件。 启用的组件可能会响应用户输入,而未启用的组件则无法响应用户输入。 某些组件在被禁用时可能会改变其视觉表示,以便向用户提供他们无法接受输入的反馈。

说到JTable,它似乎根本没有提供任何视觉反馈。 凭借仍然能够点击列标题的好处。 在我的实现中,应用程序仍然可以更改单元格的内容。

  tm = new javax.swing.table.DefaultTableModel() { public Class getColumnClass(int column) { switch(column) { case 0: return String.class; case 1: return String.class; case 2: return String.class; case 3: return String.class; case 4: return String.class; case 5: return String.class; case 6: return String.class; case 7: return String.class; case 8: return String.class; case 9: return String.class; case 10: return String.class; case 11: return Boolean.class; default: return String.class; } } @Override public boolean isCellEditable(int row, int column) { /* Set the 11th column as editable and rest non- editable */ if(column==11){ return true; }else{ //all other columns to false return false; } } }; table = new javax.swing.JTable(tm); 

在netbeans上,您可以右键单击表格并单击表格内容,然后转到列选项卡并取消选中“可编辑”复选框。 问候!!

我知道我迟到但希望有人能够利用这一点。 您可以像这样简单地添加鼠标监听器:

 jtable.addMouseListener( new MouseAdapter () { @Override public void mouseClicked ( MouseEvent e ) { columnIndex = replacedAssets.getSelectedColumn (); System.out.println ( "Double click on jtable" ); if ( columnIndex == 1 || columnIndex == 2 ) { JOptionPane.showMessageDialog ( parent , "Editing this Field may cause error in the data." , "Error Edit Not Permitted For This Field" , JOptionPane.ERROR_MESSAGE ); } } }); 

此代码阻止编辑索引1和2的列,您可以删除if条件以使其适用于所有列。