Events 在JavaFX中生成MouseEvent

Events 在JavaFX中生成MouseEvent,events,mouse,javafx-2,Events,Mouse,Javafx 2,我需要模拟一个MouseEvent。鼠标点击了。我想使用特定节点的fireEvent方法来调度上述类型的事件。然而,我正在努力生成一个。似乎javafx.scene.input.MouseEvent没有有效的构造函数,但是旧的java.awt.event.MouseEvent对象可以这样实例化。不过,我还没有找到任何有效的转换解决方案。我该怎么做 谢谢。您可以使用不推荐使用的MouseEvent.impl\u MouseEvent API生成MouseEvent。我之前在JavaFX2.0中做过

我需要模拟一个
MouseEvent。鼠标点击了
。我想使用特定节点的fireEvent方法来调度上述类型的事件。然而,我正在努力生成一个。似乎javafx.scene.input.MouseEvent没有有效的构造函数,但是旧的
java.awt.event.MouseEvent
对象可以这样实例化。不过,我还没有找到任何有效的转换解决方案。我该怎么做


谢谢。

您可以使用不推荐使用的MouseEvent.impl\u MouseEvent API生成MouseEvent。我之前在JavaFX2.0中做过这件事。请注意,该API被弃用是有原因的——它是JavaFX实现中使用的私有API,并且该API不保证维护相同的签名,甚至不存在于未来的版本中(这可以证明,因为我在论坛线程中发布的原始代码不再编译)

生成此类事件的正确解决方案是有一个公共API来支持此功能。已经有一个请求提交以提供此功能。此jira计划在明年为JavaFX 3.0完成

同时,使用Sergey建议的Robot类可能是最好的方法



更新:添加了Java 8,并且(如Jay Thakkar的回答所示),您可以使用(您也可以)触发此类事件。

这将在您的节点上触发一次主鼠标单击:

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));
或者,您可以使用一个简单的“黑客”对按钮进行编程点击。 在“Util”类中创建此方法:


然后,要“单击”按钮,只需调用方法,单击将按钮作为参数传递。

设置处理程序时,它会设置一个公共属性。您可以从该属性获取事件并调用句柄()


您可以使用
java.awt.Robot.mouse*
methodsright模拟鼠标点击,但是如何将
java.awt.event.MouseEvent
转换为
javafx.scene.input.MouseEvent
?处理实际事件的方法签名需要来自javafx的MouseEvent.*包如果您使用Robot类,它将模拟鼠标点击,而ChJavaFX基础设施将自己捕获并创建所有必需的类
这是一个非常详细的答案。谢谢。Jira access对我有用。新的事件构造函数已添加到将于明年发布的中。参考包:import javafx.event.event;import javafx.scene.input.MouseButton;import javafx.scene.input.MouseEvent;为什么要为所有的事件传递
true
修改器键(
shiftDown
controlDown
,等等)?我假设一次简单的点击不会让任何修改器关闭。
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();
    }
}
button1.setOnMouseClicked()....
the corresponding property is
button1.onMouseClickedProperty().get().handle(me);//where me is some MouseEvent object