javaswingjframewindowlistener

How to capture a JFrame's close button click event?


I want to call a method confirmExit() when the red close button of the title bar of a JFrame is clicked.

How can I capture that event?

I'd also like to prevent the window from closing if the user chooses not to proceed.


Solution

  • import javax.swing.JOptionPane;
    import javax.swing.JFrame;
    
    /*Some piece of code*/
    frame.addWindowListener(new java.awt.event.WindowAdapter() {
        @Override
        public void windowClosing(java.awt.event.WindowEvent windowEvent) {
            if (JOptionPane.showConfirmDialog(frame, 
                "Are you sure you want to close this window?", "Close Window?", 
                JOptionPane.YES_NO_OPTION,
                JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION){
                System.exit(0);
            }
        }
    });
    

    If you also want to prevent the window from closing unless the user chooses 'Yes', you can add:

    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);