有没有办法在 jtable 中动态制作不可编辑的单元格?每当用户提供像假这样的输入时,我想制作不可编辑的单元格......我在 DefaultTableModel 中看到了 isCellEditable 方法。但如果我想使用它,我每次都创建新对象。所以我想动态更改它不可编辑。你能帮我吗?..谢谢
问问题
38497 次
2 回答
18
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() 函数来动态设置值。理论上。我没有测试过这段代码,但它应该可以工作。您可能仍然需要触发某种事件来触发表格以注意到更改。
于 2012-10-08T06:13:44.803 回答
2
我有类似的问题要弄清楚如何动态启用/禁用单元格的编辑(在我的情况下是基于数据库中的出现)。我这样做是这样的:
jTableAssignments = new javax.swing.JTable() {
public boolean isCellEditable(int rowIndex, int colIndex) {
return editable;
}};
这当然会覆盖 isCellEditable。顺便说一句,我可以使它工作的唯一方法是将声明添加到表本身的实例化中,而不是表模型。
然后我将可编辑声明为可以设置的私有布尔值,例如:
private void jTableAssignmentsMouseClicked(java.awt.event.MouseEvent evt) {
if(jTableAssignments.getSelectedRow() == 3 & jTableAssignments.getSelectedColumn() == 3) {
editable = true;
}
else {
editable = false;
}
}
而且效果很好。
于 2013-05-14T11:18:40.597 回答