javaswingjframewindowlistener

setDefaultCloseOperation to show a JFrame instead


I am making a word processor application in order to practise Java and I would like it so that when the user attempts to close the appliction, a JFrame will come up asking to save changes.

I was thinking about setDefaultCloseOperation() but I have had little luck so far. I would also like it to appear whent he user clicks the "X" on the top right of the window aswell if possible.


Solution

  • You can set the JFrame DefaultCloseOperation to something like DO_NOTHING, and then, set a WindowsListener to grab the close event and do what you want. I'll post an exemple in a few minutes .

    EDIT: Here's the example :

    public static void main(String[] args) {
            final JFrame frame = new JFrame("Test Frame");
    
            frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    
            frame.setSize(800, 600);
    
            frame.addWindowListener(new WindowAdapter() {
                //I skipped unused callbacks for readability
    
                @Override
                public void windowClosing(WindowEvent e) {
                    if(JOptionPane.showConfirmDialog(frame, "Are you sure ?") == JOptionPane.OK_OPTION){
                        frame.setVisible(false);
                        frame.dispose();
                    }
                }
            });
    
            frame.setVisible(true);
        }