我的应用会弹出一个对话框。用户通常希望在此对话框和应用程序窗口之间来回切换一段时间。我希望这个对话框保持在最顶层,这样它就不会隐藏在主应用程序窗口的后面。但与此同时,我希望对话框有一个最小化按钮,以便在一段时间内不需要它时可以使用它。
这是我尝试过的:
使用无模式的JDialog - 对话框保持良好状态,但它没有最小化按钮,并且它没有自己的任务栏按钮
使用JFrame - 对话框现在有一个最小化按钮和自己的任务栏按钮,但是当主窗口获得焦点时,对话框隐藏在它后面。
使用JFrame并在对话框中添加WindowListener.windowDeactivated(){this.toFront()}。这个问题是toFront()也设置焦点,这样你就会得到一个奇怪的焦点闪烁效果。
使用带有setAlwaysOnTop的JFrame - 这是最常见的解决方案,但现在窗口将保持在所有其他应用程序之上,而不仅仅是我的应用程序。
如果toFront在不改变焦点的情况下将JFrame带到前面会很容易,但不幸的是情况并非如此。有没有其他方法可以更改JFrame Z-order?
编辑:我刚刚想到,如果有一种简单的方法可以“卷起”一个JDialog,即最小化它而不是任务栏,那也可以解决我的问题。
答案 0 :(得分:0)
为什么不在框架中侦听focusGained事件,然后在对话框上使用setZOrder / toFront? (不确定这会有效但值得一试)。