4

我在 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°,宽度和高度应该翻转。有没有办法检测这种旋转?

4

3 回答 3

2

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

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

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

于 2012-07-09T22:02:31.850 回答
1

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

于 2012-07-09T15:47:17.967 回答
1

这是在大多数情况下都能正常工作的代码(来自 Enwired 的回答)。

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
if(ge.getScreenDevices().length == 2) {
    int x = (int)ge.getScreenDevices()[1].getDefaultConfiguration().getBounds().getCenterX() - frame.getWidth() / 2;
    int y = (int)ge.getScreenDevices()[1].getDefaultConfiguration().getBounds().getCenterY() - frame.getHeight() / 2;
    setLocation(x, y);
}

唯一的问题是设备索引并不总是 0 - 左,1 - 右。

于 2012-09-20T14:51:33.700 回答