当前位置: 首页 > 知识库问答 >
问题:

JavaFX中拖在光标后面的圆圈

喻选
2023-03-14

我有一个程序,其中在窗格中拖动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));
        }
    });

共有1个答案

李星波
2023-03-14

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

下面是使用这些技术的示例:

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);
    }
}
 类似资料:
  • 我在JavaFX中创建了一个小的绘画程序,并且有了一个圆形创建工具。目前,我可以正确地画圆,但与我的其他工具不同,我看不到正在创建的圆(即,当我拖动鼠标时)。只有当我松开鼠标时,我才能看到圆(以正确的尺寸绘制)。我试图在拖动时添加一个< code>strokeOval()方法,但是它创建了一个奇怪的“泪珠”状的圆。我什么都试过了,有人能帮忙吗? 这是我的代码: 上面的代码正确创建了圆,但在我释放鼠

  • https://imgur.com/Ek3CAOt 我想在拖动元素时退出forbbiden光标。im使用html5默认拖放。我正在使用打字脚本 我试着从电动汽车转向电动汽车。目标风格光标到“抓取”光标,我试图从dropEffect等更改,但没有一个会产生欲望效果。这是拖动代码。 html模板: 打字稿删除代码:

  • 问题内容: 我有一个JavaScript Webapp,用户需要抓住背景才能移动整个屏幕。因此,我希望光标悬停在背景上时进行更改。在和CSS光标是非常理想的。当然,它们仅在Firefox中工作…其他浏览器是否具有等效的游标?我是否需要做一些比标准CSS游标更多的自定义操作? 问题答案: 我认为这可能是您正在执行的操作中最接近的标准光标值: move 表示要移动的东西。

  • 问题内容: 我正在尝试在javaFX中创建自定义光标。这是我的代码: Windows 8.1的游标创建无效吗? 问题答案: 检出ImageCursor.getBestSize()方法和ImageCursor.getMaximumColors()并查看它们返回的内容,然后尝试匹配最佳大小和最大颜色的自定义光标图像。对于Windows 8.1,这很可能是32x32的光标。 这是来自javadoc 的引

  • 我在一个板上有几个对象,我想通过坐标获取这些对象的索引。我尝试过制作一个处理程序,并使用与相结合,但没有成功。这些方法给了我不同的坐标,无法匹配它们。 我是否应该用光标的坐标画一个矩形,并使用< code > getBoundInParent()。intersects方法? 有什么建议吗?

  • 使用Material CDK库中的拖放行为,我试图在拖动元素时更改光标。 例如,在此StackBlitz中,光标悬停时为。我希望它在拖动时变为抓取。这方面的一个例子是在Google工作表中抓取一行时发生的情况: 读取样式化拖放组件的留档,看起来向这个类添加游标属性应该可以做到这一点: . cdk-drop-list-draging:当用户拖动项目时添加到cdkDropList的类。 代码如下所示: