生成的JavaFX的MouseEvent(generating a MouseEvent in Ja

2019-07-30 11:40发布

我需要的是模拟的MouseEvent.MOUSE_CLICKED 。 我想用一个特定节点fireEvent方法,以派遣上述类型的事件。 然而,我与生成一个挣扎。 看来,javafx.scene.input.MouseEvent没有有效的构造,但老java.awt.event.MouseEvent对象可以被实例化这种方式。 不过,我还没有发现任何转换工作的解决方案。 我怎么去解决这个?

谢谢。

Answer 1:

您可以使用过时的MouseEvent.impl_mouseEvent API产生的MouseEvent。 我在这做这个之前论坛主题为JavaFX 2.0。 请注意,API已被弃用的一个原因 - 它是在JavaFX中实现中使用私有API和API不能保证维持相同的签名,甚至存在于未来的版本(可以证明,因为原来的代码我张贴在论坛主题不再编译。

正确的解决方案,以产生这样的事件是有一个公共的API,因此支持这一点。 目前已经被提交到提供此功能的请求RT-9383“适当的构造和工厂方法添加到事件类,删除IMPL” 。 这JIRA预定明年要完成的JavaFX 3.0。

在此期间,作为谢尔盖建议Robot类的用法可能是你最好的方法。


更新:Java的8增加公共构造javafx.event.MouseEvent及(如周杰伦THAKKAR的回答表示),你可以使用火这样的事件Event.fireEvent (你也可以触发在Windows的事件 )。



Answer 2:

这将激发你的节点单个主鼠标点击:

import javafx.event.Event; 
import javafx.scene.input.MouseButton; 
import javafx.scene.input.MouseEvent;

Event.fireEvent(YOUR NODE, new MouseEvent(MouseEvent.MOUSE_CLICKED, 0,
                0, 0, 0, MouseButton.PRIMARY, 1, true, true, true, true,
                true, true, true, true, true, true, null));


Answer 3:

或者你可以使用一个简单的“黑客”做按钮的纲领性点击。 创建一个“的Util”类此方法:

public static void click(javafx.scene.control.Control control) {
    java.awt.Point originalLocation = java.awt.MouseInfo.getPointerInfo().getLocation();
    javafx.geometry.Point2D buttonLocation = control.localToScreen(control.getLayoutBounds().getMinX(), control.getLayoutBounds().getMinY());
    try {
        java.awt.Robot robot = new java.awt.Robot();
        robot.mouseMove((int)buttonLocation.getX(), (int)buttonLocation.getY());
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        robot.mouseMove((int) originalLocation.getX(), (int)originalLocation.getY());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

然后,“点击”按钮只需调用方法点击通过你的按钮参数。



Answer 4:

当您设置一个处理程序,它设置一个公共属性。 你可以从这个属性和调用句柄()事件:

button1.setOnMouseClicked()....
the corresponding property is
button1.onMouseClickedProperty().get().handle(me);//where me is some MouseEvent object


文章来源: generating a MouseEvent in JavaFX