Java BorderLayout.add每次都不起作用[重复]

Posted

技术标签:

【中文标题】Java BorderLayout.add每次都不起作用[重复]【英文标题】:Java BorderLayout.add not working each time [duplicate] 【发布时间】:2019-04-18 01:32:41 【问题描述】:

我正在创建一个选项卡式窗格,其中选项卡位于 WEST 或边框布局中,内容位于中间。当菜单项第一次单击设置我想要的窗格中的内容时,这非常有用。但是,一旦我单击了一个菜单项,该菜单项就不再重新填充中间的窗格。下面是我设置的活动函数;

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】:
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 教程部分,了解更多信息和工作示例。

【讨论】:

谢谢哥们。根据你的回答让它工作。

以上是关于Java BorderLayout.add每次都不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

多线程执行,为啥明明已经加了synchronized了,还是出现每次结果都不一样呢?

为啥每次建模时间我在 Weka 收到的拍摄时间都不一样?

React Axios Delete 每次都不渲染

mongoose.find() 每次都不返回

在 Intellij 中,返回命令每次都不起作用

Linux进行AES加密每次结果都不一致并且解密失败报错