在退出应用程序之前,如何使文本字段失去焦点?

时间:2016-12-22 19:11:09

标签: java swing jframe focus windowlistener

我有一个包含文本字段的JFrame的应用程序。当字段中的文本被修改,并且该字段获得focusLost事件时,它会立即将其内容写入外部数据库。

但是,如果用户在仍然关注字段时退出应用程序,则不会发送focusLost消息,也不会保存修改后的数据。

如何强制失去对某个字段的关注,可能是windowClosing中的WindowListener方法?我尝试在该方法中使用requestFocusInWindow(),但它没有帮助。

3 个答案:

答案 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));