如何从使用BorderLayout的JFrame中删除组件

use*_*514 4 java swing jpanel jframe

容器使用BorderLayout.我有一个JPanel,我添加到CENTER.但是,JPanel没有变量名称.

我可以做contents.remove(nameofPanel)

但是因为我像这样添加了content.add(new CustomJPanel(),BorderLayout.CENTER);

现在我正在尝试删除当前的CustomJPanel并添加一个新的.

我该怎么做呢?

Sbo*_*odd 6

虽然卡尔的答案可能是最好的,但如果出于某种原因你无法修改原来的add()调用,那么这是一个不太令人愉快的选择:

contents.remove(((BorderLayout)getLayout()).getLayoutComponent(BorderLayout.CENTER));
contents.add(someNewPanel);
Run Code Online (Sandbox Code Playgroud)

虽然如果你认为你需要这样做,你可能想退后一步,评估你为什么要这样做.


Car*_*ter 5

最好的方法是将构造函数调用提取到一个命名变量 - 实际上可能是一个字段 - 然后缩减到前一个案例.

contents.add(new CustomJPanel(), BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)

nameOfPanel = new CustomJPanel();
contents.add(nameOfPanel, BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)