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