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.
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.
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);
Override windowClosing Method.
public void windowClosing(WindowEvent e)
It is invoked when a window is in the process of being closed. The close operation can be overridden at this point.
implements WindowListener
for this code to work? If so, it might be good to include that in the answer. Otherwise this is an elegant solution. –
Salep This may work:
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");
}
});
Source: https://alvinalexander.com/java/jdialog-close-closing-event
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
also works. First create a JFrame called frame, then add this code underneath.
confirmExit()
method as the OP would like it –
Abolition confirmExit()
when [the X] is clicked." And the previous comment is unrelated to OQ. –
Clothesbasket frame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
to have a control with confirmExit
. –
Moony This is what I put as a menu option where I made a button on a JFrame
to display another JFrame
. I wanted only the new frame to be visible, and not to destroy the one behind it. I initially hid the first JFrame
, while the new one became visible. Upon closing of the new JFrame
, I disposed of it followed by an action of making the old one visible again.
Note: The following code expands off of Ravinda's answer and ng
is a 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);
}
});
});
Try this:
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
It will work.
© 2022 - 2024 — McMap. All rights reserved.
frame.dispose()
instead ofSystem.exit(0)
– Suzerainty