[英]How to clone a node in the scene graph in JavaFX?
我有一個prefHeight = 70 //沒有prefWidth或任何寬度的HBox ...
我也有一個帶有prefWidth = 50的窗格//沒有prefHeight或任何高度...
我只想使用某個循環將窗格的多個實例添加到HBox。
當我在循環主體中添加(pane)時,出現以下錯誤。
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Children: duplicate children added: parent = HBox[id=myHBox]
我需要找到克隆窗格的方法(因為它按值傳遞)。 有人可以幫我嗎? (因為沒有使用父級設置/計算窗格的prefHeight,所以拍攝快照對我不起作用)
發生此錯誤是因為您試圖將一個Node
的相同實例添加到另一個Node
。 如果您從下面的示例中刪除評論,您也會收到該錯誤。 另一方面,循環會正常工作,因為在每次迭代中都會創建一個新的Button
實例。
@Override
public void start(Stage stage) {
FlowPane root = new FlowPane();
// Results in error
// Button b1 = new Button("Button");
// root.getChildren().addAll(b1,b1);
for (int i = 0; i < 4; i++) {
Button b = new Button("Button");
root.getChildren().add(b);
}
Scene scene = new Scene(root, 50, 100);
stage.setScene(scene);
stage.show();
}
您的窗格可能更復雜,但是您必須使用相同的原理。 將負責創建窗格的代碼放在單獨的方法getPane()
等中,並在循環中使用它來獲取新實例。
JavaFX並沒有提供現成的解決方案來制作Node
的深層副本。 如果您的Node
是靜態創建的,則可以:
如果您的Node
具有由用戶動態創建或修改的屬性或子級,則情況會變得更加糟糕。 在這種情況下,您必須檢查其元素並自行重新創建它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.