Quiero llamar a un método confirmExit()
cuando se hace clic en el botón rojo de cierre de la barra de título de un JFrame.
¿Cómo puedo capturar ese evento?
También me gustaría evitar que la ventana se cierre si el usuario elige no continuar.
Respuestas:
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);
}
}
});
Si también desea evitar que la ventana se cierre a menos que el usuario elija 'Sí', puede agregar:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Anular el método de cierre de ventana.
public void windowClosing(WindowEvent e)
Se invoca cuando una ventana está en proceso de cerrarse. La operación de cierre se puede anular en este punto.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
también funciona. Primero cree un marco llamado JFrame, luego agregue este código debajo.
confirmExit()
método como le gustaría al OP
confirmExit()
cuando se hace clic en [la X]". Y el comentario anterior no está relacionado con OQ.
Esto puede funcionar:
jdialog.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.out.println("jdialog window closed event received");
}
public void windowClosing(WindowEvent e) {
System.out.println("jdialog window closing event received");
}
});
Fuente: https://alvinalexander.com/java/jdialog-close-closing-event
Esto es lo que puse como opción de menú donde hice un botón en un JFrame
para mostrar otro JFrame
. Quería que solo el nuevo marco fuera visible, y no destruir el que estaba detrás. Inicialmente escondí el primero JFrame
, mientras que el nuevo se hizo visible. Al cerrar el nuevo JFrame
, lo deseché seguido de una acción de hacer que el viejo volviera a ser visible.
Nota: El siguiente código se expande a partir de la respuesta de Ravinda y ng
es un JButton
:
ng.addActionListener((ActionEvent e) -> {
setVisible(false);
JFrame j = new JFrame("NAME");
j.setVisible(true);
j.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
setVisible(true);
}
});
});
Prueba esto:
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
Funcionará.
implements WindowListener
para que este código funcione? Si es así, sería bueno incluirlo en la respuesta. De lo contrario, esta es una solución elegante.