#java #swing #jframe #jtable #jscrollpane
#java #качать #jframe #jtable #jscrollpane
Вопрос:
Я создаю синтаксический анализатор сверху вниз, который проверяет синтаксис данного исходного кода в соответствии с заданной грамматикой, а затем отображает результат в простом графическом интерфейсе.
По сути, пользователь выбирает грамматику и исходные файлы, нажимает «Проверить синтаксис», и результат отображается, как на картинке…
И это изначально работает нормально. Однако при выборе разных файлов или обновлении выбранного файла, а затем повторном нажатии кнопки «Проверить синтаксис» после таких взаимодействий, как прокрутка, изменение размера или щелчок по строкам, начинают возникать некоторые графические проблемы:
Проблемы становятся более очевидными при изменении размера окна:
Вот структура фрейма:
JFrame frame
JPanel headerPanel
...
JPanel bodyPanel
JLabel tableTitle
JScrollPane tableScrollPane
JTable table
JLabel tableSummary
Я пробовал такие методы, как revalidate()
и repaint()
на компонентах, где возникают проблемы, но они исправляли только те, которые связаны с labels …
Я также пытался использовать a SwingWorker
, но это не решило проблему.
Вот часть кода, которая может иметь отношение к делу:
...
var tableScrollPane = new JScrollPane(table);
tableScrollPane.setBorder(new MatteBorder(0,1,0,1, palette.get("strongTeal")));
tableScrollPane.setBackground(palette.get("strongTeal"));
tableScrollPane.revalidate();
tableScrollPane.repaint();
...
var bodyPanel = new JPanel();
bodyPanel.setLayout(new BorderLayout());
bodyPanel.add(tableTitle, BorderLayout.NORTH);
bodyPanel.add(tableScrollPane, BorderLayout.CENTER);
bodyPanel.add(tableSummary, BorderLayout.SOUTH);
bodyPanel.setBorder(new EmptyBorder(45,45,45,45));
bodyPanel.revalidate();
bodyPanel.repaint();
frame.add(bodyPanel, BorderLayout.CENTER);
frame.setVisible(true);
...
Есть идеи о том, как заставить фрейм или целевые компоненты полностью перерисовать (то есть забыть о предыдущем состоянии и показывать только самую свежую информацию при прокрутке, изменении размера и т. Д.), В конечном Итоге преодолевая эти проблемы? Спасибо.
Ответ №1:
. Однако при выборе разных файлов или обновлении выбранного файла, а затем повторном нажатии кнопки «Проверить синтаксис» начинают возникать некоторые графические проблемы
Не продолжайте создавать новые компоненты. Старые компоненты по-прежнему добавляются в фрейм. Итак, теперь у вас есть два набора компонентов.
Вместо этого вы можете заменить:
- данные в с
JTable
помощьюtable.setModel( yourTableModel )
- компонент в с
JScrollPane
помощьюscrollPane.setViewportView( yourTable )