我正在尝试创建一个项目,用户点击屏幕,然后矩形将移动到点击发生的位置。我的目的是让矩形的中心移动点击的确切位置,但我的代码只将矩形移动到点击发生的一般区域。我的问题是如何让矩形的中心移动鼠标点击发生的确切位置?
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();
}
答案 0 :(得分:1)
您会忽略Math.max
的{{1}} / x
属性,这些属性也会移动y
所在的位置。此外,要将中心移动到此位置,您还需要从位置中减去Rectangle
/ Rectangle
的一半以移至...
另外,我建议您使用width
代替height
,是否要自行设置Pane
/ BorderPane
属性。尽管如此,在这种情况下,它应该也可以进行一些小的调整:
layoutX
答案 1 :(得分:0)
这是一个完整的样本,使用Faban建议的Pane。
the_string