[英]Make Jtable Noneditable without using setModel()
我想使我的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()。
如何克服这个问题? 我想设置结果并使jTable不可编辑。
这有两种方法可以实现:
创建并使用您自己的TableModel
实现,该实现将所有调用转发到DbUtils
返回的表模型,除了isCellEditable()
之外,在该模型中您可以始终返回false
从而禁用编辑。 例如,您自己的表模型可以获得DbUtils
返回的模型作为构造函数参数。
您可以扩展JTable
并重写其isCellEditable()
方法以返回false
(默认情况下,它将调用模型的isCellEditable()
方法)。 也许其他Swing爱好者会认为这是一个恶作剧,但这是解决您问题的最简单方法。
这是创建模型的方式:
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...
}
这就是您可以使用它的方式:
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));
您只需在程序jTable.disable()中编写一行,就可以使用此代码来使jTable不可编辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.