我有一个带有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中的不同值。我会将这些细节留给读者练习。 (当然,请问您是否被卡住了。)

10-04 13:11