【发布时间】:2010-12-31 17:46:15
【问题描述】:
如何使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());
【讨论】:
public void 方法返回布尔值。
isCellEditable
我用过,效果很好:非常简单,效果很好。
JTable myTable = new JTable();
myTable.setEnabled(false);
【讨论】:
您可以覆盖方法 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);
【讨论】:
创建新的 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()));
【讨论】:
如果您从一组值(使用“new JTable(Vector, Vector)”)自动创建 TableModel,那么从列中删除编辑器可能更容易:
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
}
没有编辑器,数据将无法编辑。
【讨论】:
new JTable(Vector, Vector) 的方式创建了表格并为我工作。我不需要任何单元格的编辑,所以你有我的投票权。
只需添加
table.setEnabled(false);
对我来说很好用。
【讨论】: