我有一个带有var的框架,我将该var添加到了一个JPanel中,如果我想将相同的var添加到另一个JPanel中,它将从第一个JPanel中消失。我想对我的问题做出合乎逻辑的解释,谢谢!
我想将我的JLabel存储在两个jpanel中。
public class Gui {
JPanel panel1, panel2;
JLabel text = new JLabel("some text");
JFrame frame = new JFrame();
public Gui {
panel1 = new JPanel();
panel1.setLayout(null);
panel1.add(text);
panel1.getComponent(0).setBounds(50,50,50,50);
panel1.setBorder(BorderFactory.createLineBorder(Color.black));
panel1.setBounds(x,y,w,h);
// it`s working, the labels it`s visible
panel2 = new JPanel();
panel2.setLayout(null);
panel2.add(text);
panel2.getComponent(0).setBounds(100,100,50,50);
panel2.setBorder(BorderFactory.createLineBorder(Color.black));
panel2.setBounds(x,y,w,h);
//it`s not working, the label ins`t visible ...
frame.add(panel1);
frame.add(panel2);
}
}
最佳答案
免责声明:我正在根据OP的评论编辑答案。但是,我仍然不确定该问题的某些细节。随着更多的澄清,我将很乐意编辑我的答案。
答:一种可能的解决方案是创建您正在使用的Swing组件的子类。例如,
public class MyPanel extends JPanel {
private JLabel label = new JLabel("some text");
public MyPanel() {
this.add(label);
}
}
现在,您可以创建多个
MyPanel
实例,每个实例都有自己的JLabel。然后,您可以将这些面板添加到框架中。补充:利用注释中给出的其他信息,我将更进一步,并创建一个自定义JFrame类:
public class MyFrame extends JFrame {
private MyPanel panel = new MyPanel();
public MyFrame() {
this.add(panel);
}
}
现在,您可以创建
MyFrame
的多个实例。如果想更进一步,可以将参数添加到这两个自定义类的构造函数中,以将JLabel
文本设置为每个实例MyFrame
中的不同值。我会将这些细节留给读者练习。 (当然,请问您是否被卡住了。)