Yes, you can do this using WindowListener .
public void windowClosed(WindowEvent e) { //This will only be seen on standard output. displayMessage("WindowListener method called: windowClosed."); } public void windowOpened(WindowEvent e) { displayMessage("WindowListener method called: windowOpened."); } public void windowIconified(WindowEvent e) { displayMessage("WindowListener method called: windowIconified."); } public void windowDeiconified(WindowEvent e) { displayMessage("WindowListener method called: windowDeiconified."); } public void windowActivated(WindowEvent e) { displayMessage("WindowListener method called: windowActivated."); } public void windowDeactivated(WindowEvent e) { displayMessage("WindowListener method called: windowDeactivated."); } public void windowGainedFocus(WindowEvent e) { displayMessage("WindowFocusListener method called: windowGainedFocus."); } public void windowLostFocus(WindowEvent e) { displayMessage("WindowFocusListener method called: windowLostFocus."); } public void windowStateChanged(WindowEvent e) { displayStateMessage( "WindowStateListener method called: windowStateChanged.", e);
See this tutorial for more details.
But for your scenario, I recommend that you work with the adapter class (since you only need one event, so you donβt need to get tired and apply all the methods), so here is an example according to your requirement
import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JOptionPane; public class NoCloseFrame extends JFrame { public static void main( String[] arg ) { new NoCloseFrame(); } public NoCloseFrame() { super( "No Close Frame!" ); setDefaultCloseOperation( DO_NOTHING_ON_CLOSE ); setSize( 300, 300 ); setVisible( true ); addWindowListener( new AreYouSure() ); } private class AreYouSure extends WindowAdapter { public void windowClosing( WindowEvent e ) { int option = JOptionPane.showOptionDialog( NoCloseFrame.this, "Are you sure you want to quit?", "Exit Dialog", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, null, null ); if( option == JOptionPane.YES_OPTION ) { System.exit( 0 ); } } } }
source share