将鼠标输入转发到在后台运行的jxbrowser

时间:2018-02-15 08:22:46

标签: java awt lwjgl minecraft-forge jxbrowser

我试图将jxbrowser作为一个gui嵌入到opengl游戏中。(实际上它是Minecraft,但在这种情况下不相关)

绘图部分已完成。我可以在任何地方将浏览器UI绘制为四边形。

但是,由于浏览器是在后台运行,我需要将用户的鼠标位置转发到浏览器或浏览器的视图

我已经尝试了JxBrowser's documentation about forwarding mouse events中的代码,但看起来它只适用于heavyweight widget

我尝试过使用重量级,但它没有提供烘焙成BufferedImage的方法。

这是我到目前为止所得到的:

{{1}}

2 个答案:

答案 0 :(得分:0)

鼠标事件转发也适用于轻量级模式。如果您从提到的article运行示例应用程序,用Browser browser = new Browser(BrowserType.LIGHTWEIGHT);替换浏览器构造函数,您应该看到它按预期工作。

我注意到在编写 BrowserMouseEvent 实例时没有定义鼠标事件坐标。 请尝试填写 BrowserMouseEvent 实例的所有字段(类似于文章中描述的方式)。

答案 1 :(得分:0)

我自己解决了这个问题。事实证明:

  • 对于每个鼠标事件,我只需要填写setX和setY方法。必须将setGlobal方法留空。
  • 转发的X和Y值计算错误。
  • 对于鼠标单击事件,必须同时调用MOUSE_PRESSED和MOUSE_RELEASED事件。

而且,以下是我如何传递MOUSE_MOVED,因为它不在相应的文档中:

    BrowserMouseEvent.BrowserMouseEventBuilder builder = new BrowserMouseEvent.BrowserMouseEventBuilder();
    builder.setEventType(MOUSE_MOVED)
            .setX(browserX)
            .setY(browserY)
            .setModifiers(new BrowserKeyEvent.KeyModifiersBuilder().mouseButton().build());
    browser.forwardMouseEvent(builder.build());