如何使一个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);