[英]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.