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