windowconstants setdefaultcloseoperation otro exit_on_close documentacion defaultcloseoperation cerrar abrir java swing user-interface windowlistener

java - otro - ¿Crear una operación personalizada para setDefaultCloseOperation?



setdefaultcloseoperation en java (4)

Quiero hacer que mi aplicación Java llame a mi propia función personalizada cuando se presiona el botón de "cerrar". por lo que veo, puede que no haya manera ya que setDefaultCloseOperation no tiene sobrecargas.

¿Alguna idea de cómo se puede lograr esto?


Puede agregar un detector de ventana para el marco:

frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { onExit(); } }); ... public void onExit() { System.err.println("Exit"); System.exit(0); }


Puede agregar un WindowListener a su marco (ver por ejemplo WindowListener ).


Todas las sugerencias anteriores son correctas, ya que necesita usar un WindowListener.

Sin embargo, todas las respuestas también están incompletas, ya que se olvidan de mencionar que es posible que también desee agregar:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.addWindowListener(...);

Esto permitirá que su código tome el control total del proceso de cierre de la ventana, ya que la ventana no se cerrará automáticamente a menos que usted lo indique (generalmente utilizando el método dispose () en el marco). Esto le permite prometer al usuario una confirmación para cerrar la ventana o no.

Cerrar una aplicación tiene una API simple que le permite crear una acción simple que se ejecuta cuando se cierra la ventana. Gestiona la operación de cierre y el código de escucha de la ventana para usted.


quizás este, pero antes de que lea el tutorial WindowListener publicado por Howard, hay algunas WindowListener otras opciones

WindowListener exitListener = new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { int confirm = JOptionPane.showOptionDialog( null, "Are You Sure to Close Application?", "Exit Confirmation", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); if (confirm == 0) { System.exit(0); } } }; frame.addWindowListener(exitListener);