Java - 获取没有边框的窗口位置

时间:2015-04-29 18:01:52

标签: java position window border frame

我正在尝试使用窗口截图将其用作应用程序中的背景。

这是我的代码:

try {
    Robot robot = new Robot();
    Rectangle captureSize = new Rectangle(new MainWindow().getX(), new MainWindow().getY(), MainWindow.getWIDTH(), MainWindow.getHEIGHT());
    RenderManager.backgroundGUIs = robot.createScreenCapture(captureSize);
    GUIManager.ThisGui = new GUI("inventory", null, false);
} catch(AWTException e) {
    System.err.println("Error taking screenshot!");
}

这些是MainWindow()。getY()和MainWindow()。getX()方法:

public int getX() {
    return (int) frame.getLocationOnScreen().getX();
}

public int getY() {
    return frame.getY();
}

现在......它工作正常,但存在问题。 frame.getLocationOnScreen().getX()frame.getX()返回窗口边框的位置,该窗口边框不在屏幕中。好的,我可以手动计算边框大小来减去它,但是从Windows 7到Windows 8,从Windows 8到Mac等等。窗口边框变化。

那么......有没有一种方法来获取帧位置或窗口边框大小来计算我需要的东西?

感谢您的时间和答案!

3 个答案:

答案 0 :(得分:1)

这很简单:

x = frame.getRootPane().getX();

同样,您可以根据根窗格进行所有其他计算,只需删除框架。

正如预期的那样,根窗格是任何框架/窗口/对话框等内的顶级容器。它也包括菜单栏。

答案 1 :(得分:0)

查看Screen Image课程。您可以创建框架上显示的任何组件的图像。

因此,您可以使用frame.getRootPane()作为您想要图像的组件。

如果您不想要菜单栏,请

frame.getContentPane()。我认为这个方法返回一个Container对象,所以你需要将它转换为JComponent。

答案 2 :(得分:0)

int mouseX = MouseInfo.getPointerInfo().getLocation().getX() - frame.getX() - frame.getRootPane().getX();
int mouseY = MouseInfo.getPointerInfo().getLocation().getY() - frame.getY() - frame.getRootPane().getY();

这给出了框架边框/标签内的右上角