gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:57:42 31 4
gpt4 key购买 nike

我有一个主 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com