如何使JTable
不可编辑?我不希望我的用户能够通过双击来编辑单元格中的值。
答案 0 :(得分:138)
您可以覆盖方法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);
答案 1 :(得分:37)
只需添加
table.setEnabled(false);
它适用于我。
答案 2 :(得分:32)
table.setDefaultEditor(Object.class, null);
答案 3 :(得分:20)
您可以使用TableModel
。
定义一个这样的类:
public class MyModel extends AbstractTableModel{
//not necessary
}
实际上isCellEditable()
默认为false
,因此您可以省略它。 (见:http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html)
然后使用setModel()
的{{1}}方法。
JTable
答案 4 :(得分:8)
如果要从一组值自动创建TableModel(使用"新的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
}
如果没有编辑器,数据将无法编辑。
答案 5 :(得分:4)
我使用了它并且有效:它非常简单且工作正常。
JTable myTable = new JTable();
myTable.setEnabled(false);
答案 6 :(得分:2)
创建新的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()));