Java JFrame和JPanels

Java JFrame和JPanels,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我正在制作一个GUI,它允许我从几个选项中选择一个,这些选项有更多的选项(按钮)。我对Java缺乏经验,对它有一些问题 为什么this.dispose()在单击按钮11后不打开新JPanel?如何准确地打开新的JPanel面板11?你能给我一些建议吗 class Panel1 extends JPanel { private Frame frame; private JButton backButton; private JButton Button11; private JButton But

我正在制作一个GUI,它允许我从几个选项中选择一个,这些选项有更多的选项(按钮)。我对Java缺乏经验,对它有一些问题

为什么
this.dispose()
在单击
按钮11后不打开新
JPanel
?如何准确地打开新的
JPanel
面板11
?你能给我一些建议吗

class Panel1 extends JPanel
{
private Frame frame;
private JButton backButton;
private JButton Button11;
private JButton Button12;
private JButton Button13;

public Panel1(Frame f)
{
frame=f;

setPreferredSize(new Dimension(500,500));
backButton=new JButton("Back");
Button11=new JButton("Z warunkami atmosferycznymi");
Button12=new JButton("Z kontrolą ruchu lotniczego");
Button13=new JButton("Z uszkodzeniem/awarią");

add(new JLabel("Podczas lotu"));
add(backButton);
add(Button11);
add(Button12);
add(Button13);

backButton.addActionListener( new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e){
    frame.back(); }
                              }
);

Button11.addActionListener( new ActionListener () {
    public void actionPerformed(ActionEvent e) {
    Panel11 panel = new Panel11();
    panel.setVisible(true);
    panel.setLocationRelativeTo(null);
    this.dispose();
       }
}
);
    }
}

class Panel11 extends JPanel
{

private Frame frame;
private JButton backButton;

public Panel11(Frame f)
{
frame=f;

setPreferredSize(new Dimension(200,500));
backButton=new JButton("Back");
add(new JLabel("Podczas rotacji"));
add(backButton);
backButton.addActionListener( new ActionListener()
                              {
                                @Override
                              public void actionPerformed(ActionEvent e)
                                {
                                  frame.back();
                                }
                              }
 );  
}
}

class Frame extends JFrame
{

private JPanel main;
private JButton button1;
private Panel1 panel1;


public Frame()
{
super("Algorytm przydziału kodów opóźnień");

main=new JPanel();
main.setPreferredSize(new Dimension(400,200));
panel1=new Panel1(this);

button1=new JButton("Podczas lotu");
button1.addActionListener(new ActionListener()
                          {
                            @Override
                            public void actionPerformed(ActionEvent e)
                            {
                              update(panel1);
                            }
                          }
);

main.add(button1);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(main);
pack();
setResizable(true);
setVisible(true);
}

public void back()
{
update(main);
}

private void update(JPanel panel)
{
remove(panel1);
remove(main);
add(panel);
pack();
panel.setVisible(true);
setVisible(true);
}
}


public class Main
{
public static void main(String[] args)
{
new Frame();
}
}    

您的错误是因为您正在呼叫:

Panel11 panel = new Panel11();
现在,让我们看看
Panel11
的构造函数:

public Panel11(Frame f)
public Panel11()
你觉得有什么不同吗?是的,我知道,您从未编写过
public panel 11()
,但默认情况下它在那里,因此,您正在调用它,而它是空的,因此,您需要向它传递一个
Frame
引用,同时确保将其更改为
JFrame
,而不是
Frame
,因为
Frame
属于AWT,而
JFrame
属于Swing

您可能已经注意到,如果使用正确的代码缩进,接下来的事情是,您正在使用多个
JFrames
,请参见(糟糕!),而您可能希望使用or


如果没有帮助,请发布一个有效的

请澄清您想要发生什么:您希望当您单击按钮11时,面板11将显示在Jframe中吗?@MarrieteCowby12 YesJava不是Javascript!正确使用标签!,然后请正确缩进您的代码,并发布一个有效的(即,不是您的全部代码,而是一个简单的示例)来演示您的问题,并尽可能简短,以便我们可以复制粘贴它并在我们的PC中查看。请不要还原更改,您使用的是Java,而不是Javascript!您仍然忘记正确缩进代码