我有一个多边形(三角形)。我想用鼠标拖动它。下面是我尝试的代码,但是使用此代码我无法顺利拖动它。请让我知道如何才能使其顺利拖延。
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());
}
});
}
答案 0 :(得分:6)
问题是鼠标事件的坐标(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()));
}
});