我正在编写一个应用程序,旨在在双显示器设置上运行,在一个显示器上全屏显示“Display”JFrame,在另一个显示器上显示“Control”JFrame,并向“Display”发送指令。我尝试了两种不同的方法来设置“Display”全屏;每种方法的成功似乎取决于操作系统。
display.setUndecorated(true);
display.setExtendedState(JFrame.MAXIMIZED_BOTH);
在Windows中可以工作,但JFrame在OS X和Linux下会隐藏在Dock/面板下方。
我使用的另一种方法是:
GraphicsDevice.setFullScreenWindow(display);
在我尝试的三个操作系统中都能正常工作,但在 Windows 中,将控制窗口聚焦到另一台显示器上会导致显示窗口隐藏,并调用
display.setAlwaysOnTop(true);
这并没有解决问题。我偏爱使用GraphicsDevice
方法,因为我不必处理在OS X或Linux中出现的问题,并且我希望Windows的问题可以简单解决。它可以吗?
setAlwaysOnTop(true);
,但是当我尝试时它并没有起作用。我还需要一个小时左右才能访问Windows,但我注意到您说“如果窗口可见”,所以也许在设置窗口可见之前我已经调用了它?我会尽快尝试并接受您的答案,如果它有效的话。 - BitFibersetAlwaysOnTop(true);
仍然不起作用。然而,我发现一个解决方法是使用System.getProperty("os.name");
来检查当前操作系统是否为Windows,这样我就可以使用setExtendedState
方法代替。 - BitFiber