Почему JTable не обновляет рендерер после changeSelection

Я использую changeSelection (строка int, столбец int, логическое переключение, логическое расширение) в Java JTable. Я сделал так, что когда в таблице есть столбец с флажком и этот столбец щелкнут, отправляется событие, чтобы показать, что теперь строка отмечена/снята, все в порядке, когда это делается пользователем. Но когда это делается программно, событие запускается, но JTable не обновляет рендерер, я должен добавить что-то еще. Он должен показать, что теперь флажок установлен, но нет.

Это код, который я использую для запуска события программно.

boolean success = editCellAt(row, col); // col is a known checkbox column number
if (success) {
   changeSelection(row, col, true, false);
}

Что теперь после этого? Событие срабатывает, но рендерер не показывает, что теперь флажок установлен, если он не отмечен, и наоборот


person user3399231    schedule 09.03.2014    source источник


Ответы (1)


Данные таблицы хранятся в TableModel, который является шаблоном OP 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

person Salah    schedule 09.03.2014