【发布时间】:2021-03-31 20:21:01
【问题描述】:
我正在创建一个自上而下的解析器,它根据给定的语法检查给定源代码的语法,然后在一个简单的 GUI 中显示结果。
基本上,用户选择语法和源文件,点击“检查语法”,结果如图所示...
它最初运行良好。但是,在选择不同的文件或更新所选文件时,然后再次单击“检查语法”按钮,在交互后开始发生一些图形问题,例如滚动,调整大小或单击行:
调整窗口大小时问题更加明显:
这是框架的结构:
JFrame frame
JPanel headerPanel
...
JPanel bodyPanel
JLabel tableTitle
JScrollPane tableScrollPane
JTable table
JLabel tableSummary
我在出现问题的组件上尝试了诸如revalidate() 和repaint() 之类的方法,但它们只修复了标签的那些...
我也尝试过使用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);
...
关于如何强制框架或目标组件完全重绘(即忘记以前的状态,只在滚动、调整大小等时显示最新信息),最终克服这些问题的任何想法?谢谢。
【问题讨论】:
标签: java swing jframe jtable jscrollpane