gpt4 book ai didi

java - 将 JPanel 内容复制到另一个 JPanel,而不删除原始 JPanel 的内容

转载 作者:太空宇宙 更新时间:2023-11-04 14:45:41 27 4
gpt4 key购买 nike

我是 Java swing 编码新手。我正在尝试将 JPanel 内容复制到一个新的 JPanel,它使用原始 JPanel 的内容来显示。此外,原始 JPanel 内容随着记录的变化而变化。我尝试了以下代码,但完全没用。

public void addPanel(JPanel jp)
{
JPanel jp1=new JPanel();
int count=jp.getComponentCount()-1;
for(;i>=0;i--)
{
jp1.addComponent(jp.getComponent(i);
}
//after this I am setting bounds of jp1.
this.add(jp1);
}

如果我想将多个 JPanel 作为原始 JPanel 更改,则这不起作用。如果多次使用(例如在 for 循环中使用),它将覆盖 new 'jp' 的内容而不是 'jp1'。我不想删除原始 JPanel 的组件。我怎样才能做到这一点?

最佳答案

移动组件的实例是可能的,但应对它们需要您手动执行。

您可以通过创建原始类的新实例,然后使用 getter 的值调用 setter 来将其作为程序来执行此操作...但坦率地说,这是一种容易出错的方法,您需要对其进行反射除非确实必要,否则不应使用。

您可以做的是覆盖您使用的标准Java类(例如JLabel),并在您覆盖的类中实现Cloneable,在其中设置您需要的参数(文本、边界等),然后像这样调用你的函数:

public void addPanel(JPanel jp)
{
JPanel jp1=new JPanel();
int i=jp.getComponentCount()-1;
for(;i>=0;i--)
{
jp1.addComponent(
((Component) // this casts the clone back to component. This is maybe superfluous.
((Cloneable)jp.getComponent(i) // You have to ensure that all components that are returned are in fact instances of Cloneable.
).clone()
));
}
//after this I am setting bounds of jp1.
this.add(jp1);
}

如果您沿着这条路走下去,请务必阅读 Cloneable 的文档.

关于java - 将 JPanel 内容复制到另一个 JPanel,而不删除原始 JPanel 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24406766/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com