我有一个中间面板,显示面板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。然而,为什么会出现这个问题呢。
任何人都可以帮助我知道为什么这个问题以及如何解决它。我觉得他们是解决这个问题的一种方法但却无法回想起来。
答案 0 :(得分:5)
从answer开始,当我被问及动态添加/删除组件时,我给了别人:
从容器中动态添加/删除组件时,它就是 必须在之后调用revalidate()/ validate()和repaint()。 前者将强制容器再次布局其组件 后者将删除任何视觉“文物”。
顺便说一句,在这种情况下,完全没必要调用updateUI()
。作为建议,也许使用不同的布局管理器(例如CardLayout
)会更好地为您服务。
答案 1 :(得分:2)
尝试拨打mainPanel.repaint()