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

时间:2013-06-14 02:38:13

标签: 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(); 

感谢您的反馈。

1 个答案:

答案 0 :(得分:2)

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

正如API所说:

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

因此,重新验证()scrollPane将完成两次工作。

你可以重新验证()scrollPane而不是面板,但是更容易重新验证()面板,因为你有一个对它的引用,因为你刚修改它。

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