java - 动态添加组件并调用repaint/validate/revalidate

标签 java swing jpanel jscrollpane

我有一个主 JPanel、一个内部 JPanel 和一个用于内部 JPanel 的 JScrollPane

mainPanel = new JPanel();
innerPanel = new JPanel();
scroll = new JScrollPane(innerPanel);
scroll.setPreferredSize(new Dimension(400,300));
mainPanel.add(scroll);

我还将组件动态添加到内部 JPanel

添加所有组件后,我在内部 JPanel 上调用 revalidate() 和 repaint()

当我从内部 JPanel 调用 removeAll() 组件时,我再次在内部 JPanel 上调用 revalidate() 和 repaint()

它工作正常,但我的困惑和问题是我是否也应该在滚动上调用 revalidate(),即:

scroll.getViewport().revalidate(); 

感谢您的反馈。

最佳答案

Swing 很聪明。您对更改的组件调用 revalidate()

正如 API 所说:

换句话说,调用此方法后,将验证沿此组件的包含层次结构向上查找时找到的第一个 validateRoot(如果有)。默认情况下,JRootPane、JScrollPane 和 JTextField 从 isValidateRoot 返回 true。

因此 revalidating() 滚动 Pane 将执行两次工作。

您可以 revalidate() 滚动 Pane 而不是面板,但仅 revalidate() 面板更容易,因为您刚刚修改了它,因此拥有对它的引用。

当您对某个方法有疑问时,请从 API 开始。如果您有不明白的地方,请引用 API 中的引用资料,以便我们提供帮助。

关于java - 动态添加组件并调用repaint/validate/revalidate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17100290/

相关文章:

java 。抽象元素列表。如何确定元素类型

java - Eclipse 4.4(64 位 mac)需要 JVM v1.7+

java - JTabbedPane 中的 XML 解析和显示

java - 当 ListModel 在 Java 中更改时,如何更新 JList?

java - 使用 Swing 绘制文本

java - 内部内容在 JScrollPane 中显示然后消失

java - JAX-WS - 在 SOAP 处理程序中获取消息时出现 NoSuchMethodError

java - 使用java在mysql中插入一个文件的路径

java - 使用 ActionBinding 按下组合键

Java 在一帧中绘制线条