JFrames和JDialogs有时会在他们的父窗口后面打开但是有焦点

我们正在使用传统的Swing客户端开发一个相当大的Java企业应用程序。

我们时不时地面对随机JDialogs和JFrames开放并获得焦点的问题,但它们隐藏在父窗口后面。

不幸的是,这种现象不可重现并偶尔发生。 到目前为止,它已在安装了Win7和WinXP的机器上得到认可。 由于所有开发人员都运行Windows操作系统,这并不一定意味着此问题特定于Windows。

我不知道如何解决这个问题。 也许有一位Swing专家可以解决这个问题? (我们仍然使用Java 6)。

JFrames不应该有“父母”,因为它们应该是应用程序的“父级”窗口。 如果你有一个意图是“子”的窗口,因此它意味着在另一个窗口之上,那么它应该是一个对话框,如JDialog或JOptionPane,并且应该相应地设置其父窗口。

我曾经遇到过同样的问题:错误是JDialog的/ JFrame的父实际上没有正确设置。 我将它设置为父级的父级,这导致了问题。

尝试添加一个FocusListener并监听焦点获取事件,您可以在其中调用yourWindow.toFront()。 setAllwaysOnTop()对你来说也很有趣。