两个圆之间的JavaFX距离并保持更新属性 [英] JavaFX distance between two circle and keep updating property

查看:416
本文介绍了两个圆之间的JavaFX距离并保持更新属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于作业,我创建了2个可拖动的圆圈并用javaFX连接它们。

For assignment, I created 2 draggable circle and connect them with line with javaFX.

我需要添加文本来计算两个圆圈之间的距离(或线条的长度)当我拖动圆圈时,该文本需要不断更新,但这就是我卡住的地方

I need add text which calculate distance between two circle (or length of line) and that text need to keep updating when I drag circles, but that's where I stuck

    Circle circle1 = new Circle();
    circle1.setCenterX(40);
    circle1.setCenterY(40);
    circle1.setRadius(10);
    Circle circle2 = new Circle();
    circle2.setCenterX(120);
    circle2.setCenterY(150);
    circle2.setRadius(10);
    Line line = new Line ();

    line.startXProperty().bind(circle1.centerXProperty());
    line.startYProperty().bind(circle1.centerYProperty());
    line.endXProperty().bind(circle2.centerXProperty());
    line.endYProperty().bind(circle2.centerYProperty());

    circle1.setOnMousePressed(mousePressEventHandler);
    circle1.setOnMouseDragged(mouseDragEventHandler);
    circle2.setOnMousePressed(mousePressEventHandler);
    circle2.setOnMouseDragged(mouseDragEventHandler);

这是我的两个圈子和行,我试过了

it's my two circles and line, and I tried

 Text distance = new Text();
 distance.textProperty().bind(circle1.centerXProperty()-circle2.centerXProperty() . . .);

然而,正如你所知,我通常无法计算物业价值,我不知道我应该怎么做。

However, as you know as, I can't normally calculate Property value, and I have no idea how should I do it.

推荐答案

你可以创建一个DoubleProperty

You could create a DoubleProperty

DoubleProperty distanceProperty = new SimpleDoubleProperty();

以及计算距离的ChangeListener

and a ChangeListener in which you calculate the distance

ChangeListener<Number> changeListener = (observable, oldValue, newValue) -> {

  Point2D p1 = new Point2D(circle1.getCenterX(), circle1.getCenterY());
  Point2D p2 = new Point2D(circle2.getCenterX(), circle2.getCenterY());
  distanceProperty.set(p1.distance(p2));

};

分配监听器

circle1.centerXProperty().addListener( changeListener);
circle1.centerYProperty().addListener( changeListener);
circle2.centerXProperty().addListener( changeListener);
circle2.centerYProperty().addListener( changeListener);

并将distanceProperty绑定到文本

and bind the distanceProperty to the text

Text text = new Text();
text.textProperty().bind(distanceProperty.asString());

这篇关于两个圆之间的JavaFX距离并保持更新属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆