查找

2012-05-05 63 views
0
集團

形狀的場景中的位置我有這樣一組形狀:查找

Group g = new Group(); 
Rectangle r = new Rectangle(100, 100, 50, 50); 
Circle c = new Circle(125, 125, 10); 
g.getChildren().addAll(r, c); 

和線,這是不是該組中,在圓的中心結束的一部分。

Line l = new Line(0, 0, 125, 125); 

我已使集團可以圍繞按鼠標事件被拖到演示合奏(只是一對夫婦的鼠標偵聽器更新x和y平移性質的)。但我希望在該行的末尾跟隨圈子的中心。這意味着更新該行的endX和endY屬性。

我遇到的問題是endX和endY在場景局部空間(我認爲)。當我在屏幕上拖動該組時,circle的centerX和centerY屬性不會更新。我似乎得到的是對該組的translationX和translationY的更改。我無法弄清楚如何在拖動操作之後(和拖動操作過程中)找到圓的新中心。

指針非常感激地收到,因爲這讓我把我的頭髮撕掉!

我想出的最佳解決方案是在該組上放置一個翻譯監聽器,獲取該圓的中心位置,然後添加該組的翻譯,但結果並不是很好線粗略地跟隨着圓,但是跳起來並且漂移。事情是這樣的:

translateXProperty().addListener(new ChangeListener<Number>() { 
    public void changed(ObservableValue<? extends Number> ov, Number oldValue, Number newValue) { 
     Connector c = getInputConnectors().get(0); 
     double x = circle.getCenterX(); 
     double y = circle.getCenterY(); 
     line.setEndX(x + newValue.doubleValue()); 
    } 
}); 

回答

1

使用綁定:

l.endXProperty().bind(g.translateXProperty().add(c.centerXProperty())); 
    l.endYProperty().bind(g.translateYProperty().add(c.centerYProperty())); 

P.S:你的方式可以工作太,但請注意,你應該有x和y屬性的聽衆。

+0

謝謝你,現在就開始工作。綁定比我所嘗試的方法更清潔和簡單(我有X和Y的聽衆,他們幾乎相同,所以我只包含一個)。 – wobblycogs

+0

我看到:)不確定那麼,爲什麼聽衆的方法沒有奏效 –