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