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

发布于 2024-07-30 01:39:55 字数 252 浏览 2 评论 0原文

容器使用 BorderLayout。 我有一个 JPanel 添加到了 CENTER。 然而 JPanel 没有变量名。

我可以做contents.remove(nameofPanel)

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

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

我该怎么做呢?

The container uses a BorderLayout. I have a JPanel that I added to the CENTER. However the JPanel doesn't have a variable name for it.

I could do contents.remove(nameofPanel)

But since I added it like this contents.add(new CustomJPanel(), BorderLayout.CENTER);

Now I'm trying to remove the current CustomJPanel and add a new one.

How do I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

三岁铭 2024-08-06 01:39:56

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

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

I strongly suggest you declare a global CustomJPanel variable, instantiate it with your first panel, then add the panel. When you want to remove it, you use the same object. Then you assign the new object to the variable, and add it the same way.

Anonymous object are okay when you don't need to refer to them. But you do. So you should avoid using the anonymous way.

蓝眼睛不忧郁 2024-08-06 01:39:56

Or you can list all the elements in the container with the getComponents() function, and search your Panel by an other attribute (if you can).

The getName() attribute is useful for this purpose, e.g. you set a name for your panel before insertion and you can use that name as a search key.

×眷恋的温暖 2024-08-06 01:39:55

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

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

尽管如果您认为需要这样做,您可能需要退后一步并评估为什么要这样做正在努力做到这一点。

While Carl's answer is probably the best one, a less-pleasant alternative if for some reason you can't modify the original add() call:

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

Though if you think you need to do this, you may want to step back and evaluate why you're trying to do it.

放飞的风筝 2024-08-06 01:39:55

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

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

变成

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

Your best way is to extract the constructor call into a named variable - probably a field, actually - and then reduce to the previous case.

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

becomes

nameOfPanel = new CustomJPanel();
contents.add(nameOfPanel, BorderLayout.CENTER);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文