发生此错误是因为您试图将a的 相同
实例添加
Node到另一个中
Node。如果您从下面的示例中删除评论,您也会收到该错误。另一方面,循环会正常工作,因为在每次迭代中
Button都会创建一个新实例。
@Overridepublic 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是静态创建的,则可以:
- 将负责创建它的代码放在单独的方法中,并在每次需要获取窗格的新实例时在整个应用程序中使用它。
- 在FXML文件中定义它,并在每次需要新实例时加载它。
如果您
Node拥有由用户动态创建或修改的属性或子代,则情况会变得更加糟糕。在这种情况下,您必须检查其元素并自行重新创建它们。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)