我正在制作一个GUI,它允许我选择几个选项中的一个,它们有更多选项(按钮)。我对Java缺乏经验并且遇到了一些问题。
点击this.dispose()
后,为什么JPanel
无法打开新的Button11
?我如何准确地JPanel
打开新Panel11
?你能给我一些建议吗?
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();
}
}
答案 0 :(得分:2)
您的错误是因为您正在致电:
Panel11 panel = new Panel11();
现在,让我们看看Panel11
的构造函数:
public Panel11(Frame f)
public Panel11()
你觉得有什么不同吗?是的,我知道,你从未写过public Panel11()
,但默认情况下它就在那里,所以,你正在调用它并且它是空的,所以,你需要传递{{1}引用它,同时确保将其更改为Frame
而不是JFrame
,因为Frame
属于AWT而Frame
属于Swing。
您会发现使用正确的代码缩进,接下来就是,您使用多个JFrame
,请参阅The use of multiple JFrames, Good / Bad practice?(BAD!),而您可能希望使用{{ 3}}或Card Layout
如果这没有帮助,请发布有效的Dialogs