У меня проблема с обновлением JTable в Java Swing.
Данные, которые я хочу показывать, меняются несколько раз в секунду, и я ищу эффективный способ обновления данных в JTable.
Я использовал метод setModel () для обновления данных, и он работает, НО имеет 2 недостатка:
Если пользователь изменит размер столбцов таблицы в заголовке, он получит около 10 исключений (я думаю, потому что модель больше не доступна, потому что она меняется несколько раз в секунду)
Информация о длине столбца с измененным размером (в пикселях) теряется при каждом изменении данных (а также и TableModel).
Для TableModel я использую свою собственную модель ResultSetTableModel, которая расширяет AbstractTableModel.
Этот ResultSetTableModel имеет метод setResultSet(ResultSet rs)
и перезаписывает метод getValueAt(x,y)
...
Как я уже сказал, если я устанавливаю новый ResultSet для моего ResultSetTableModel, а затем добавляю его в JTable с помощью метода setModel (resultSetTableModel), он работает, но у него есть 2 недостатка, которые я сказал.
Так что я думаю, что могу решить эту проблему с помощью метода fireTableDataChanged (), но я пробовал много возможностей, но без изменений.
Вы знаете, где я должен разместить праздник?
В данный момент я пробую это, но это не работает, и я не знаю почему:
private ResultSetTableModel resultSetTableModel;
private DataFetcher dataFetcher;
private JTable table;
...
//works fine
public void initaialUpdateTable() {
resultSetTableModel = new CachingResultSetTableModel(dataFetcher.getRS());
table.setModel(resultSetTableModel);
}
//does not work
public void updateTable(){
resultSetTableModel.setResultSet(dataFetcher.getRS());
resultSetTableModel.fireTableDataChanged();
}
Если я каждый раз вызываю initaialUpdateTable (), он работает нормально, но я хочу, чтобы менялись только данные, а не вся модель
Спасибо за ваши ответы
Michael