【发布时间】:2009-09-26 09:22:04
【问题描述】:
我的应用会弹出一个对话框。用户通常希望在此对话框和应用程序窗口之间来回切换一段时间。我希望这个对话框保持在顶部,这样它就不会隐藏在主应用程序窗口后面。但同时我希望对话框有一个最小化按钮,以便在一段时间不需要时可以让开。
这是我尝试过的:
使用无模式的 JDialog - 对话框很好地保持在前面,但它没有最小化按钮,也没有自己的任务栏按钮
使用 JFrame - 对话框现在有一个最小化按钮和它自己的任务栏按钮,但是当主窗口获得焦点时,对话框隐藏在它后面。
使用 JFrame 并在对话框中添加 WindowListener.windowDeactivated() { this.toFront() }。这样做的问题是 toFront() 也设置了焦点,所以你会得到一个奇怪的焦点闪烁效果。
将 JFrame 与 setAlwaysOnTop 结合使用 - 这是最接近的解决方案,但现在窗口将位于所有其他应用程序之上,而不仅仅是我的应用程序。
如果 toFront 只是将 JFrame 带到前面而不改变焦点,那会很容易,但不幸的是,情况并非如此。还有其他方法可以更改 JFrame Z 顺序吗?
编辑:我突然想到,如果有一种简单的方法可以“卷起”JDialog,即最小化它而不是任务栏,那也可以解决我的问题。
【问题讨论】:
标签: swing jframe jdialog z-order always-on-top