Java Swing adding Action Listener for EXIT_ON_CLOSE

前端 未结 4 1509
孤城傲影
孤城傲影 2020-11-28 14:10

I have a simple GUI:

    public class MyGUI extends JFrame{

        public MyGUI(){
           run();
        }

        void run(){
           setSize(100,         


        
相关标签:
4条回答
  • 2020-11-28 14:39

    Write this code within constructor of your JFrame:

    this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    this.addWindowListener(new java.awt.event.WindowAdapter() {
        @Override
        public void windowClosing(java.awt.event.WindowEvent e) {
            System.out.println("Uncomment following to open another window!");
            //MainPage m = new MainPage();
            //m.setVisible(true);
            e.getWindow().dispose();
            System.out.println("JFrame Closed!");
        }
    });
    
    0 讨论(0)
  • 2020-11-28 14:41

    Window Events: There is the complete program, hope it will help you. public class FirstGUIApplication {

    public static void main(String[] args) {
        //Frame
        JFrame window = new JFrame();
        //Title:setTitle()
        window.setTitle("First GUI App");
        //Size: setSize(width, height)
        window.setSize(600, 300);
        //Show: setVisible()
        window.setVisible(true);
        //Close
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.addWindowListener(new WindowAdapter() {
    
    
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e); 
                JOptionPane.showConfirmDialog(null,"Are sure to close!");
            }
    
            @Override
            public void windowOpened(WindowEvent e) {
                super.windowOpened(e); 
                JOptionPane.showMessageDialog(null, "Welcome to the System");
            }
    
        });
    
    }
    

    }

    0 讨论(0)
  • 2020-11-28 14:49

    Another possibility could be to override dispose() from the Window class. This reduces the number of messages sent around and also works if the default close operation is set to DISPOSE_ON_CLOSE.

    Concretely this means adding

    @Override
    public void dispose() {
        System.out.println("Closed");
        super.dispose();
    }
    

    to your class MyGUI.

    Note: don't forget to call super.dispose() as this releases the screen resources!

    0 讨论(0)
  • 2020-11-28 14:56

    Try this.

        addWindowListener(new WindowAdapter()
            {
                @Override
                public void windowClosing(WindowEvent e)
                {
                    System.out.println("Closed");
                    e.getWindow().dispose();
                }
            });
    
    0 讨论(0)
提交回复
热议问题