【发布时间】:2011-06-14 21:47:48
【问题描述】:
我正在编写一个定期弹出 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);。
我认为我的问题已经解决了。
【问题讨论】:
-
你有没有找到在渲染帧时监听的事件?
-
有没有人在这里找到可以收听的活动?