3

我正在开发一个应用程序,setDecoration(false)我有一个MouseMotionlistener,所以我可以移动它,目前我正在尝试制作一个最大化按钮。在默认显示器上它可以完美运行,但在第二台显示器上,如果我单击最大化按钮,它将最大化到默认屏幕。如何获取应用程序当前所在屏幕的 X 和 Y 坐标?

IE 我有 2 个 1600x900 的显示器,所以如果应用程序在显示器 1 上,X 和 Y 将为 0 和 0,但如果它是第二个显示器,则为 1600 和 0。

但我需要它,以便它适用于所有尺寸的显示器,即 1200x800,或者如果显示器是垂直放置而不是水平放置。

4

2 回答 2

4

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

我使用以下(及其变体)来确定单个屏幕的屏幕边界

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但本质上归结为这一点。

从 a中,您可以通过调用MouseEvent.getLocationOnScreenMouseEvent来简单地获取屏幕坐标

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

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;
}

基本上,它只是遍历所有屏幕设备并将那里的区域添加在一起以形成一个“虚拟”矩形。您可以使用相同的概念将每个屏幕设备的边界作为数组返回。

于 2012-07-30T01:00:07.593 回答
0

您可以使用它来获取屏幕尺寸。

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");
于 2012-07-30T00:47:09.313 回答