如何使JTable不可编辑

Sid*_*ina 91 java swing jtable

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

nel*_*oro 143

您可以覆盖方法isCellEditable并根据需要实现,例如:

//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {

    @Override
    public boolean isCellEditable(int row, int column) {
       //all cells false
       return false;
    }
};

table.setModel(tableModel);
Run Code Online (Sandbox Code Playgroud)

要么

//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);
Run Code Online (Sandbox Code Playgroud)

请注意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);
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用,桌子只是消失了 (10认同)
  • 这也是使双击事件与JTable一起正常工作的解决方案.当单元进入编辑模式时,单击通常会消耗双击,这将使单元格无法执行此操作,而是将双击发送到JTable本身.谢谢你的解决方案,尼尔森! (3认同)
  • @Jop然后代码中的其他地方出了问题 - 表_never_消失只是因为表的模型不可编辑... (2认同)

Ole*_*lov 39

table.setDefaultEditor(Object.class, null);
Run Code Online (Sandbox Code Playgroud)

  • 这是最好和最简单的答案.当然,您必须将编辑器设置为null,否则您将无法对其进行编辑. (2认同)

Sid*_*dhu 37

加上

table.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)

这对我来说可以.

  • 但是您将无法选择单元格或行. (25认同)
  • 在一些L&F中,这看起来会"灰暗". (3认同)
  • 这样可行.谢谢.但是,我仍然想知道为什么纳尔逊的数据模型方法导致表的列和数据元素消失. (2认同)

JCa*_*sso 20

你可以使用TableModel.

定义一个这样的类:

public class MyModel extends AbstractTableModel{
    //not necessary
}
Run Code Online (Sandbox Code Playgroud)

实际上isCellEditable()false默认情况下你可以省略它.(参见:http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html)

然后使用setModel()你的方法JTable.

JTable myTable = new JTable();
myTable.setModel(new MyModel());
Run Code Online (Sandbox Code Playgroud)


fre*_*oft 10

如果要从一组值自动创建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
}
Run Code Online (Sandbox Code Playgroud)

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

  • -1在不合适的位置随机黑客攻击是_never_一个选项 (4认同)