Как сделать ячейку JTable редактируемой/не редактируемой динамически?

есть ли способ сделать не редактируемую ячейку динамически в jtable ? Всякий раз, когда пользователь дает ввод как false, я хочу сделать не редактируемую ячейку...Я видел в DefaultTableModel isCellEditable метод.Но если я хочу использовать это, я должен создавать каждый раз новый объект.Поэтому я хочу изменить его не редактируемым динамически. Кто-нибудь может мне помочь?..спасибо

2 ответов


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

это, конечно, переопределяет isCellEditable. Кстати, единственный способ сделать это-добавить объявление в экземпляр самой табели, а не в табличную модель.

затем я объявил редактируемым как частное логическое значение, которое можно установить, например:

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

}                                              

и это работать достаточно хорошо.