Swing:屏幕组件未按预期刷新

Tvd*_*Tvd 2 java swing components refresh repaint

我有一个middlePanel,显示panel1,里面有6个按钮.单击按钮时,其他组件将显示在mainPanel中,最后返回到panel1.

我面临的问题是:组件不会立即显示 - 我开始移动光标使其可见.我用来设置面板的代码是:

public void SetMainPanel(JPanel panel) {
    middlePanel.removeAll();
    this.middlePanel = panel;
    panel.setVisible(true);
    this.middlePanel.setVisible(true);
    mainPanel.add(middlePanel, BorderLayout.CENTER);
    middlePanel.revalidate();
    middlePanel.repaint();
    mainPanel.revalidate();
    mainPanel.repaint();
}
Run Code Online (Sandbox Code Playgroud)

请参阅已设置的传递面板可见,以及添加它的中间面板.updateui&validate包含middlePanel的middlePanel和mainPanel.但为什么会出现这个问题.

任何人都可以帮助我知道为什么这个问题以及如何解决它.我觉得他们是解决这个问题的一种方法但却无法回想起来.

mre*_*mre 5

当被问及动态添加/删除组件时,我给了别人一个答案:

从容器中动态添加/删除组件时,必须在之后调用revalidate()/ validate()和repaint().前者将强制容器再次布局其组件,后者将删除任何视觉"工件".

顺便说一下,在这种情况下,完全没有必要调用updateUI().作为一个建议,也许使用不同的布局管理器(例如CardLayout)可以更好地为您服务.