簡體   English   中英

使Jtable不可編輯,而無需使用setModel()

[英]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不可編輯。

這有兩種方法可以實現:

  1. 創建並使用您自己的TableModel實現,該實現將所有調用轉發到DbUtils返回的表模型,除了isCellEditable()之外,在該模型中您可以始終返回false從而禁用編輯。 例如,您自己的表模型可以獲得DbUtils返回的模型作為構造函數參數。

  2. 您可以擴展JTable並重寫其isCellEditable()方法以返回false (默認情況下,它將調用模型的isCellEditable()方法)。 也許其他Swing愛好者會認為這是一個惡作劇,但這是解決您問題的最簡單方法。

詳細方法1

這是創建模型的方式:

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)));

闡述方法#2

擴展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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM