както много други хора, искам моята JTable да се актуализира след добавяне на редове. Тук можете да видите фрагментите от моя код.
ArrayList<> foundR = new ArrayList<FoundResult>();
JTable resultsTable = new JTable();
AbstractTableModel resultsModel = new FoundResultTableModel(foundR);//<- model which contains FoundResults as rows
JScrollPane scroller = new JScrollPane();
resultsTable.setModel(resultsModel);
scroller.add(resultsTable);
this.add(scroller, BorderLayout.CENTER);// a big panel which contains scroller and other components
След това добавете ActionListener, който използва следния метод:
foundR.clear();
foundR.addAll( ...);//<- so the foundR ArrayList is refreshed
resultsModel.fireTableDataChanged();
resultsModel.fireTableStructureChanged();
rowCount of results Моделът показва, че моделът е обновен (броят на редовете се различава от предишния вариант), но таблицата все още не се появява. Опитах се да вмъкна resultsTable.repaint(), но също не помогна.
UDP(NB) Открих, че проблемът е концентриран в този скролер панел.
Ако добавя таблицата директно към големия панел, тя се обновява (но не мога да видя всички резултати, тъй като не мога да превъртя надолу)
this.add(resultsTable, BorderLayout.CENTER);
Ако използвам скролер, нищо не се показва. Знаеш ли защо?
FoundResultTableModel
. - person alex2410   schedule 12.05.2014