如何使JTable不可编辑

时间:2010-01-02 06:49:22

标签: java swing jtable

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

7 个答案:

答案 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()));