Java JTable – 只能编辑一列

我想知道如何使JTable的一列可编辑,其他列必须是不可编辑的。

我已经覆盖了isCellEditable()但是这会将每个单元格更改为不可编辑。 Thnx提前。

你可以为TableColumnTableColumn and TableCell设置是否isEditable

 @Override public boolean isCellEditable(int row, int col) { switch (col) { case 0: case 1: return true; default: return false; } } 

覆盖表模型

isCellEditable(int rowIndex, int columnIndex)有两个参数,只为你想要的列返回true?

 public boolean isCellEditable(int rowIndex, int columnIndex){ return columnIndex == 0; //Or whatever column index you want to be editable } 

这将为第3列和第8列设置editable为true,为其他列设置false。

 DefaultTableModel model = new DefaultTableModel() { boolean[] canEdit = new boolean[]{ false, false, true, false, false,false,false, true }; public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit[columnIndex]; } }; 

SwingX项目的JXTable / TableColumnExt具有api来配置每个表和每列的可编辑性

  // make the table completely read-only xTable.setEditable(false); // make a column read-only xTable.getColumnExt(index).setEditable(false); 

请注意,与model.isCellEditable返回的可编辑性相比,只能缩小可编辑性。 也就是说,您可以将可编辑单元格设为只读,但不能反过来

阅读Kleopatra的评论(他第二次建议看看javax.swing.JXTable ,现在我很抱歉我第一次看不到:))我建议你按照链接

我搜索了一个asnwer,并将几个答案结合到我自己的解决方案中(但是,对于所有解决方案都不安全,但是可以理解并且快速实施,尽管我建议查看上面的链接)

你可以更灵活地设置哪个列可以编辑或不在以后编辑,我用它作为例子:

  columnsEditable=new ArrayList(); table=new JTable(new DefaultTableModel(){ @Override public boolean isCellEditable(int row, int col) { if(columnsEditable.isEmpty()){ return false; } if(columnsEditable.contains(new Integer(col))){ return true; } return false; } }); 

我用这个函数来设置是否可编辑:

 public void setColumnEditable(int columnIndex,boolean editable){ if(editable){ if(!columnsEditable.contains(new Integer(columnIndex))){ columnsEditable.add(new Integer(columnIndex)); } }else{ if(columnsEditable.contains(new Integer(columnIndex))){ columnsEditable.remove(new Integer(columnIndex)); } } } 

注意:当然,您必须在此类中定义columnsEditable和JTable表全局:

 private JTable table; private ArrayList columnsEditable; 

注意2:默认情况下,所有列都不可编辑,但这是我想要的行为。 如果你要求其他人,请将所有列添加到columnsEditable或完全更改行为(使ArrayList columnsNonEditable成为替代)。 关于Kleopatra的评论:最好不要使用这个最后的建议(但这取决于所使用的tablemodel以及你在其余程序中做了什么)。