删除/添加组件时面板会展开

时间:2018-10-29 10:42:02

标签: java swing mouselistener

当我将此代码提供给mouseClicked界面中的MouseListener方法时, changeableContentPanel被展开。有人可以帮我吗?

if (!changeableContentPanel.isAncestorOf(aMO)) {
    aMO = new AccountsManagementOptions();
    changeableContentPanel.removeAll();                
    changeableContentPanel.validate();
    changeableContentPanel.repaint();
    aMO.setLocation(5, 100);
    changeableContentPanel.add(aMO);
    changeableContentPanel.validate();
    changeableContentPanel.repaint();
}

1 个答案:

答案 0 :(得分:0)

在面板上删除/添加组件时,应该使用:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();

那是您应该使用revalidate()而不是validate(),并且在对面板进行所有更改之后,只需调用一次代码即可。

  

changeableContentPanel被展开。

是的,因为调用了布局管理器,并且面板的大小将根据添加到面板中的组件的大小重新计算。

  

有人可以帮助我吗?

如果您不想更改大小,则应在面板上使用CardLayout。面板尺寸将固定为添加到面板上的最大卡的尺寸。然后,您只需交换组件。

阅读How to Use CardLayout的Swing教程中的部分,以获取更多信息和工作示例。