在双显示器配置的特定屏幕中显示 JFrame

2022-08-31 20:52:59

我有一个双显示器配置,如果找到我的GUI,我想在特定显示器上运行它。我试图通过我的屏幕设备的对象创建我的窗口,但它不起作用,框架仍然显示在主屏幕上。JFrameGraphicConfiguration

如何设置必须显示相框的屏幕?


答案 1
public static void showOnScreen( int screen, JFrame frame )
{
    GraphicsEnvironment ge = GraphicsEnvironment
        .getLocalGraphicsEnvironment();
    GraphicsDevice[] gs = ge.getScreenDevices();
    if( screen > -1 && screen < gs.length )
    {
        gs[screen].setFullScreenWindow( frame );
    }
    else if( gs.length > 0 )
    {
        gs[0].setFullScreenWindow( frame );
    }
    else
    {
        throw new RuntimeException( "No Screens Found" );
    }
}

答案 2

我修改了@Joseph-gordon的答案,以允许在不强制全屏的情况下实现这一目标:

public static void showOnScreen( int screen, JFrame frame ) {
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] gd = ge.getScreenDevices();
    if( screen > -1 && screen < gd.length ) {
        frame.setLocation(gd[screen].getDefaultConfiguration().getBounds().x, frame.getY());
    } else if( gd.length > 0 ) {
        frame.setLocation(gd[0].getDefaultConfiguration().getBounds().x, frame.getY());
    } else {
        throw new RuntimeException( "No Screens Found" );
    }
}

在此代码中,我假设永远不会返回 null。如果不是这种情况,那么有人请纠正我。但是,此代码可以将其移动到所需的屏幕。getDefaultConfiguration()JFrame


推荐