我在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°,则应翻转其宽度和高度。有什么办法可以检测到这种旋转吗?

最佳答案

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

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

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

关于java - 检测显示器是否旋转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11398059/

10-09 00:24
查看更多