【问题标题】:Java - Get Window Position Without BorderJava - 获取无边框的窗口位置
【发布时间】:2015-04-29 18:01:51
【问题描述】:

我正在尝试截取窗口屏幕截图以将其用作应用程序的背景。

这是我的代码:

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 等窗口边框会发生变化。

那么...有没有一种方法可以获取框架位置或窗口边框大小来计算我需要什么?

感谢您的宝贵时间和回答!

【问题讨论】:

标签: java position window border frame


【解决方案1】:

就这么简单:

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

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

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

【讨论】:

  • 谢谢,我刚试了一下,对窗口左下右的小边框效果很好,但是上边框更高(有标题,关闭按钮...)。我怎样才能得到那个尺寸?
  • @Mouse 这个 SO 接受的答案是否解决了 OP 的困境?他们希望省略菜单栏。 stackoverflow.com/questions/7154633/…
  • @Trobbins 从JavaDoc 看来,菜单栏似乎没有通过检查插入来省略。但我不确定。
  • OP 能否隔离顶部插图并运行一些减法以获得核心窗口的大小?我自己也不确定。
  • @Trobbins 更好地解释自己。你是什​​么意思“核心窗口”,有边框,但没有标题栏?
【解决方案2】:

使用这个

frame.getContentPane().getSize();

【讨论】:

  • 我还检查了那个 SO 帖子 (stackoverflow.com/questions/5097301/…),我认为 @MouseEvent 的答案要好一些。
  • 我尝试使用 getContentPane,但它会返回窗口中的 contentpane 值。我不知道为什么。谢谢
  • 对不起... MoseEvent 能帮我什么忙?
【解决方案3】:

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

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

frame.getContentPane(),如果您不想要菜单栏。我认为此方法返回一个 Container 对象,因此您需要将 is 转换为 JComponent。

【讨论】:

    【解决方案4】:
    int mouseX = MouseInfo.getPointerInfo().getLocation().getX() - frame.getX() - frame.getRootPane().getX();
    int mouseY = MouseInfo.getPointerInfo().getLocation().getY() - frame.getY() - frame.getRootPane().getY();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-03
      • 2023-03-25
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多