text - جافافس المسافة بين دائرتين والحفاظ على تحديث الملكية



javafx properties (1)

لتعيين، أنا خلقت 2 دائرة قابل للسحب وربطها مع خط مع جافافس.

أنا بحاجة إلى إضافة نص الذي يحسب المسافة بين اثنين من دائرة (أو طول الخط) وهذا النص بحاجة للحفاظ على تحديث عند سحب الدوائر، ولكن هذا هو المكان الذي عالقة

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

ومع ذلك، كما تعلمون، وأنا لا يمكن عادة حساب قيمة الملكية، وليس لدي أي فكرة كيف ينبغي أن أفعل ذلك.


يمكنك إنشاء دوبلبروبيرتي

DoubleProperty distanceProperty = new SimpleDoubleProperty();

و تشانجليستينر التي يمكنك حساب المسافة

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

وربط المسافةبروبيرتي إلى النص

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




distance