【问题标题】:JavaFX distance between two circle and keep updating property两个圆圈之间的JavaFX距离并不断更新属性
【发布时间】:2016-03-16 02:35:08
【问题描述】:

为了分配,我创建了 2 个可拖动的圆圈,并用 javaFX 将它们连接起来。

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

    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);

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

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

但是,如您所知,我通常无法计算属性值,我不知道该怎么做。

【问题讨论】:

标签: text javafx properties distance


【解决方案1】:

你可以创建一个 DoubleProperty

DoubleProperty distanceProperty = new SimpleDoubleProperty();

还有一个用来计算距离的 ChangeListener

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 绑定到文本

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多