Java setFullScreenWindow()保持在最顶层

Bit*_*ber 12 java swing fullscreen jframe

我正在编写一个旨在双显示器设置上运行的应用程序,一台显示器上的"Display"JFrame全屏显示,另一台显示器上显示"Control"JFrame,向显示器发送指令.我尝试了两种不同的方法来设置全屏显示; 每个人的成功似乎取决于操作系统.

display.setUndecorated(true);
display.setExtendedState(JFrame.MAXIMIZED_BOTH);
Run Code Online (Sandbox Code Playgroud)

适用于Windows,但JFrame隐藏在OS X和Linux的dock/panels下.

我的另一种方法,利用

GraphicsDevice.setFullScreenWindow(display);
Run Code Online (Sandbox Code Playgroud)

适用于我尝试的所有三个操作系统,但在Windows中,将控制窗口聚焦在另一个监视器上会使显示窗口隐藏,并调用

display.setAlwaysOnTop(true);
Run Code Online (Sandbox Code Playgroud)

不解决问题.我对该GraphicsDevice方法有点偏爱,因为我不必处理OS X或Linux中的问题,我希望Windows问题是一个简单的修复.是吗?

Kum*_*tra 10

试试这个...

对于多屏幕

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();


// Get size of each screen

for (int i=0; i<gs.length; i++) {
    DisplayMode dm = gs[i].getDisplayMode();
    int screenWidth = dm.getWidth();
    int screenHeight = dm.getHeight();
}
Run Code Online (Sandbox Code Playgroud)

使用public final void setAlwaysOnTop(boolean alwaysOnTop)了把最上面的窗口,如果窗口是可见的,这包括将窗口toFront,然后在"坚持"它最上面的位置.