当单击JFrame标题栏上的红色关闭按钮时,是否有某种方式“执行某些操作”?我想要做的是在单击按钮时调用一个名为confirmExit()
的方法。到目前为止,我唯一的选择是让它无所作为,但我不想那样做。我该如何做到这一点?在JFrame上单击关闭按钮时执行某些操作
在此先感谢。
当单击JFrame标题栏上的红色关闭按钮时,是否有某种方式“执行某些操作”?我想要做的是在单击按钮时调用一个名为confirmExit()
的方法。到目前为止,我唯一的选择是让它无所作为,但我不想那样做。我该如何做到这一点?在JFrame上单击关闭按钮时执行某些操作
在此先感谢。
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);
}
}
});
覆盖windowClosing方法。
public void windowClosing(WindowEvent e)
当窗口处于被关闭的过程中它被调用。关闭操作可以在此时被覆盖。
请问如果用户关闭应用程序(例如,通过点击Cmd的+ Q在Mac上)这项工作?实现此方法的类是否必须为此代码声明“实现WindowListener”?如果是这样的话,那么在答案中加入它可能会很好。否则这是一个优雅的解决方案。 – brandaemon 2015-11-20 21:42:09
试试这个:
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
它将工作。
这可能工作:
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
后,我将其处理完毕,然后再次让旧的可见。
注:下面的代码扩展了断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);
}
});
});
单击否时窗口仍然关闭。有没有办法阻止它? – WVrock 2014-12-06 18:05:18
@WVrock'setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);' – 2014-12-06 19:53:24
谢谢,它的工作原理。 – WVrock 2014-12-06 20:16:51