如何从使用 BorderLayout 的 JFrame 中删除组件
容器使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我强烈建议您声明一个全局 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.
或者您可以使用 getComponents() 函数,并通过其他属性搜索您的面板(如果可以的话)。
getName() 属性对于此目的很有用,例如,您在插入之前为面板设置一个名称,并且可以使用该名称作为搜索关键字。
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.
虽然 Carl 的答案可能是最好的答案,但如果由于某种原因您无法修改原始的 add() 调用,那么这是一个不太令人愉快的选择:
尽管如果您认为需要这样做,您可能需要退后一步并评估为什么要这样做正在努力做到这一点。
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:
Though if you think you need to do this, you may want to step back and evaluate why you're trying to do it.
最好的方法是将构造函数调用提取到一个命名变量中(实际上可能是一个字段),然后减少到前面的情况。
变成
Your best way is to extract the constructor call into a named variable - probably a field, actually - and then reduce to the previous case.
becomes