【发布时间】:2014-08-02 17:45:48
【问题描述】:
我开发了一个 JavaFX 应用程序,它将在带有触摸屏的系统上使用。
我的开发机器没有触摸屏。在这种环境下,应用看起来像一个桌面应用。
是否可以(手动)在非基于触摸的设备上使用 JavaFX 测试基于触摸的行为?
是否有某种模拟触摸事件的 JavaFX 应用程序模拟器。 (类似于安卓应用的安卓模拟器?)
【问题讨论】:
标签: javafx
我开发了一个 JavaFX 应用程序,它将在带有触摸屏的系统上使用。
我的开发机器没有触摸屏。在这种环境下,应用看起来像一个桌面应用。
是否可以(手动)在非基于触摸的设备上使用 JavaFX 测试基于触摸的行为?
是否有某种模拟触摸事件的 JavaFX 应用程序模拟器。 (类似于安卓应用的安卓模拟器?)
【问题讨论】:
标签: javafx
你可以构造一个touch event with a constructor,然后是fire the event on a stage。您可以在舞台上add a filter 处理鼠标事件,使用它们并代替它们触发触摸事件。例如:
stage.addEventFilter(MouseEvent.MOUSE_PRESSED, mouseEvent -> {
mouseEvent.consume();
Event touchEvent = new TouchEvent(lotsaparameters...);
stage.fireEvent(touchEvent);
});
【讨论】:
使用触摸事件调用 event.source 的代码
button.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
TextField tf = (TextField) event.getSource();
Stage stage = (Stage) tf.getScene().getWindow();
double sceX = event.getSceneX();
double sceY = event.getSceneY();
double scrX = event.getScreenX();
double scrY = event.getScreenY();
TouchPoint tp = new TouchPoint(1, TouchPoint.State.PRESSED, sceX, sceY, scrX, scrY, (EventTarget) event.getSource(), null);
ArrayList<TouchPoint> tpa = new ArrayList<>();
tpa.add(tp);
tf.fireEvent(new TouchEvent(TouchEvent.TOUCH_PRESSED,
tp,
tpa,
1,
false,
false,
false,
false)
);
event.consume();
}
});
【讨论】: