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

时间:2011-11-18 15:32:02

标签: java swing components refresh repaint

我有一个中间面板,显示面板1,里面有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();
}

查看对已传递的面板设置可见,以及添加它的中间面板。 updateui&验证包含middlePanel的middlePanel和mainPanel。然而,为什么会出现这个问题呢。

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

2 个答案:

答案 0 :(得分:5)

answer开始,当我被问及动态添加/删除组件时,我给了别人:

  

从容器中动态添加/删除组件时,它就是   必须在之后调用revalidate()/ validate()和repaint()。   前者将强制容器再次布局其组件   后者将删除任何视觉“文物”。

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

答案 1 :(得分:2)

尝试拨打mainPanel.repaint()