[英]How can I make a text field lose focus before application quits?
我有一个包含文本字段的JFrame应用程序。 当修改字段中的文本,并且该字段获得focusLost
事件时,它将立即将其内容写入外部数据库。
但是,如果用户在字段仍处于焦点状态时退出应用程序,则不会发送focusLost
消息,并且不会保存修改后的数据。
如何在WindowListener
的windowClosing
方法中强制失去对某个字段的关注? 我尝试在该方法中使用requestFocusInWindow()
,但没有帮助。
为什么不只调用从窗口侦听器的windowClosing方法内部将内容写入外部数据库的方法呢?
@Override
public void windowClosing(WindowEvent e) {
// call write to DB method
System.exit(0);
}
另一种处理方式:
将JFrame
的setDefaultCloseOperation
更改为DO_NOTHING_ON_CLOSE
,并在用户要关闭窗口时显示确认对话框。 该对话框将获得焦点,并在文本字段的FocusListener
上触发focusLost
方法。
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int result = JOptionPane
.showConfirmDialog(null, "Are you sure?",
"Confirm exit", JOptionPane.YES_NO_OPTION);
if(result == 0) {
System.exit(0);
}
}
}
});
(注意:如果使用此方法,请确保在写入数据库的过程中不要退出。)
在等待一个更好的答案(可能是我的经验更丰富的人)时,这就是我正在做的事情。
在WindowListener的windowClosing()方法中,输入:
dispatchEvent(new FocusEvent(getFocusOwner(), FocusEvent.FOCUS_LOST));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.