簡體   English   中英

如何動態地使JTable單元可編輯/不可編輯?

[英]How to make JTable cell editable/noneditable dynamically?

有沒有辦法在jtable中動態制作不可編輯的單元格? 每當用戶給出像false這樣的輸入時,我想制作不可編輯的單元格......我在DefaultTableModel中看到了isCellEditable方法。但是如果我想使用我每次創建新對象的時候。所以我想要動態地改變它不可編輯。 你能幫助我嗎?謝謝

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()函數。理論上。 我沒有測試過這段代碼,但它應該可行。 您可能仍然需要觸發某種事件來觸發表以注意更改。

我有類似的問題來弄清楚如何動態地啟用/禁用單元格的編輯(在我的情況下基於數據庫中的出現。)我這樣做:

jTableAssignments = new javax.swing.JTable() {
public boolean isCellEditable(int rowIndex, int colIndex) {
    return editable;
}};

當然覆蓋的是CellEditable。 我可以通過這種方式完成這項工作的唯一方法是將聲明添加到tabel本身的實例化而不是表模型。

然后我將editable聲明為可以設置的私有布爾值,例如:

    private void jTableAssignmentsMouseClicked(java.awt.event.MouseEvent evt) {                                               
    if(jTableAssignments.getSelectedRow() == 3 & jTableAssignments.getSelectedColumn() == 3) {
        editable = true;
    }
    else {
        editable = false;
    } 

}                                              

而且效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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