如何通过javafx?在ubuntu 16.04中开发多点触摸应用程序; javafx应用程序: 导入javafx.application.application; 导入javafx.event.EventHandler; 导入javafx.scene.Group; 导入javafx.scene.scene; 导入javafx.scene.input.MouseEvent; 导入javafx.scene.input.RotateEvent; 导入javafx.scene.input.ScrollEvent; 导入javafx.scene.input.SwipeEvent; 导入javafx.scene.input.TouchEvent; 导入javafx.scene.input.ZoomEvent; 导入javafx.scene.shape.Rectangle; 导入javafx.stage.stage; 公共类主扩展应用程序{ 公共静态void main(字符串[]args){ 应用程序启动(args); } @凌驾 公共无效开始(阶段primaryStage){ 组根=新组(); 场景=新场景(根,300,250); 矩形rect=新矩形(); 矩形设置宽度(100); 直线设置高度(100); root.getChildren().add(rect); rect.setOnScroll(新的EventHandler(){ @凌驾 公共无效句柄(ScrollEvent事件){ 如果(!event.isInertia()){ setTranslateX(rect.getTranslateX()+event.getDeltaX()); setTranslateY(rect.getTranslateY()+event.getDeltaY()); } System.out.println(“矩形:滚动事件“+”,惯性:” +event.isInertia()+”,direct:“+event.isDirect()); event.consume(); } }); setOnScrollStarted(新的EventHandler(){ @凌驾 公共无效句柄(ScrollEvent事件){ System.out.println(“矩形:滚动启动事件”); event.consume(); } }); setOnScrollFinished(新的EventHandler(){ @凌驾 公共无效句柄(ScrollEvent事件){ System.out.println(“矩形:滚动完成事件”); event.consume(); } }); setOnZoom(新的EventHandler(){ @凌驾 公共无效句柄(ZoomEvent事件){ rect.setScaleX(rect.getScaleX()*event.getZoomFactor()); rect.setScaleY(rect.getScaleY()*event.getZoomFactor()); System.out.println(“矩形:缩放事件“+”,惯性:” +event.isInertia()+”,direct:“+event.isDirect()); event.consume(); } }); rect.setOnZoomStarted(新的EventHandler(){ @凌驾 公共无效句柄(ZoomEvent事件){ System.out.println(“矩形:缩放事件已启动”); event.consume(); } }); rect.setOnZoomFinished(新的EventHandler(){ @凌驾 公共无效句柄(ZoomEvent事件){ System.out.println(“矩形:缩放事件完成”); event.consume(); } }); setOnRotate(新的EventHandler(){ @凌驾 公共无效句柄(RotateEvent事件){ setRotate(rect.getRotate()+event.getAngle()); System.out.println(“矩形:旋转事件“+”,惯性:” +event.isInertia()+”,direct:“+event.isDirect()); event.consume(); } }); rect.setOnRotationStarted(新的EventHandler(){ @凌驾 公共无效句柄(RotateEvent事件){ System.out.println(“矩形:旋转事件已启动”); event.consume(); } }); rect.setOnRotationFinished(新的EventHandler(){ @凌驾 公共无效句柄(RotateEvent事件){ System.out.println(“矩形:旋转事件完成”); event.consume(); } }); rect.setOnSwipeRight(新的EventHandler(){ @凌驾 公共无效句柄(SwipeEvent事件){ System.out.println(“矩形:向右滑动事件”); event.consume(); } }); rect.setOnSwipeLeft(新的EventHandler(){ @凌驾 公共无效句柄(SwipeEvent事件){ System.out.println(“矩形:向左滑动事件”); event.consume(); } }); rect.setOnTouchPressed(新的EventHandler(){ @凌驾 公共无效句柄(TouchEvent事件){ System.out.println(“矩形:触摸按下事件”); event.consume(); } }); rect.setOnTouchReleased(新的EventHandler(){ @凌驾 公共无效句柄(TouchEvent事件){ System.out.println(“矩形:触摸释放事件”); event.consume(); } }); rect.setOnMousePressed(新的EventHandler(){ @凌驾 公共无效句柄(MouseeEvent事件){ if(event.isSynthesized()){ System.out.println(“椭圆:鼠标按下触摸事件” +,合成:“+event.isSynthesized()); } event.consume(); } }); rect.setOnMouseReleased(新的EventHandler(){ @凌驾 公共无效句柄(MouseeEvent事件){ if(event.isSynthesized()){ System.out.println(“椭圆:鼠标从触摸中释放事件” +,合成:“+event.isSynthesized()); } event.consume(); } }); 初级阶段。场景(场景); primaryStage.show(); } }

如何通过javafx?在ubuntu 16.04中开发多点触摸应用程序; javafx应用程序: 导入javafx.application.application; 导入javafx.event.EventHandler; 导入javafx.scene.Group; 导入javafx.scene.scene; 导入javafx.scene.input.MouseEvent; 导入javafx.scene.input.RotateEvent; 导入javafx.scene.input.ScrollEvent; 导入javafx.scene.input.SwipeEvent; 导入javafx.scene.input.TouchEvent; 导入javafx.scene.input.ZoomEvent; 导入javafx.scene.shape.Rectangle; 导入javafx.stage.stage; 公共类主扩展应用程序{ 公共静态void main(字符串[]args){ 应用程序启动(args); } @凌驾 公共无效开始(阶段primaryStage){ 组根=新组(); 场景=新场景(根,300,250); 矩形rect=新矩形(); 矩形设置宽度(100); 直线设置高度(100); root.getChildren().add(rect); rect.setOnScroll(新的EventHandler(){ @凌驾 公共无效句柄(ScrollEvent事件){ 如果(!event.isInertia()){ setTranslateX(rect.getTranslateX()+event.getDeltaX()); setTranslateY(rect.getTranslateY()+event.getDeltaY()); } System.out.println(“矩形:滚动事件“+”,惯性:” +event.isInertia()+”,direct:“+event.isDirect()); event.consume(); } }); setOnScrollStarted(新的EventHandler(){ @凌驾 公共无效句柄(ScrollEvent事件){ System.out.println(“矩形:滚动启动事件”); event.consume(); } }); setOnScrollFinished(新的EventHandler(){ @凌驾 公共无效句柄(ScrollEvent事件){ System.out.println(“矩形:滚动完成事件”); event.consume(); } }); setOnZoom(新的EventHandler(){ @凌驾 公共无效句柄(ZoomEvent事件){ rect.setScaleX(rect.getScaleX()*event.getZoomFactor()); rect.setScaleY(rect.getScaleY()*event.getZoomFactor()); System.out.println(“矩形:缩放事件“+”,惯性:” +event.isInertia()+”,direct:“+event.isDirect()); event.consume(); } }); rect.setOnZoomStarted(新的EventHandler(){ @凌驾 公共无效句柄(ZoomEvent事件){ System.out.println(“矩形:缩放事件已启动”); event.consume(); } }); rect.setOnZoomFinished(新的EventHandler(){ @凌驾 公共无效句柄(ZoomEvent事件){ System.out.println(“矩形:缩放事件完成”); event.consume(); } }); setOnRotate(新的EventHandler(){ @凌驾 公共无效句柄(RotateEvent事件){ setRotate(rect.getRotate()+event.getAngle()); System.out.println(“矩形:旋转事件“+”,惯性:” +event.isInertia()+”,direct:“+event.isDirect()); event.consume(); } }); rect.setOnRotationStarted(新的EventHandler(){ @凌驾 公共无效句柄(RotateEvent事件){ System.out.println(“矩形:旋转事件已启动”); event.consume(); } }); rect.setOnRotationFinished(新的EventHandler(){ @凌驾 公共无效句柄(RotateEvent事件){ System.out.println(“矩形:旋转事件完成”); event.consume(); } }); rect.setOnSwipeRight(新的EventHandler(){ @凌驾 公共无效句柄(SwipeEvent事件){ System.out.println(“矩形:向右滑动事件”); event.consume(); } }); rect.setOnSwipeLeft(新的EventHandler(){ @凌驾 公共无效句柄(SwipeEvent事件){ System.out.println(“矩形:向左滑动事件”); event.consume(); } }); rect.setOnTouchPressed(新的EventHandler(){ @凌驾 公共无效句柄(TouchEvent事件){ System.out.println(“矩形:触摸按下事件”); event.consume(); } }); rect.setOnTouchReleased(新的EventHandler(){ @凌驾 公共无效句柄(TouchEvent事件){ System.out.println(“矩形:触摸释放事件”); event.consume(); } }); rect.setOnMousePressed(新的EventHandler(){ @凌驾 公共无效句柄(MouseeEvent事件){ if(event.isSynthesized()){ System.out.println(“椭圆:鼠标按下触摸事件” +,合成:“+event.isSynthesized()); } event.consume(); } }); rect.setOnMouseReleased(新的EventHandler(){ @凌驾 公共无效句柄(MouseeEvent事件){ if(event.isSynthesized()){ System.out.println(“椭圆:鼠标从触摸中释放事件” +,合成:“+event.isSynthesized()); } event.consume(); } }); 初级阶段。场景(场景); primaryStage.show(); } },javafx,ubuntu-16.04,multi-touch,pinchzoom,Javafx,Ubuntu 16.04,Multi Touch,Pinchzoom,我正在尝试实现一个JavaFX应用程序,它能够 使用触摸事件和多点触摸手势。我在和一家公司合作 电容式触摸屏eGalax触摸设备,带有EETI eGTouch 驱动程序(eGTouchD版本:2.5)。它连接到Ubuntu 16.04 LTS PC 通过USB并创建多点触控事件(ABS\U MT\U插槽, ABS\u MT\u TRACKING\u ID、ABS\u MT\u POSITION\u X、ABS\u MT\u POSITION\u Y)可以 可以从终端中的/dev/input/ev

我正在尝试实现一个JavaFX应用程序,它能够 使用触摸事件和多点触摸手势。我在和一家公司合作 电容式触摸屏eGalax触摸设备,带有EETI eGTouch 驱动程序(eGTouchD版本:2.5)。它连接到Ubuntu 16.04 LTS PC 通过USB并创建多点触控事件(ABS\U MT\U插槽, ABS\u MT\u TRACKING\u ID、ABS\u MT\u POSITION\u X、ABS\u MT\u POSITION\u Y)可以 可以从终端中的/dev/input/eventX读取。我试了很多 有很多方法(包括MT4j)可以实现它,但没有一种能够实现 识别触摸事件

但在Windows7下,触摸事件识别的代码相同,我可以滑动、挤压、缩放等。 现在,在Ubuntu和Wondows7中,也可以通过鼠标滚动事件来实现放大和缩小事件

  • 相比之下,我发现在Windows7中,Java8JDK提供了 jar称为javaaccessbridge.jar,但在Ubuntu的JDK中不是 包括。这是问题的关键吗

  • 因为我刚刚开始熟悉这些东西,我很感激 任何提示或帮助


  • 您在两个系统上都使用哪个版本的JDK?谢谢!在Windows 7上,JDK是JDK-8u121-Windows-i586,在Ubuntu上,JDK是JDK-8u121-linux-x86。现在,我在Winows 7中发现,根据对测试样本的分析,鼠标事件与触摸事件合成,它可以通过MouseScoll和两个手指的挤压放大/缩小,但在Ubuntu中,该样本仅对MouseeEvent做出响应。
    The javafx application:
    import javafx.application.Application;
    import javafx.event.EventHandler;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.scene.input.MouseEvent;
    import javafx.scene.input.RotateEvent;
    import javafx.scene.input.ScrollEvent;
    import javafx.scene.input.SwipeEvent;
    import javafx.scene.input.TouchEvent;
    import javafx.scene.input.ZoomEvent;
    import javafx.scene.shape.Rectangle;
    import javafx.stage.Stage;
    public class Main extends Application {
      public static void main(String[] args) {
        Application.launch(args);
      }
    
      @Override
     public void start(Stage primaryStage) {
        Group root = new Group();
        Scene scene = new Scene(root, 300, 250);
    
    Rectangle rect = new Rectangle();
    rect.setWidth(100);
    rect.setHeight(100);
    root.getChildren().add(rect);
    rect.setOnScroll(new EventHandler<ScrollEvent>() {
      @Override
      public void handle(ScrollEvent event) {
        if (!event.isInertia()) {
          rect.setTranslateX(rect.getTranslateX() + event.getDeltaX());
          rect.setTranslateY(rect.getTranslateY() + event.getDeltaY());
        }
        System.out.println("Rectangle: Scroll event" + ", inertia: "
            + event.isInertia() + ", direct: " + event.isDirect());
        event.consume();
      }
    });
    
    rect.setOnScrollStarted(new EventHandler<ScrollEvent>() {
      @Override
      public void handle(ScrollEvent event) {
        System.out.println("Rectangle: Scroll started event");
        event.consume();
      }
    });
    
    rect.setOnScrollFinished(new EventHandler<ScrollEvent>() {
      @Override
      public void handle(ScrollEvent event) {
        System.out.println("Rectangle: Scroll finished event");
        event.consume();
      }
    });
    
    rect.setOnZoom(new EventHandler<ZoomEvent>() {
      @Override
      public void handle(ZoomEvent event) {
        rect.setScaleX(rect.getScaleX() * event.getZoomFactor());
        rect.setScaleY(rect.getScaleY() * event.getZoomFactor());
        System.out.println("Rectangle: Zoom event" + ", inertia: "
            + event.isInertia() + ", direct: " + event.isDirect());
    
        event.consume();
      }
    });
    
    rect.setOnZoomStarted(new EventHandler<ZoomEvent>() {
      @Override
      public void handle(ZoomEvent event) {
        System.out.println("Rectangle: Zoom event started");
        event.consume();
      }
    });
    
    rect.setOnZoomFinished(new EventHandler<ZoomEvent>() {
      @Override
      public void handle(ZoomEvent event) {
        System.out.println("Rectangle: Zoom event finished");
        event.consume();
      }
    });
    
    rect.setOnRotate(new EventHandler<RotateEvent>() {
      @Override
      public void handle(RotateEvent event) {
        rect.setRotate(rect.getRotate() + event.getAngle());
        System.out.println("Rectangle: Rotate event" + ", inertia: "
            + event.isInertia() + ", direct: " + event.isDirect());
        event.consume();
      }
    });
    
    rect.setOnRotationStarted(new EventHandler<RotateEvent>() {
      @Override
      public void handle(RotateEvent event) {
        System.out.println("Rectangle: Rotate event started");
        event.consume();
      }
    });
    
    rect.setOnRotationFinished(new EventHandler<RotateEvent>() {
      @Override
      public void handle(RotateEvent event) {
        System.out.println("Rectangle: Rotate event finished");
        event.consume();
      }
    });
    
    rect.setOnSwipeRight(new EventHandler<SwipeEvent>() {
      @Override
      public void handle(SwipeEvent event) {
        System.out.println("Rectangle: Swipe right event");
        event.consume();
      }
    });
    
    rect.setOnSwipeLeft(new EventHandler<SwipeEvent>() {
      @Override
      public void handle(SwipeEvent event) {
        System.out.println("Rectangle: Swipe left event");
        event.consume();
      }
    });
    
    rect.setOnTouchPressed(new EventHandler<TouchEvent>() {
      @Override
      public void handle(TouchEvent event) {
        System.out.println("Rectangle: Touch pressed event");
        event.consume();
      }
    });
    
    rect.setOnTouchReleased(new EventHandler<TouchEvent>() {
      @Override
      public void handle(TouchEvent event) {
        System.out.println("Rectangle: Touch released event");
        event.consume();
      }
    });
    
    rect.setOnMousePressed(new EventHandler<MouseEvent>() {
      @Override
      public void handle(MouseEvent event) {
        if (event.isSynthesized()) {
          System.out.println("Ellipse: Mouse pressed event from touch"
              + ", synthesized: " + event.isSynthesized());
        }
        event.consume();
      }
    });
    
    rect.setOnMouseReleased(new EventHandler<MouseEvent>() {
      @Override
      public void handle(MouseEvent event) {
        if (event.isSynthesized()) {
          System.out.println("Ellipse: Mouse released event from touch"
              + ", synthesized: " + event.isSynthesized());
        }
        event.consume();
      }
    });
    
    primaryStage.setScene(scene);
    primaryStage.show();
      }
    }