Java 如何使 JTable 不可编辑
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1990817/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to make a JTable non-editable
提问by Siddharth Raina
How to make a JTable
non-editable? I don't want my users to be able to edit the values in cells by double-clicking them.
如何制作JTable
不可编辑的?我不希望我的用户能够通过双击单元格中的值来编辑它们。
采纳答案by JCasso
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. (see: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html)
实际上isCellEditable()
是false
默认的,所以你可以省略它。(参见:http: //docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html)
Then use the setModel()
method of your JTable
.
然后使用setModel()
你的方法JTable
。
JTable myTable = new JTable();
myTable.setModel(new MyModel());
回答by nelson eldoro
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);
回答by Siddhu
just add
只需添加
table.setEnabled(false);
it works fine for me.
这对我来说可以。
回答by freesoft
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.
没有编辑器,数据将不可编辑。
回答by Ehsan Jelodar
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()));
回答by Oleg Mikhailov
table.setDefaultEditor(Object.class, null);
回答by user3518835
I used this and it worked :it is very simple and works fine.
我使用了它并且它有效:它非常简单并且工作正常。
JTable myTable = new JTable();
myTable.setEnabled(false);