检测当前屏幕边界(Detect current screen bounds)

2019-06-26 15:06发布

我的工作有一个应用程序setDecoration(false) ,我有一个MouseMotionlistener这样我就可以四处移动它,此刻的我试图做一个最大化按钮。 在默认的监控它完美,但第二个显示器上,如果我点击最大化按钮,将最大限度地默认屏幕。 我将如何得到屏幕的应用是目前的X和Y坐标?

IE我有2台显示器都在1600×900,因此,如果应用程序是监视器1上时,X和Y是0 0,但如果它是一个第二显示器将是1600 0。

但我需要它,所以它适用于所有尺寸的显示器,即1200x800,或者如果监视器处垂直而非水平。

Answer 1:

答案取决于屏幕的定义。 你想默认的屏幕边界或特定的屏幕边界?

我用下面的(它的变体),以确定单个画面的画面边界

public static GraphicsDevice getGraphicsDeviceAt(Point pos) {
    GraphicsDevice device = null;
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice lstGDs[] = ge.getScreenDevices();
    ArrayList<GraphicsDevice> lstDevices = new ArrayList<GraphicsDevice>(lstGDs.length);

    for (GraphicsDevice gd : lstGDs) {
        GraphicsConfiguration gc = gd.getDefaultConfiguration();
        Rectangle screenBounds = gc.getBounds();
        if (screenBounds.contains(pos)) {
            lstDevices.add(gd);
        }
    }

    if (lstDevices.size() == 1) {
        device = lstDevices.get(0);
    }
    return device;
}

public static Rectangle getScreenBoundsAt(Point pos) {
    GraphicsDevice gd = getGraphicsDeviceAt(pos);
    Rectangle bounds = null;

    if (gd != null) {
        bounds = gd.getDefaultConfiguration().getBounds();
    }
    return bounds;
}

其基本思想是提供一个屏幕的位置,找到与其匹配的屏幕。 我有变化的需要ComponentWindow ,但本质上,它归结为这一点。

MouseEvent ,你可以获取屏幕坐标仅仅足以与一个呼叫MouseEvent.getLocationOnScreen

现在,从你的问题,这听起来像你想知道整个“虚拟”屏幕边界(我可能是错的),但我用这个方法(其实我用它来动态创建多显示器壁纸,但那是另一题)

public static Rectangle getVirtualScreenBounds() {
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice lstGDs[] = ge.getScreenDevices();

    Rectangle bounds = new Rectangle();
    for (GraphicsDevice gd : lstGDs) {
        bounds.add(gd.getDefaultConfiguration().getBounds());
    }
    return bounds;
}

基本上,它只是走所有的屏幕设备和添加的有区一起,形成一个“虚拟”的矩形。 你可以使用相同的概念来回报每屏设备的边界作为数组来代替。



Answer 2:

您可以使用它来得到屏幕的尺寸。

Toolkit toolkit =  Toolkit.getDefaultToolkit ();
Dimension dim = toolkit.getScreenSize();
System.out.println("Width of Screen Size is "+dim.width+" pixels");
System.out.println("Height of Screen Size is "+dim.height+" pixels");


文章来源: Detect current screen bounds