如何使一个JTable不可编辑

如何使一个JTable不可编辑? 我不希望我的用户能够通过双击来编辑单元格中的值。

任何帮助将不胜感激。

谢谢。

你可以使用TableModel

像这样定义一个类:

 public class MyModel extends AbstractTableModel{ //not necessary } 

其实isCellEditable()默认为false ,所以你可以忽略它。 (请参阅: http : //docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )

然后使用JTable setModel()方法。

 JTable myTable = new JTable(); myTable.setModel(new MyModel()); 

您可以重写方法isCellEditable并按照您的需要实现,例如:

 //instance table model DefaultTableModel tableModel = new DefaultTableModel() { @Override public boolean isCellEditable(int row, int column) { //all cells false return false; } }; table.setModel(tableModel); 

要么

 //instance table model DefaultTableModel tableModel = new DefaultTableModel() { @Override public boolean isCellEditable(int row, int column) { //Only the third column return column == 3; } }; table.setModel(tableModel); 

注意如果你的JTable消失了

如果您的JTable在使用时正在消失,那很可能是因为您需要使用DefaultTableModel(Object[][] data, Object[] columnNames)构造函数。

 //instance table model DefaultTableModel tableModel = new DefaultTableModel(data, columnNames) { @Override public boolean isCellEditable(int row, int column) { //all cells false return false; } }; table.setModel(tableModel); 

只需添加

 table.setEnabled(false); 

它对我来说工作得很好。

 table.setDefaultEditor(Object.class, null); 

如果您从一组值中自动创buildTableModel(使用“new JTable(Vector,Vector)”),则可能更容易从列中删除编辑器:

 JTable table = new JTable(my_rows, my_header); for (int c = 0; c < table.getColumnCount(); c++) { Class<?> col_class = table.getColumnClass(c); table.setDefaultEditor(col_class, null); // remove editor } 

没有编辑器,数据将不可编辑。

创build新的DefaultCellEditor类:

 public static class Editor_name extends DefaultCellEditor { public Editor_name(JCheckBox checkBox) { super(checkBox); } @Override public boolean isCellEditable(EventObject anEvent) { return false; } } 

并使用setCellEditor:

 JTable table = new JTable(); table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox())); 

我用这个,它工作:这是非常简单,工作正常。

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