我有一个包含文本字段的JFrame的应用程序。当字段中的文本被修改,并且该字段获得focusLost
事件时,它会立即将其内容写入外部数据库。
但是,如果用户在仍然关注字段时退出应用程序,则不会发送focusLost
消息,也不会保存修改后的数据。
如何强制失去对某个字段的关注,可能是windowClosing
中的WindowListener
方法?我尝试在该方法中使用requestFocusInWindow()
,但它没有帮助。
答案 0 :(得分:4)
为什么不从窗口监听器的windowClosing方法中调用将内容写入外部数据库的相同方法?
@Override
public void windowClosing(WindowEvent e) {
// call write to DB method
System.exit(0);
}
答案 1 :(得分:2)
另一种解决方法:
将setDefaultCloseOperation
的{{1}}更改为JFrame
,并在用户想要关闭窗口时显示确认对话框。该对话框将获得焦点,在文本字段DO_NOTHING_ON_CLOSE
上触发focusLost
方法。
FocusListener
(注意:如果你使用这种方法,请确保在写入数据库的过程中不要退出。)
答案 2 :(得分:0)
等待一个更有经验的人可以提供更好的答案,这就是我正在做的事情。
在我的WindowListener的windowClosing()方法中,我把:
dispatchEvent(new FocusEvent(getFocusOwner(), FocusEvent.FOCUS_LOST));