如何通过javafx在ubuntu 16.04中开发多点触控应用程序?

时间:2017-03-28 15:18:17

标签: javafx ubuntu-16.04 multi-touch pinchzoom

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();
  }
}
  1. 我正在尝试实现能够制作的JavaFX应用程序 使用触摸事件和多点触控手势。我正在和一个人一起工作 电容式触摸屏-eGalax Touch设备,带有EETI eGTouch 驱动程序(eGTouchD版本:2.5)。它连接到Ubuntu 16.04 LTS PC 通过USB和创建的多点触摸事件(ABS_MT_SLOT, ABS_MT_TRACKING_ID,ABS_MT_POSITION_X,ABS_MT_POSITION_Y)哪个可以 从终端的/ dev / input / eventX读取。我已经尝试了很多 方法(包括MT4j)来实现它,但它们都不能 认识到触摸事件。

    但在Windows 7下,识别触摸事件的代码相同,我可以滑动,捏合,缩放等。 现在,放大和缩小事件也可以通过Ubuntu和Wondows 7中的鼠标滚动事件来实现。

  2. 相比之下,我发现在Windows 7中java 8 JDK提供了一个 jar叫java-access-bridge.jar,但在Ubuntu的JDK中却没有 包括在内。这是问题的关键吗?

  3. 因为我刚开始熟悉这些东西,所以我很感激 任何提示或帮助。

0 个答案:

没有答案