Java双屏应用程序

时间:2013-05-29 16:12:56

标签: java multiple-monitors

在我的应用程序中,我有2个窗口(jframe),一个用于控制,一个用于显示事物(如powerpoint演示模式)。

如何指定在屏幕号中打开一个窗口。 1,另一个在屏幕中打开。 2当我启动应用程序时?

下面的方法以某种方式工作,但事情是第二个屏幕上的窗口始终最大化,我不希望它最大化。但似乎连接GraphicsDevice和JFrame的唯一方法是名为setFullScreenWindow的函数。

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 个答案:

答案 0 :(得分:2)

您可以使用GraphicsDevice定义JFrame。

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

for (int j = 0; j < gs.length; j++) { 
    JFrame f = new JFrame(gs[j].getDefaultConfiguration());
    // Rest of the code
}

答案 1 :(得分:1)

如果屏幕形成一个大的虚拟屏幕,则可以使用具有以下边界的GraphicsConfiguration:

  • 矩形[X = -1280,Y = 74,宽度= 1280,高度= 1024]
  • 矩形[X = 0,Y = 0,宽度= 1920,高度= 1080]
  • 矩形[X = 1920,Y = 0,宽度= 1920,高度= 1080]

这些是3台并排的显示器。所以:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gds = ge.getScreenDevices();
for (GraphicsDevice gd : gds) {
    int x = gd.getDefaultConfiguration().getBounds().x;
    int y = gd.getDefaultConfiguration().getBounds().y;
    JFrame frame = new NewJFrame();
    frame.setLocation(x, y);
    frame.setVisible(true);
}