Я делаю GUI, в котором есть список фильмов, которые вы можете искать, сортировать и фильтровать. В настоящее время все параметры сортировки, параметры фильтрации и поиск работают правильно с данными и успешно обновляют данные и JTable, которые у меня есть для списка фильмов. Я проверил, распечатав названия фильмов на консоли для проверки, а также распечатал значение одной из ячеек в таблице. Хотя таблица обновляется правильно, GUI не отображает новую таблицу при изменении данных. UpdateList вызывается из различных слушателей действий других классов GUI. Это текущий код, который у меня есть для updateList
public void updateList() {
this.setIgnoreRepaint(false);
this.removeAll();
sortFilterData = new ArrayList<ArrayList<String>>(data);
sortFilterData = search.getSearchResult();
sortFilterData = sorter.getSortResults();
sortFilterData = filterYear.getFilteredYears();
sortFilterData = filterGenre.getFilteredGenres();
if (sortFilterData.size() == 0) {
System.out.println("No Results");
} else {
movies = new String[sortFilterData.size()][6];
for (int i = 0; i < sortFilterData.size(); i++) {
for (int j = 0; j < 6; j++) {
movies[i][j] = sortFilterData.get(i).get(j);
System.out.print(movies[i][j] + " ");
}
System.out.println();
}
DefaultTableModel movieList = new DefaultTableModel(movies, columnNames);
JTable table = new JTable(movieList);
table.setRowHeight(30);
table.getColumn("Movie ID").setPreferredWidth(30);
table.getColumn("Title").setPreferredWidth(490);
table.getColumn("Year").setPreferredWidth(15);
table.getColumn("Genres").setPreferredWidth(310);
table.getColumn("IMDB ID").setPreferredWidth(30);
table.getColumn("Rating").setPreferredWidth(40);
JScrollPane list = new JScrollPane(table);
list.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
table.setFillsViewportHeight(true);
list.setViewportView(table);
JLabel label = new JLabel("Movies", SwingConstants.CENTER);
this.add(label, BorderLayout.NORTH);
this.add(list, BorderLayout.CENTER);
this.revalidate();
this.repaint();
this.setIgnoreRepaint(true);
}
}
До этого кода я также пробовал использовать глобальные переменные list, table и movieList. Я также попытался создать их изначально в конструкторе. Я пробовал использовать fireDataTableChange (), repaint (), revalidate () в таблице, я пробовал использовать repaint () и revalidate () все для различных компонентов, включая «this», я пробовал invalidate () в таблице, Я попытался использовать JTable без создания DefaultTableModel, я попытался добавить все в отдельную JPanel и добавить эту панель на эту панель, я попробовал setModel вместо создания новой таблицы с новой моделью, и я попытался просто обновить все вместо создания новых таблиц и полос прокрутки. Я добавил setIgnoreRepaint, чтобы подтвердить, что JPanel не перекрашивается ничем, кроме этого метода. Я очень не понимаю, в чем проблема, и хотел бы получить любую помощь.