Java BorderLayout.add 每次都不工作

Java BorderLayout.add not working each time

我正在创建一个选项卡式窗格,其中选项卡在西边或边框布局和中间的内容。这在第一次单击菜单项时效果很好,在我想要的窗格中设置内容。但是一旦我单击了一个菜单项一次,该菜单项就不再重新填充中间的窗格。下面是我设置的激活函数;

public void setActive()
{
    panelShowLocation.setAllMenuItemsAsInActive();
    active = true;
    setBackground(color_panelHover);
    menuText.setForeground(color_textHover);
    panelShowLocation.add(content, BorderLayout.CENTER);
    //content.setVisible(true);
    panelShowLocation.revalidate();
}
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 教程部分,了解更多信息和工作示例。