我有三个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布局更改,但是这是巨大的开销(理论上可能会有一些副作用)。 revalidaterepaint的组合在您的情况下更好。

10-06 13:37