Java 如何在多监视器配置中部署JFrame

Java 如何在多监视器配置中部署JFrame,java,swing,jframe,multiple-monitors,Java,Swing,Jframe,Multiple Monitors,我想构建一个有两个窗口的应用程序。 第一个应该始终在第一个监视器中,并且不能最大化。 第二个应该在第二个监视器中启动(一个完美的例子是PowerPoint的演示模式),它运行在任何其他应用程序窗口的“顶部”,并且总是最大化。此窗口是使用给定给第一个窗口的侦听器启动的。 请注意,这些“显示器”可能是演示文稿中使用的LCD投影仪,也可能是真正的台式计算机显示器 我知道存在GraphicsEnvironment API,我们可以知道我们的监视器配置是作为单个监视器处理,还是单独处理。但是,我不知道如何

我想构建一个有两个窗口的应用程序。 第一个应该始终在第一个监视器中,并且不能最大化。 第二个应该在第二个监视器中启动(一个完美的例子是PowerPoint的演示模式),它运行在任何其他应用程序窗口的“顶部”,并且总是最大化。此窗口是使用给定给第一个窗口的侦听器启动的。 请注意,这些“显示器”可能是演示文稿中使用的LCD投影仪,也可能是真正的台式计算机显示器

我知道存在GraphicsEnvironment API,我们可以知道我们的监视器配置是作为单个监视器处理,还是单独处理。但是,我不知道如何实现它。我的意思是,由于屏幕配置可以根据其图形卡进行不同的处理,我们如何验证它们

例如,如果有3个监视器被视为具有大分辨率的单个监视器,那么我们可以将第二个窗口的坐标x0设置为:total_width*2/3。 但是,如果它被视为单独的监视器会怎么样


谢谢。

@Zecas:是的,效果很好。很抱歉没有在这里发布答案。我完全忘了。 因此,解决方案正是ShivanDragon所说的,我们可以通过首先获取图形环境,然后从环境中获取屏幕设备来分别获取每个监视器:

GraphicsEnvironment ge = GraphicsEnvironment .getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();
之后,只需使用:

gs[_screen_index].setFullSCreenWindow(_frame)

你看过这个链接了吗,这可能会有帮助。它确实很旧,但是你可以在新的java版本中找到类似的东西。我认为,即使多个显示器被视为“一个”,即显示的内容像在一个巨大的显示器上一样分布在所有显示器上,您仍然可以使用以下命令分别获取每个监视器:GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();GraphicsDevice[]gs=ge.getScreenDevices();然后使用gs[i].setFullScreenWindow(myJFrame)在您想要的任何屏幕上设置帧;哇!谢谢你的快速回复。我将尝试它们^^^不幸的是,我似乎无法在Ubuntu Linux上实现这一点。。使用Nvidia视频卡。。不确定我的特殊问题是否与我的显示器如何配置X有关,可能在Java看来不是离散显示器或类似的东西。。