Я хочу викликати метод, confirmExit()
коли натискається червона кнопка закриття рядка заголовка JFrame.
Як я можу зафіксувати цю подію?
Я також хотів би запобігти закриттю вікна, якщо користувач вирішить не продовжувати.
Відповіді:
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);
}
}
});
Якщо ви також хочете, щоб вікно не закривалось, якщо користувач не вибрав "Так", ви можете додати:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Замінити вікно Метод закриття.
public void windowClosing(WindowEvent e)
Він викликається, коли вікно закривається. На даний момент операцію закриття можна замінити.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
також працює. Спочатку створіть JFrame, який називається фреймом, а потім додайте цей код знизу.
confirmExit()
метод, як того хотів би ОП
confirmExit()
коли клацне [X]". І попередній коментар не пов’язаний з OQ.
Це може спрацювати:
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
Це те, що я поставив як пункт меню, де я зробив кнопку на, JFrame
щоб відобразити іншу JFrame
. Я хотів, щоб був видно лише новий кадр, а не знищив того, хто за ним. Спочатку я сховав перший JFrame
, тоді як новий став видимим. Після закриття новогоJFrame
я утилізував його, після чого здійснив дію, щоб зробити старе знову видимим.
Примітка: Наступний код розширює відповідь Равінди і 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);
}
});
});
Спробуйте це:
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
Це спрацює.
implements WindowListener
щоб цей код працював? Якщо так, можливо, було б добре включити це у відповідь. В іншому випадку це елегантне рішення.