我正在尝试使用窗口截图将其用作应用程序中的背景。
这是我的代码:
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等等。窗口边框变化。
那么......有没有一种方法来获取帧位置或窗口边框大小来计算我需要的东西?
感谢您的时间和答案!
答案 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();
这给出了框架边框/标签内的右上角