我正在编写一个定期弹出 JFrame 的 Java 应用程序 (Swing GUI)。
是否有可能以某种方式将窗口置于最前面(foo.setAlwaysOnTop(true) 会更好)但没有使其成为焦点?
有些人在打字时不时将眼睛从屏幕上移开看键盘,我敢肯定,如果这个窗口始终捕获键盘焦点,人们会非常恼火,因为这会导致他们迷失方向每次它弹出时都被忽视了很多次击键。
在其他情况下,即使用户实际上能够在不一直看键盘的情况下打字,弹出窗口并获得焦点可能会导致弹出窗口本身执行不需要的操作(某些 Tab
+Enter
组合,例如,用户不小心选择了一个她本来不会选择的选项)。
提前致谢!
更新
正如 Jonas 所建议的,foo.setFocusableWindowState(false);
如果在窗口渲染后调用(仅在 Gnome 上测试过),似乎可以工作。
这不起作用:
foo.setFocusableWindowState(false);
foo.setVisible(true);
foo.setFocusableWindowState(true);
但是,这确实:
foo.setFocusableWindowState(false);
foo.setVisible(true);
Thread.sleep(1000);
foo.setFocusableWindowState(true);
我必须看看是否有一个我可以捕获/收听的事件允许我在适当的时候执行 foo.setFocusableWindowStatue(true);
。
我认为我的问题已经解决了。
最佳答案
这可能有效:
foo.setFocusableWindowState(false);
关于java - 是否可以将 JFrame 放在前面而不是焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788953/