JavaFX触摸事件

JavaFX教程 – JavaFX触摸事件

触摸事件允许我们使用触摸屏与JavaFX应用程序交互。

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.TouchEvent;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
//from w w w .  j a  va  2s  .  c  o m
public class Main extends Application {
  int touchId = -1;
  double touchx, touchy;
  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);

    final Rectangle rect = new Rectangle();
    rect.setWidth(100);
    rect.setHeight(100);
    root.getChildren().add(rect);

    rect.setOnTouchPressed(new EventHandler<TouchEvent>() {
        @Override public void handle(TouchEvent event) {
            if (touchId == -1) {
                touchId = event.getTouchPoint().getId();
                touchx = event.getTouchPoint().getSceneX() - rect.getTranslateX();
                touchy = event.getTouchPoint().getSceneY() - rect.getTranslateY();
            }
            event.consume();
        }
    });

    rect.setOnTouchReleased(new EventHandler<TouchEvent>() {
        @Override public void handle(TouchEvent event) {
            if (event.getTouchPoint().getId() == touchId) {
                touchId = -1;
            }
            event.consume();
        }
    });

    rect.setOnTouchMoved(new EventHandler<TouchEvent>() {
        @Override public void handle(TouchEvent event) {
            if (event.getTouchPoint().getId() == touchId) {
              rect.setTranslateX(event.getTouchPoint().getSceneX() - touchx);
              rect.setTranslateY(event.getTouchPoint().getSceneY() - touchy);
            }
            event.consume();
        }
    });

    primaryStage.setScene(scene);
    primaryStage.show();
  }
}

上面的代码生成以下结果。

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《JavaFX触摸事件》
文章链接:https://zhuji.vsping.com/292500.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。