Как сделать ячейку 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;
}
}
и это работать достаточно хорошо.