我有三个JPanel,fatherPanel,childPanel1,childrenPanel2。
单击按钮时,将从父面板中删除当前子面板,并在父面板中添加另一个子面板。
每次我都应该调用revalidate()和repaint()来更新UI。
然后,我知道SwingUtilities.updateComponentTreeUI()具有相同的效果。
我想知道两者之间有什么区别吗?
最佳答案
Swing支持可插入的Look-n-Feel。在运行时更改L&F时,需要使用方法updateComponentTreeUI
通知所有组件有关此更改的信息。因为由于新的L&F,可以更改组件的大小,所以Swing必须调用revalidate来重新计算布局。这是方法updateComponentTreeUI
的代码
/**
* A simple minded look and feel change: ask each node in the tree
* to <code>updateUI()</code> -- that is, to initialize its UI property
* with the current look and feel.
*/
public static void updateComponentTreeUI(Component c) {
updateComponentTreeUI0(c);
c.invalidate();
c.validate();
c.repaint();
}
因此,是的,您可以调用
SwingUtilities.updateComponentTreeUI
来通知您的GUI布局更改,但是这是巨大的开销(理论上可能会有一些副作用)。 revalidate
和repaint
的组合在您的情况下更好。