如何动态地使JTable单元可编辑/不可编辑?

有没有办法在jtable中动态制作不可编辑的单元格? 每当用户提供像false这样的输入时,我想制作不可编辑的单元格…我在DefaultTableModel中看到了isCellEditable方法。但是如果我想使用我每次都创建新对象。所以我想要将其更改为动态不可编辑。 你能帮助我吗?谢谢

public class MyDefaultTableModel extends DefaultTableModel { private boolean[][] editable_cells; // 2d array to represent rows and columns private MyDefaultTableModel(int rows, int cols) { // constructor super(rows, cols); this.editable_cells = new boolean[rows][cols]; } @Override public boolean isCellEditable(int row, int column) { // custom isCellEditable function return this.editable_cells[row][column]; } public void setCellEditable(int row, int col, boolean value) { this.editable_cells[row][col] = value; // set cell true/false this.fireTableCellUpdated(row, col); } } 

其他课程

 ... stuff DefaultTableModel myModel = new MyDefaultTableModel(x, y); table.setModel(myModel); ... stuff 

然后,您可以使用您存储的myModel变量动态设置值,并在其上调用setCellEditable()函数。理论上。 我没有测试过这段代码,但它应该可行。 您可能仍然需要触发某种事件来触发表以注意更改。

我有类似的问题来弄清楚如何动态启用/禁用单元格的编辑(在我的情况下基于数据库中的出现。)我这样做:

 jTableAssignments = new javax.swing.JTable() { public boolean isCellEditable(int rowIndex, int colIndex) { return editable; }}; 

当然覆盖的是CellEditable。 顺便说一句,我可以使这项工作的唯一方法是将声明添加到tabel本身的实例化而不是表模型。

然后我将editable声明为可以设置的私有布尔值,例如:

  private void jTableAssignmentsMouseClicked(java.awt.event.MouseEvent evt) { if(jTableAssignments.getSelectedRow() == 3 & jTableAssignments.getSelectedColumn() == 3) { editable = true; } else { editable = false; } } 

而且效果很好。