[英]How to make a JTable non-editable
How to make a JTable
non-editable? 如何使
JTable
不可编辑? I don't want my users to be able to edit the values in cells by double-clicking them. 我不希望我的用户能够通过双击它们来编辑单元格中的值。
You can override the method isCellEditable and implement as you want for example: 您可以重写isCellEditable方法并根据需要实现,例如:
//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setModel(tableModel);
or 要么
//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);
Note for if your JTable disappears 请注意您的JTable是否消失
If your JTable
is disappearing when you use this it is most likely because you need to use the DefaultTableModel(Object[][] data, Object[] columnNames)
constructor instead. 如果使用此方法时
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);
just add 只需添加
table.setEnabled(false);
it works fine for me. 这对我来说可以。
You can use a TableModel
. 您可以使用
TableModel
。
Define a class like this: 定义一个这样的类:
public class MyModel extends AbstractTableModel{
//not necessary
}
actually isCellEditable()
is false
by default so you may omit it. 实际上
isCellEditable()
默认情况下为false
,因此您可以忽略它。 (see: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html ) (请参阅: http : //docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )
Then use the setModel()
method of your JTable
. 然后使用
JTable
的setModel()
方法。
JTable myTable = new JTable();
myTable.setModel(new MyModel());
If you are creating the TableModel automatically from a set of values (with "new JTable(Vector, Vector)"), perhaps it is easier to remove editors from columns: 如果要根据一组值(使用“ 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
}
Without editors, data will be not editable. 没有编辑器,数据将不可编辑。
I used this and it worked : it is very simple and works fine. 我用了它,它起作用了:它非常简单并且可以正常工作。
JTable myTable = new JTable();
myTable.setEnabled(false);
create new DefaultCellEditor class : 创建新的DefaultCellEditor类:
public static class Editor_name extends DefaultCellEditor {
public Editor_name(JCheckBox checkBox) {
super(checkBox);
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return false;
}
}
and use setCellEditor : 并使用setCellEditor:
JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.