我需要的是模拟的MouseEvent.MOUSE_CLICKED
。 我想用一个特定节点的fireEvent方法,以派遣上述类型的事件。 然而,我与生成一个挣扎。 看来,javafx.scene.input.MouseEvent没有有效的构造,但老java.awt.event.MouseEvent
对象可以被实例化这种方式。 不过,我还没有发现任何转换工作的解决方案。 我怎么去解决这个?
谢谢。
我需要的是模拟的MouseEvent.MOUSE_CLICKED
。 我想用一个特定节点的fireEvent方法,以派遣上述类型的事件。 然而,我与生成一个挣扎。 看来,javafx.scene.input.MouseEvent没有有效的构造,但老java.awt.event.MouseEvent
对象可以被实例化这种方式。 不过,我还没有发现任何转换工作的解决方案。 我怎么去解决这个?
谢谢。
您可以使用过时的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的事件 )。
这将激发你的节点单个主鼠标点击:
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”类此方法:
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