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

时间:2009-08-04 17:28:24

标签: java swing jframe jpanel

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

我可以做contents.remove(nameofPanel)

但是我自己添加了这个内容.add(new CustomJPanel(),BorderLayout.CENTER);

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

我该怎么做?

4 个答案:

答案 0 :(得分:6)

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

contents.remove(((BorderLayout)getLayout()).getLayoutComponent(BorderLayout.CENTER));
contents.add(someNewPanel);

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

答案 1 :(得分:5)

你最好的方法是将构造函数调用解压缩到一个命名变量 - 实际上可能是一个字段 - 然后减少到之前的情况。

contents.add(new CustomJPanel(), BorderLayout.CENTER);

变为

nameOfPanel = new CustomJPanel();
contents.add(nameOfPanel, BorderLayout.CENTER);

答案 2 :(得分:1)

或者您可以使用http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Container.html#getComponents()功能列出容器中的所有元素,并使用其他属性搜索Panel(如果可以的话)。

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#getName()属性可用于此目的,例如在插入之前为面板设置名称,您可以将该名称用作搜索键。

答案 3 :(得分:0)

我强烈建议你声明一个全局的CustomJPanel变量,用你的第一个面板实例化它,然后添加面板。如果要删除它,请使用相同的对象。然后将新对象分配给变量,并以相同的方式添加它。

当您不需要引用它们时,匿名对象是可以的。但你做了。所以你应该避免使用匿名方式。

相关问题