【发布时间】:2012-02-20 09:26:13
【问题描述】:
我们有一个应用程序,作为它的第一个 UI 操作,它显示一个没有父框架的模态 JDialog。
public LoginDialog(Frame owner, Config config, Object... params) {
super((Frame)null, true);
不幸的是它有一个恼人的特点,就是出现的时候,虽然走到了前面,却不抢焦点。
因此,用户在通过双击开始菜单启动应用程序后,必须使用鼠标选择“登录”对话框并输入信息。
有没有办法让这个JDialog在出现在前面的时候抓住焦点?
我在调用 setVisible(true) 之前、之后和通过 invokeLater “期间”尝试调用“requestFocus” - 但这些似乎都没有任何效果。
我们如何让模态对话框抓住焦点?
更新:问题是用于尝试呈现背景“等待窗口”的代码。这个窗口被显示在登录对话框的“后面”作为hack,因此当对话框消失时,用户会看到“请稍候”消息。由于它是应用程序创建的第一个窗口,因此它获得了焦点。我不确定是否有办法让对话框在事件调度线程中再次获得焦点,但我通过取消破解并正确处理它来修复它。
【问题讨论】:
-
我们使用requestFocusInWindow()而不是requestFocus()。希望能有所帮助。
-
应该可以在没有任何额外代码的情况下工作,无法重现所描述的问题