用按钮关闭JFrame而不终止程序

问题描述

有两个框架,当您单击第一个框架上的按钮时,它将打开第二个框架。在第二个框架中,我试图创建一个按钮,当按下该按钮时,它会关闭JFrame而不终止程序,但是我没有运气。这是我要用于第二帧的代码,没有按钮,它可以很好地编译:
class Time_First_Depot extends JFrame
{   
    Time_First_Depot()
    {
        Container c = getContentPane(); \\\\ creates content pane
        c.setLayout ( null );

        Color b = new Color(100,200,255); \\\\ set colour of JFrame 
        c.setBackground( b );

        JButton exit = new JButton(\"EXIT\"); \\\\creats button
        exit.addActionListener(new ExitButtonListener()); \\\\ adds listener to button

        exit.setForeground(Color.BLUE); \\\\edits buton
        exit.setFont(new Font(\"Time\",Font.BOLD,12));

        c.add(exit);\\\\adds button

        exit.setBounds(250,375,90,30);\\\\ sets location of button

        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        this.setBounds((int) screenSize.getWidth()/2 - 370,(int) screenSize.getHeight()/2 - 300,600,450);  // set position and size
        this.setResizable(false);
        this.setDefaultCloSEOperation(disPOSE_ON_CLOSE);

        this.setTitle(\"Time\");
        this.setVisible(true);
        this.setResizable(false);
    }
}

class ExitButtonListener implements ActionListener
{
    ExitButtonListener(){}
            public void actionPerformed(ActionEvent e)
            {
                    if (e.getActionCommand().equals(\"EXIT\"))
                    {

                            dispose();
                    }
            }
} 编译时收到以下错误消息:
cannot find symbol
symbol  : method dispose()
location: class ExitButtonListener
                            dispose();
                            ^
(注意:我删除了与问题无关的位或无关代码。) 在此先感谢您的帮助,任何人都可以给我。     

解决方法

如果要处置Time_First_Depot帧,则必须在该类的实际活动实例上调用dispose();因此事件处理程序需要访问该实例。您可以通过多种方式来执行此操作。一种方法:将“ this”传递给ExitButtonListener的构造函数;让构造函数接受JFrame参数并将其存储在成员变量中,然后通过该成员调用dispose()。     ,方法
dispose
是您的方法a3ѭ。因此,我建议您参考一下您的ѭ4pass。
class ExitButtonListener implements ActionListener {
    private final JFrame frame;

    ExitButtonListener(JFrame frame) {
        this.frame = frame;
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals(\"EXIT\")) {
            frame.dispose();
        }
    }
}
    ,  有两个框架,当您单击第一个框架上的按钮时,它将打开第二个框架。在第二个框架上,我试图创建一个按钮,当按下该按钮时,它将关闭JFrame而不终止.. 如果您可以将第二个
JFrame
换成
JOptionPane
(或模态
JDialog
),则大多数问题都将得到解决。     ,您应该考虑触发ѭ9,除了触发JFrame右上角的红色x之外,不会触发相同的过程。 然后,将由JFrame本身或更确切地说已经指定的处理:
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
您可以通过多种方式完成此问题的答案,如本问题的答案所述。 可能性一:排队一个WindowEvent,从而伪装一个CloseOperation:
public void actionPerformed (Event e) {
    WindowEvent wev = new WindowEvent(
         SwingUtilities.windowForComponent((Component) e.getSource()),WindowEvent.WINDOW_CLOSING
    );
    Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(wev);
}
可能性二:在不使事件入队的情况下处置Window,但是跳过了您指定的所有EventListeners:
public void actionPerformed (Event e) {
     JFrame rootWindow = ((JFrame) SwingUtilities.getRoot((Component) e.getSource()));
     rootWindow.dispose();
}