将矩形移动到鼠标单击发生的位置

时间:2016-12-01 22:01:44

标签: javafx javafx-2

我正在尝试创建一个项目,用户点击屏幕,然后矩形将移动到点击发生的位置。我的目的是让矩形的中心移动点击的确切位置,但我的代码只将矩形移动到点击发生的一般区域。我的问题是如何让矩形的中心移动鼠标点击发生的确切位置?

public void start(Stage primaryStage) {

    BorderPane root = new BorderPane();
    Scene scene = new Scene(root,400,400);

    Rectangle rec = new Rectangle(50,50,50,50);
    rec.setLayoutX(200);
    rec.setLayoutY(200);

    TranslateTransition transition = new TranslateTransition(Duration.seconds(0.50), rec);
    transition.setOnFinished(new EventHandler<ActionEvent>() {
        @Override public void handle(ActionEvent t) {
            rec.setLayoutX(rec.getTranslateX() + rec.getLayoutX());
            rec.setLayoutY(rec.getTranslateY() + rec.getLayoutY());
            rec.setTranslateX(0);
            rec.setTranslateY(0);
        }
    });

    scene.setOnMousePressed(e->{
        transition.setToX(e.getSceneX() - rec.getLayoutX());
        transition.setToY(e.getSceneY() - rec.getLayoutY());
        transition.playFromStart();
    });

    root.getChildren().add(rec);

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

}

2 个答案:

答案 0 :(得分:1)

您会忽略Math.max的{​​{1}} / x属性,这些属性也会移动y所在的位置。此外,要将中心移动到此位置,您还需要从位置中减去Rectangle / Rectangle的一半以移至...

另外,我建议您使用width代替height,是否要自行设置Pane / BorderPane属性。尽管如此,在这种情况下,它应该也可以进行一些小的调整:

layoutX

答案 1 :(得分:0)

这是一个完整的样本,使用Faban建议的Pane。

the_string