gpt4 book ai didi

java - 在 JavaFX 中拖动的圆圈落后于光标

转载 作者:行者123 更新时间:2023-11-29 04:49:17 25 4
gpt4 key购买 nike

我有一个程序,其中在 Pane 中拖动了 2 个圆圈。还有一条线连接它们,上面显示距离。我的问题在于,当我用鼠标缓慢拖动圆圈时,它们移动得很好,但当我更快地移动圆圈时,圆圈停止了。

这里是计算圆阻力的地方

pane.setOnMouseDragged(e -> {
if (circle1.contains(e.getX(), e.getY())) {
pane.getChildren().clear();
circle1.setCenterX(e.getX());
circle1.setCenterY(e.getY());
pane.getChildren().addAll(getLine(circle1, circle2), circle1,
circle2, getText(circle1, circle2));
}
else if (circle2.contains(e.getX(), e.getY())) {
pane.getChildren().clear();
circle2.setCenterX(e.getX());
circle2.setCenterY(e.getY());
pane.getChildren().addAll(getLine(circle1, circle2), circle1,
circle2, getText(circle1, circle2));
}
});

最佳答案

我认为发生的事情是,当鼠标快速移动时,处理两个连续事件之间移动的距离超出了圆圈的范围,因此 if 条件变为假。您可能需要在圆圈本身而不是 Pane 上注册鼠标处理程序。 (顺便说一句,为什么要清除并重建 Pane ,而不是只更新行?)

下面是一个使用这些技术的例子:

import javafx.application.Application;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.geometry.Point2D;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.stage.Stage;

public class DraggingCircles extends Application {

@Override
public void start(Stage primaryStage) {
Pane pane = new Pane();
Circle circle1 = createDraggingCircle(50, 50, 25, Color.BLUE);
Circle circle2 = createDraggingCircle(350, 350, 25, Color.RED);
Line line = new Line();
line.startXProperty().bind(circle1.centerXProperty());
line.startYProperty().bind(circle1.centerYProperty());
line.endXProperty().bind(circle2.centerXProperty());
line.endYProperty().bind(circle2.centerYProperty());
pane.getChildren().addAll(circle1, circle2, line);

Scene scene = new Scene(pane, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}

private Circle createDraggingCircle(double x, double y, double radius, Color fill) {
Circle circle = new Circle(x, y, radius, fill);
ObjectProperty<Point2D> mouseLocation = new SimpleObjectProperty<>();

circle.setOnMousePressed(e -> {
mouseLocation.set(new Point2D(e.getX(), e.getY()));
});

circle.setOnMouseDragged(e -> {
double deltaX = e.getX() - mouseLocation.get().getX();
double deltaY = e.getY() - mouseLocation.get().getY();
circle.setCenterX(circle.getCenterX() + deltaX);
circle.setCenterY(circle.getCenterY() + deltaY);
mouseLocation.set(new Point2D(e.getX(), e.getY()));
});

return circle ;
}

public static void main(String[] args) {
launch(args);
}
}

关于java - 在 JavaFX 中拖动的圆圈落后于光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36025671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com