java - 如何使JTable不可编辑

如何制作JTable不可编辑? 我不希望我的用户能够通过双击来编辑单元格中的值。

Siddharth Raina asked 2019-09-10T22:05:37Z
7个解决方案
138 votes

您可以覆盖方法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是否消失

如果您的DefaultTableModel(Object[][] data, Object[] columnNames)在使用时消失,很可能是因为您需要使用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);
nelson eldoro answered 2019-09-10T22:06:49Z
37 votes

加上

table.setEnabled(false);

这对我来说可以。

Siddhu answered 2019-09-10T22:07:20Z
32 votes
table.setDefaultEditor(Object.class, null);
Oleg Mikhailov answered 2019-09-10T22:07:38Z
20 votes

您可以使用setModel()

定义一个这样的类:

public class MyModel extends AbstractTableModel{
    //not necessary
}

实际上setModel()默认为JTable,因此您可以省略它。 (见:[http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html]]

然后使用setModel()setModel()方法。

JTable myTable = new JTable();
myTable.setModel(new MyModel());
JCasso answered 2019-09-10T22:06:10Z
8 votes

如果要从一组值自动创建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
}

没有编辑器,数据将无法编辑。

freesoft answered 2019-09-10T22:08:09Z
4 votes

我使用它并且它起作用:它非常简单并且工作正常。

JTable myTable = new JTable();
myTable.setEnabled(false);
user3518835 answered 2019-09-10T22:08:33Z
2 votes

创建新的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()));
Ehsan Jelodar answered 2019-09-10T22:09:03Z
translate from https://stackoverflow.com:/questions/1990817/how-to-make-a-jtable-non-editable