我是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更改,这不起作用。它会覆盖新的' jp'在' jp1'如果多次使用,比如在for循环中使用。 我不想删除原始JPanel的组件。我怎么能这样做?
答案 0 :(得分:0)
可以移动组件的实例,但是应对它们需要您手动完成。
你可以通过创建原始类的新实例,然后使用getters的值调用setter来执行此程序...但坦率地说,这是一个容易出错的方式,你需要反思它,你除非真的有必要,否则不应该使用。
您可以做的是覆盖您使用的标准Java类(eG 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的文档。
答案 1 :(得分:0)
以下是使用JPanels / JFrames的设计视图解决以下问题而无需编码的方法。
您可以转到设计视图中的导航器选择所有JPanel组件并通过键入 ctrl + a 和 ctrl +来复制它们ç即可。 然后创建另一个JPanel并在设计视图中,只需使用 ctrl + v 粘贴它们。
结果:您可以获得具有相同属性和值的所有组件相同的大小,尺寸和位置。执行此操作后,您可以使用GUI表单的属性轻松更改所需内容。