2012-11-26 28 views
2

請看下面的代碼:的JavaFX的getChildren()列出行爲

public static void main(String[] args) { 
     Group group1 = new Group(); 
     Group group2 = new Group(); 

     Label label = new Label("test"); 

     group1.getChildren().add(label); 
     group2.getChildren().add(label); 

     System.out.println("Size group1: " +group1.getChildren().size()); 
     System.out.println("Size group2: " +group2.getChildren().size()); 
    } 

如果標籤被添加到組2就自動從1組中刪除。有誰知道這是爲什麼?

到現在爲止,我不需要額外的功能,例如並且使用一個簡單的ArrayList來存儲對標籤對象的引用。

回答

5

Node documentation

可以最多一次在場景圖中的任何地方發生的節點。 具體來說,一個節點必須在以下所有 中出現不超過一次:作爲場景的根節點,子節點ObservableList爲 父節點,或作爲節點的剪輯。

...

如果程序增加了一個子節點到父(包括集團,地區, 等),並在該節點已經是一個不同父母的孩子或 根場景中,節點自動(並且默默地)從其前母公司 中移除。

...

是可能的重新排列場景圖的結構中,對於 例如,從一個位置在場景圖中移動一個子樹 另一個。爲了做到這一點,通常會在將子樹插入新位置之前從舊位置刪除子樹 。 但是,如果應用程序沒有明確刪除它,則子樹將被自動刪除,如上所述 。

Node添加到Scene,JavaFX的系統集和在所述場景圖該位置管理專用於該節點的屬性。一個例子是由父佈局管理器確定的節點的位置,它是約束條件。另一個是從父節點繼承的CSS樣式集。根據節點在場景圖中的位置,這兩種數據可能會有所不同。

如果系統允許您將同一個節點放置在場景圖中的另一個位置,它將覆蓋爲第一個位置確定的系統計算屬性。一切都會變得非常混亂 - 導致程序難以推理並且存在微妙的錯誤。

相關問題