Java 如何复制JPanel?
基本上,我需要复制一个Java 如何复制JPanel?,java,swing,jpanel,Java,Swing,Jpanel,基本上,我需要复制一个JPanel,例如,如果我们使用Integer变量,这应该可以工作: Integer intaux,int1; int1 = 3; intaux = int1; 但这不适用于面板: jPanelaux = jPanel1; 有没有我不知道的setter方法?正如Kira San所说,您需要为每个要显示的面板提供一个实例 例如: public class MyPanel extends JPanel { //creates a JPanel with the te
JPanel
,例如,如果我们使用Integer
变量,这应该可以工作:
Integer intaux,int1;
int1 = 3;
intaux = int1;
但这不适用于面板:
jPanelaux = jPanel1;
有没有我不知道的setter方法?正如Kira San所说,您需要为每个要显示的面板提供一个实例 例如:
public class MyPanel extends JPanel {
//creates a JPanel with the text "hello"
public MyPanel() {
super();
this.add(new JLabel("Hello"));
}
}
public class someClass {
public void someMethod() {
MyPanel myPanel = new MyPanel();
//here we add the same instance of MyPanel twice to panel1, which ..
JPanel panel1 = new JPanel();
//...adds myPanel
panel1.add(myPanel);
//...removes myPanel from the container it was added to first and adds it to this container (which is panel1 in both cases)
panel1.add(myPanel);
//here we add two separate instances of MyPanel to panel2, which should both be shown
JPanel panel2 = new JPanel();
panel2.add(new MyPanel());
panel2.add(new MyPanel());
}
}
如果您只需要原始面板的复制图像,那么创建另一个使用原始JPanel进行绘制的JPanel就可以了
JPanel dup = new JPanel(){
@Override
public void paintComponent(Graphics g){
jPanel1.paintComponent(g);
}
@Override
public Dimension getPreferredSize(){
return jPanel1.getPreferredSize();
}
@Override
public Dimension getMaximumSize(){
return jPanel1.getMaximumSize();
}
@Override
public Dimension getMinimumSize(){
return jPanel1.getMinimumSize();
}
};
这只会创建原始面板的视图,并且没有一个组件能够正常工作,例如JButton或JTextField不会接收输入。还需要做一些工作来导致重新绘制。创建自己的JPanel子类,其中包含您想要的所有内容。 比如:
public class MyPanel extends JPanel {
JButton okButton;
JButton cancelButton;
JTextField nameTextField;
public MyPanel() {
okButton = new JButton();
JLabel nameLabel = new JLabel("Name:");
setLayOut(...);
add(okButton);
...
}
}
要么使用GUI编辑器,要么复制当前代码中的所有内容
然后您可以使用两个
new MyPanel()
s来拥有相同的复杂组件。“基本上我需要复制一个JPanel…”为什么?参见jPanelaux=jPanel1
不创建jpanel的另一个实例,它只提供对同一对象的另一个引用代码>不创建重复的整数实例;它只是创建了对现有int1的另一个引用。可以使用intaux=newinteger(int1)创建副本代码>“我真的看不出为什么这会被否决。”然后也许你应该避免回答基于Swing的问题。这种方法不适用于添加到原始面板中的文本字段和按钮。它重新创建了原始面板的图像,但没有任何功能。@AndrewThompson原始问题没有说明如何使输入字段和按钮发挥功能。其实什么都没说。我意识到这个解决方案的作用,并在顶部陈述。“它实际上什么都没有说。”这是一个很好的提示,可以请求并等待更多细节。提供半生不熟的解决方案在更大的范围内并没有真正的帮助。你的-1(现在是-2)是应得的。@AndrewThompson你发动了人身攻击,而不是回答问题。“那么也许你应该避免回答基于Swing的问题。”这是不必要的。您声称该方法无效,因为它只是原始面板的图像。这可能无法满足OP的需求,但它可能是“如何复制JPanel?”