Java BorderLayout.add每次都不工作

时间:2018-11-15 01:21:30

标签: java swing layout-manager border-layout

我正在创建一个选项卡式窗格,其中WEST中的选项卡或borderlayout中的内容。第一次单击菜单项在我想要的窗格中设置内容时,这种方法效果很好。但是,一旦单击一次菜单项,该菜单项将不再重新填充中间的窗格。下面是我设置的激活功能;

public void setActive()
{
    panelShowLocation.setAllMenuItemsAsInActive();
    active = true;
    setBackground(color_panelHover);
    menuText.setForeground(color_textHover);
    panelShowLocation.add(content, BorderLayout.CENTER);
    //content.setVisible(true);
    panelShowLocation.revalidate();
}

1 个答案:

答案 0 :(得分:1)

panelShowLocation.add(content, BorderLayout.CENTER);
panelShowLocation.revalidate();

将组件添加到面板中时,不会删除现有组件。

Swing绘画逻辑将绘画最后添加的组件。因此,新添加的组件将被绘制,但旧组件将被绘制在新添加的组件之上

所以您需要像这样的逻辑:

panel.remove( theOldPanel );
panel.add(theNewPanel, BorderLayout.CENTER)
panel.revalidate();
panel.repaint();

另一个选择是使用CardLayout。 CardLayout允许您将多个组件添加到同一面板。同一时间只有一个组件可见。阅读有关How to Use CardLayout的Swing教程中的部分,以获取更多信息和工作示例。