1

我有一个主 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(); 

感谢您的任何反馈。

4

1 回答 1

3

摇摆很聪明。您调用revalidate()您更改的组件。

正如 API 所说:

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

所以 revalidating() scrollPane 会做两次工作。

您可以重新验证()滚动窗格而不是面板,但更容易重新验证()面板,因为您有对它的引用,因为您刚刚修改了它。

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

于 2013-06-14T02:45:54.250 回答