4

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

我可以做 contents.remove(nameofPanel)

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

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

我该怎么做呢?

4

4 回答 4

6

虽然卡尔的答案可能是最好的答案,但如果由于某种原因您无法修改原始的 add() 调用,则不是那么令人愉快的选择:

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

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

于 2009-08-04T18:54:14.897 回答
5

您最好的方法是将构造函数调用提取到命名变量中 - 实际上可能是一个字段 - 然后减少到前一种情况。

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

变成

nameOfPanel = new CustomJPanel();
contents.add(nameOfPanel, BorderLayout.CENTER);
于 2009-08-04T17:38:43.817 回答
1

或者,您可以使用getComponents()函数列出容器中的所有元素,并通过其他属性(如果可以的话)搜索您的面板。

getName()属性对此很有用,例如,您在插入之前为面板设置了一个名称,您可以使用该名称作为搜索键。

于 2009-08-05T06:56:26.393 回答
0

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

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

于 2009-08-14T14:45:31.040 回答