9

jtableで編集不可能なセルを動的に作成する方法はありますか?ユーザーがfalseのような入力をするたびに、編集不可能なセルを作成したい... DefaultTableModel isCellEditableメソッドで見たことがありますが、それを使用したい場合は、毎回新しいオブジェクトを作成しているので、動的に編集不可能に変更したいと思います。誰か助けてくれませんか?..ありがとう

4

2 に答える 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 に答える