我想让我的JTable不可编辑
我使用以下代码使用SetModel()设置行:
jTable1.setModel(DbUtils.resultSetToTableModel(rs)); //Resultset is added as each row using r2xml JAR file
我无法使用以下代码:
jTable1.setModel(new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
});
因为我们不能对jTable使用两个setModel()。
如何克服这个问题? 我想setresult并使jTable不可编辑。
答案 0 :(得分:4)
以下是实现这一目标的两种方法:
创建并使用您自己的TableModel
实现,该实施将所有调用转发给DbUtils
返回的表模型,但isCellEditable()
除外,false
始终可以返回DbUtils
因此禁用编辑。例如,您自己的表模型可以将JTable
返回的模型作为构造函数参数。
您可以扩展isCellEditable()
并覆盖其false
方法以返回isCellEditable()
(默认情况下,它会调用模型的class MyModel implements TableModel {
private final TableModel m;
public MyModel(TableModel m) {
this.m = m;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
// This is how we disable editing:
return false;
}
// The rest of the methods just forward to the other model:
@Override
public int getRowCount() {
return m.getRowCount();
}
@Override
public int getColumnCount() {
return m.getColumnCount();
}
// ...and all other methods which I omit here...
}
方法)。也许其他Swing爱好者会认为这是一个邪恶的黑客,但这是解决你的问题最简单的方法。
这是您创建模型的方法:
jTable1.setModel(new MyModel(DbUtils.resultSetToTableModel(rs)));
这就是你如何使用它:
JTable
扩展JTable jtable1 = new JTable() {
@Override
public boolean isCellEditable(int row, int column) {
// This is how we disable editing:
return false;
}
};
甚至可以是匿名类:
// You can set any model, the table will not be editable because we overrode
// JTable.isCellEditable() to return false therefore the model will not be asked
// if editable.
jTable1.setModel(DbUtils.resultSetToTableModel(rs));
使用它:
{{1}}
答案 1 :(得分:0)
您可以使用此代码制作不可编辑的jTable 只需在程序中写一行 jTable.disable();