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());
}
});
}
Run Code Online (Sandbox Code Playgroud)
问题是鼠标事件的坐标(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()));
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2145 次 |
| 最近记录: |