如何使一个JTable
不可编辑的?我不希望我的用户能够通过双击它们来编辑单元格中的值。
可在此处找到更好的答案:stackoverflow.com/questions/9919230/disable-user-edit-in-jtable
—
保罗
如何使一个JTable
不可编辑的?我不希望我的用户能够通过双击它们来编辑单元格中的值。
Answers:
您可以使用TableModel
。
定义一个这样的类:
public class MyModel extends AbstractTableModel{
//not necessary
}
实际上isCellEditable()
是false
默认设置,因此您可以忽略它。(请参阅:http : //docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html)
然后使用setModel()
您的方法JTable
。
JTable myTable = new JTable();
myTable.setModel(new MyModel());
public void
方法返回布尔值。
isCellEditable
您可以覆盖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(使用“ 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
}
没有编辑器,数据将不可编辑。
new JTable(Vector, Vector)
并为我工作。我在任何地方都不需要编辑,所以你有我的投票权。
我用了它,它起作用了:它非常简单并且可以正常工作。
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()));