是否有可能将JFrame放在前面但不聚焦?

2022-09-03 05:10:20

我正在编写一个Java应用程序(Swing GUI),它会定期弹出一个JFrame。

是否有可能以某种方式将窗口放在前面(foo.setAlwaysOnTop(true)会更好),但没有焦点?

有些人不时将眼睛从屏幕上移开,在打字时看着键盘,我敢肯定,如果这个窗口总是能捕捉到键盘焦点,人们会非常生气,因为它导致他们每次弹出时都会丢失相当多的击键。

在其他情况下,即使用户实际上能够在不一直看键盘的情况下打字,弹出一个窗口并获得焦点也可能导致弹出窗口本身的不需要的操作(例如,用户意外地选择了一个她实际上不会选择的选项)。TabEnter

提前致谢!

更新

正如Jonas所建议的那样,如果在窗口渲染后调用(仅在Gnome上测试),似乎可以工作。foo.setFocusableWindowState(false);

这不起作用:

foo.setFocusableWindowState(false);
foo.setVisible(true);
foo.setFocusableWindowState(true);

但是,这确实

foo.setFocusableWindowState(false);
foo.setVisible(true);
Thread.sleep(1000);
foo.setFocusableWindowState(true);

我必须看看是否有一个事件我可以捕捉/收听,允许我在适当的时候做。foo.setFocusableWindowStatue(true);

我认为我的问题解决了。


答案 1

这可能有效:

foo.setFocusableWindowState(false);

答案 2

从Java 1.7开始,您可以调用

frame.setAutoRequestFocus(false);

推荐