检测显示器是否旋转

时间:2012-07-09 15:19:19

标签: java swing multiple-monitors

我在JavaSE中有一个应用程序,我希望我的应用程序始终从屏幕中心开始。如果插入两个监视器,则应使用正确的监视器。所以我写了这样的代码:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
if(ge.getScreenDevices().length == 2) {
    int w_1 = ge.getScreenDevices()[0].getDisplayMode().getWidth();
    int h_1 = ge.getScreenDevices()[0].getDisplayMode().getHeight();
    int w_2 = ge.getScreenDevices()[1].getDisplayMode().getWidth();
    int h_2 = ge.getScreenDevices()[1].getDisplayMode().getHeight();


    int x = w_1 + w_2  / 2 - getWidth() / 2;
    int y = h_2 / 2 - getHeight() / 2;

    setLocation(x, y);
}

不幸的是,如果显示器旋转90°,则应翻转宽度和高度。有没有办法检测这种旋转?

2 个答案:

答案 0 :(得分:2)

您无需知道第二台显示器是否处于纵向模式。只需在设备坐标中找到屏幕边界并使用中心即可。 (如果是纵向模式,则高度>宽度,但这不是重要的信息。)

确定第二个设备中心点的公式是错误的。您假设第二个屏幕的坐标从(w_1,0)到(w_1 + w_2,h_2),但这不一定是真的。您需要找到第二个屏幕的GraphicsConfiguration对象并在其上调用GraphicsConfiguration.getBounds()。然后,您可以计算该矩形的中心点。

如果您想知道哪个设备位于左侧或右侧(或顶部或底部),您可以比较其边界矩形的x(或y)值。请注意,x或y值可能为负值。

答案 1 :(得分:1)

您应该考虑高度是否大于宽度(纵向)。但是,我还没有听过有人使用人像监视器。