В моем приложении Java 8 я использую SwingWorker
для получения некоторых данных из базы данных и вызываю publish
, как только я знаю данные для полной строки, которую я затем хочу добавить в свою таблицу:
DefaultTableModel dtm123 = (DefaultTableModel) myTable.getModel();
@Override
protected void process(List<Integer> chunks) {
if(chunks!=null) {
ListIterator<Integer> li = chunks.listIterator();
while(li.hasNext()) {
dtm123.addRow(myDataList.get(li.next()).getRowArray());
}
}
}
dtm123.getRowCount()
увеличивается каждый раз (я проверял), но таблица не обновляется, чтобы фактически показать новые строки. Я попытался обновить его вручную, но это тоже не сработало:
dtm123.fireTableRowsInserted(0, dtm123.getColumnCount()-1);
Вот странная вещь: если я использую полную версию, она просто отлично заполняет таблицу:
((DefaultTableModel) myTable.getModel()).addRow(myDataList.get(li.next()).getRowArray());
Вы не можете использовать более короткую версию для заполнения таблицы? dtm123
больше нигде не используется, так в чем же разница между двумя версиями?
Редактировать:
Заполнить его напрямую, как это (без SwingWorker
) работает:
myTable.setModel(new DefaultTableModel(
new Object[][] {},
new Object[] {"blaA","blaB","blaC"}
));
DefaultTableModel dtm123 = (DefaultTableModel) myTable.getModel();
dtm123.addRow(new String[] {"bla1A","bla1B","bla1C"});
dtm123.addRow(new String[] {"bla2A","bla2B","bla2C"});
dtm123.addRow(new String[] {"bla3A","bla3B","bla3C"});
dtm123.addRow(new String[] {"bla4A","bla4B","bla4C"});
dtm123.addRow(new String[] {"bla5A","bla5B","bla5C"});
dtm123.addRow(new String[] {"bla6A","bla6B","bla6C"});
dtm123.addRow(new String[] {"bla7A","bla7B","bla7C"});
Похоже, SwingWoker
это проблема, но почему? process
работает в основном потоке, который должен использоваться для обновлений пользовательского интерфейса, и нет никаких исключений или сообщений об ошибках.