Сделайте что-нибудь, когда кнопка закрытия нажата на JFrame
Есть ли способ каким-то образом "сделать что-то", когда я нажимаю красную кнопку закрытия в строке заголовка JFrame? То, что я хочу сделать, - вызвать метод под названием confirmExit()
при нажатии этой кнопки. Пока что единственный вариант, который у меня есть, это заставить его ничего не делать, но я этого не хочу. Как это сделать?
Спасибо заранее.
Ответы
Ответ 1
import javax.swing.JOptionPane;
import javax.swing.JFrame;
/*Some piece of code*/
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
if (JOptionPane.showConfirmDialog(frame,
"Are you sure to close this window?", "Really Closing?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION){
System.exit(0);
}
}
});
Ответ 2
Переопределить метод закрытия окна.
public void windowClosing(WindowEvent e)
Он вызывается, когда окно находится в процессе закрытия. В этот момент операцию закрытия можно переопределить.
Ответ 3
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
также работает. Сначала создайте JFrame, называемый фреймом, затем добавьте этот код под ним.
Ответ 4
Это то, что я поставил в качестве опции меню, где я сделал кнопку на JFrame
, чтобы отобразить еще один JFrame
. Я хотел, чтобы только новый кадр был видимым, а не уничтожать тот, который стоит за ним. Сначала я спрятал первый JFrame
, а новый стал видимым. После закрытия нового JFrame
я удалил его, а затем повторил действие старого.
Примечание. Следующий код расширяет ответ Ravinda, а ng
- 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);
}
});
});
Ответ 5
Попробуйте следующее:
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
Он будет работать.
Ответ 6
Это может работать:
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");
}
});
Источник: https://alvinalexander.com/java/jdialog-close-closing-event