У меня есть класс, реализующий интерфейс TableModel. Когда я вызываю setModel на своем jTable и устанавливаю свой класс в качестве модели, а затем вызываю jTable.updateUI();
, все в порядке. Но в некоторых случаях я хочу изменить модель с другой структурой. Отображение данных по-прежнему работает нормально, но мои столбцы не обновляются. Есть ли способ заставить мою таблицу также обновлять столбцы из новой модели?
автоматическое обновление столбцов jtable при изменении модели
Ответы (4)
Модель должна запустить соответствующее событие, например: fireTableStructureChanged, если изменились и данные, и структура.
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#fire
AbstractTableModel
я использую интерфейс
- person soupdiver; 20.06.2012
jTable.updateUI();
– это метод, соответствующий внешнему виду, не используйте его.
У меня есть класс, реализующий интерфейс TableModel.
вы должны переопределить правильные уведомители для методов из
TableModel
используйте
DefaultTableModel
, там все нотификаторы реализованы в API,все обновления должны быть сделаны
EventDispatchThread
Observer
, поэтому я не могу просто перейти на расширение DefaultTableModel
- person soupdiver; 20.06.2012
Observable
- person soupdiver; 20.06.2012
Если, как и я, вы просто пишете небольшой хак, вы можете рассмотреть возможность использования метода .repaint() вместо метода .updateUI().
Я использовал это, потому что я не использую TableModel, но у меня просто есть данные в Object[][], как и в первом примере учебника по солнцу (ну, оракулу).
Попробуйте это (вставьте после строки setModel(myTableModel);):
myJTable.createDefaultColumnsFromModel();
В моем случае это решило проблему с обновлением, в то время как: .repaint(), .invalidate(), .fireTableDataChanged() не помогли.