可停留在主应用程序窗口顶部的可最小化的JFrame

时间:2009-09-26 09:22:05

标签: swing jframe jdialog z-order always-on-top

我的应用会弹出一个对话框。用户通常希望在此对话框和应用程序窗口之间来回切换一段时间。我希望这个对话框保持在最顶层,这样它就不会隐藏在主应用程序窗口的后面。但与此同时,我希望对话框有一个最小化按钮,以便在一段时间内不需要它时可以使用它。

这是我尝试过的:

  • 使用无模式的JDialog - 对话框保持良好状态,但它没有最小化按钮,并且它没有自己的任务栏按钮

  • 使用JFrame - 对话框现在有一个最小化按钮和自己的任务栏按钮,但是当主窗口获得焦点时,对话框隐藏在它后面。

  • 使用JFrame并在对话框中添加WindowListener.windowDeactivated(){this.toFront()}。这个问题是toFront()也设置焦点,这样你就会得到一个奇怪的焦点闪烁效果。

  • 使用带有setAlwaysOnTop的JFrame - 这是最常见的解决方案,但现在窗口将保持在所有其他应用程序之上,而不仅仅是我的应用程序。

如果toFront在不改变焦点的情况下将JFrame带到前面会很容易,但不幸的是情况并非如此。有没有其他方法可以更改JFrame Z-order?

编辑:我刚刚想到,如果有一种简单的方法可以“卷起”一个JDialog,即最小化它而不是任务栏,那也可以解决我的问题。

1 个答案:

答案 0 :(得分:0)

为什么不在框架中侦听focusGained事件,然后在对话框上使用setZOrder / toFront? (不确定这会有效但值得一试)。