Почему JTable не обновляет рендерер после changeSelection
Я использую changeSelection(int row, int column, логическое переключение, логическое расширение) в JTable Java. Я сделал так, что когда в таблице есть столбец с флажком и этот столбец щелкается, отправляется событие, показывающее, что теперь строка отмечена / снята, все, что хорошо, когда это делает пользователь. Но когда это делается программно, событие запускается, но JTable не обновляет рендер, я должен добавить что-то еще. Предполагается, что теперь флажок установлен, но нет.
Это код, который я использую для программного запуска события.
boolean success = editCellAt(row, col); // col is a known checkbox column number
if (success) {
changeSelection(row, col, true, false);
}
Что теперь после этого? Событие запускается, но средство визуализации не показывает, что теперь флажок был проверен, если он не был проверен, и наоборот
1 ответ
Данные таблицы хранятся в TableModel
, который является ОП MVC
шаблон для JTable
в Swing, и это то, что вам нужно иметь дело, поэтому, если вы хотите обновить свою таблицу, вам нужно fireTableCellUpdated
от AbstractTableModel
,
так что вы можете сделать что-то вроде этого:
public class MyTableModel extends AbstractTableModel {
//implements the needed methods.
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
//code
fireTableCellUpdated(rowIndex, columnIndex);
}
}
Узнайте больше о AbstractTableModel