如何使JTable
变为不可编辑?我不希望用户可以通过双击单元格来编辑其中的值。
你可以重写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.setDefaultEditor(Object.class, null);
table.setEnabled(false);
对我来说它运行良好。
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());
public void
方法返回一个布尔值。 - GeoisCellEditable
。 - Matt如果您是从一组值自动生成TableModel(使用"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
}
没有编辑器,数据将无法编辑。
我使用了这个方法并且它运行良好:非常简单,而且效果很不错。
JTable myTable = new JTable();
myTable.setEnabled(false);
创建新的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()));