我有一个主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();
感谢您的反馈。
答案 0 :(得分:2)
Swing很聪明。您在更改的组件上调用revalidate()
。
正如API所说:
换句话说,在调用此方法之后,将验证在向上遍历此组件的包含层次结构时找到的第一个validateRoot(如果有)。默认情况下,JRootPane,JScrollPane和JTextField从isValidateRoot返回true。
因此,重新验证()scrollPane将完成两次工作。
你可以重新验证()scrollPane而不是面板,但是更容易重新验证()面板,因为你有一个对它的引用,因为你刚修改它。
当您对方法有疑问时,请从API开始。如果您有什么不明白的地方,请引用API中的引用,以便我们提供帮助。