imagen color and text javafx properties distance

text - color - Distancia JavaFX entre dos círculos y mantener la actualización de la propiedad



javafx effects (1)

Para la asignación, creé 2 círculos que se pueden arrastrar y los conecto con la línea con javaFX.

Necesito agregar texto que calcule la distancia entre dos círculos (o la longitud de la línea) y ese texto necesita seguir actualizando cuando arrastro círculos, pero ahí es donde me quedé

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

son mis dos círculos y mi línea, y probé

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

Sin embargo, como usted sabe, normalmente no puedo calcular el valor de la propiedad, y no tengo idea de cómo debería hacerlo.


Podrías crear una DoubleProperty

DoubleProperty distanceProperty = new SimpleDoubleProperty();

y un ChangeListener en el que calcula la distancia

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

asignar el oyente

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

y enlazar la propiedad distancia al texto

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