Ang*_*gom 3 javafx javafx-2 javafx-8
我有一个多边形(三角形).我想用鼠标拖动它.下面是我尝试的代码,但是使用此代码我无法顺利拖动它.请让我知道如何才能使其顺利拖动.
    public void start(Stage primaryStage) throws Exception {
    AnchorPane pane = new AnchorPane();
    final Polygon polygon   = new Polygon();
    polygon.getPoints().addAll(new Double[]{
            50.0,  50.0,
            30.0, 70.0,
            70.0, 70.0 });
    pane.getChildren().add(polygon);
    Scene scene = new Scene(pane, 200, 200, Color.WHITE);
    primaryStage.setScene(scene);
    primaryStage.show();
    polygon.setOnMouseDragged(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            polygon.setLayoutX(event.getX());
            polygon.setLayoutY(event.getY());
        }
    });
  } 
问题是鼠标事件的坐标(event.getX()和event.getY())是相对于多边形的; 而多边形的layoutX和layoutY是相对于多边形的父级(即窗格).
有很多方法可以做到这一点,但都涉及测量相对于固定事物(例如场景)的事件坐标,并通过这些坐标的变化来增加layoutX和layoutY.
这样的东西会起作用:
    final ObjectProperty<Point2D> mousePosition = new SimpleObjectProperty<>();
    polygon.setOnMousePressed(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            mousePosition.set(new Point2D(event.getSceneX(), event.getSceneY()));
        }
    });
    polygon.setOnMouseDragged(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            double deltaX = event.getSceneX() - mousePosition.get().getX();
            double deltaY = event.getSceneY() - mousePosition.get().getY();
            polygon.setLayoutX(polygon.getLayoutX()+deltaX);
            polygon.setLayoutY(polygon.getLayoutY()+deltaY);
            mousePosition.set(new Point2D(event.getSceneX(), event.getSceneY()));
        }
    });