繁体   English   中英

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

[英]How can I make a text field lose focus before application quits?

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

但是,如果用户在字段仍处于焦点状态时退出应用程序,则不会发送focusLost消息,并且不会保存修改后的数据。

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

为什么不只调用从窗口侦听器的windowClosing方法内部将内容写入外部数据库的方法呢?

@Override
public void windowClosing(WindowEvent e) {
    // call write to DB method
    System.exit(0);
} 

另一种处理方式:
JFramesetDefaultCloseOperation更改为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM