【问题标题】:Testing Touch Events in Non-Touch-Development Environmet在非触控开发环境中测试触控事件
【发布时间】:2014-08-02 17:45:48
【问题描述】:

我开发了一个 JavaFX 应用程序,它将在带有触摸屏的系统上使用。

我的开发机器没有触摸屏。在这种环境下,应用看起来像一个桌面应用。

是否可以(手动)在非基于触摸的设备上使用 JavaFX 测试基于触摸的行为?

是否有某种模拟触摸事件的 JavaFX 应用程序模拟器。 (类似于安卓应用的安卓模拟器?)

【问题讨论】:

    标签: javafx


    【解决方案1】:

    你可以构造一个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);
    });
    

    【讨论】:

    • 如果在舞台外使用坐标会报错还是可以?
    • 这是舞台上的事件过滤器。它将过滤路由到舞台的事件。舞台外的坐标不会被路由到舞台上。如果你在舞台外按下鼠标,如预期的那样,不会有错误,因为没有发生错误;什么都不会发生,因为不会触发事件过滤器。
    • 我希望点击舞台外的任何内容,但这似乎没有发生
    • 当然不是。这不是这个问题所问的或这个答案所提供的。如果您有新问题,请将其作为新问题提出。
    • 请记住,当您以编程方式模拟事件时,与有人触摸屏幕上的 x,y 位置不同。如果某些控件被错误地放置在彼此之上 - 这样做完全没有帮助。据我所知,触摸事件没有诸如 awt.robot 之类的东西——因为我也在寻找测试触摸事件——我认为有一种方法可以做到这一点,而且我认为该解决方案与能够触发有关舞台外的事件(最好没有任何目标)。
    【解决方案2】:

    使用触摸事件调用 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();
            }
        });
    

    【讨论】:

    • 你能做到这一点而不指定哪个节点吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2010-11-21
    • 2018-07-05
    • 2014-02-13
    • 2016-04-20
    • 2011-03-16
    • 2016-04-02
    相关资源
    最近更新 更多