如何解决如何强制重绘 JTable、JScrollPane?
我正在创建一个自顶向下的解析器,它根据给定的语法检查给定源代码的语法,然后在一个简单的 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,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));
bodyPanel.revalidate();
bodyPanel.repaint();
frame.add(bodyPanel,BorderLayout.CENTER);
frame.setVisible(true);
...
关于如何强制框架或目标组件完全重绘(即忘记之前的状态,只在滚动、调整大小等时显示最新信息...),最终克服这些问题有什么想法吗?谢谢。
解决方法
。但是,在选择不同的文件或更新所选文件时,然后再次单击“检查语法”按钮,一些图形问题开始发生
不要一直创建新组件。旧组件仍会添加到框架中。所以现在你有两组组件。
相反,您可以替换:
- 使用
JTable
获取table.setModel( yourTableModel )
中的数据 -
JScrollPane
中的组件使用scrollPane.setViewportView( yourTable )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。