我正在尝试创建一个组件,该组件在 Line 的父级上注册一个侦听器,并且当它更改时,它会在父级 Line 上添加/删除一个矩形。
你可以看到下面的代码。基本上我有2个按钮
- 添加 > 将行添加到 demoPane
- Remove > 从 demoPane 中删除该行
正如我已经解释的那样,我还在在线父母上注册了一个听众。
当我单击添加按钮时,一切正常...添加了线条,随后也添加了矩形。
当我按下删除线从 demoPane 中删除但在删除矩形时,它会引发以下异常:
-Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Children: duplicate children added: parent = AnchorPane[id=demoPane]
at javafx.scene.Parent$2.onProposedChange(Unknown Source)
at com.sun.javafx.collections.VetoableListDecorator.remove(Unknown Source)
at demo.Delete.lambda$2(Delete.java:63)
这发生在第 63 行,我从 demoPane 中删除了矩形
private static void mountDemo(AnchorPane demoPane) {
Button buttonAdd = new Button("Add");
Button buttonRemove = new Button("Remove");
Line line = new Line(100, 100, 400, 100);
Rectangle rectangle = new Rectangle(20, 20);
demoPane.getChildren().add(buttonAdd);
demoPane.getChildren().add(buttonRemove);
buttonAdd.setOnMouseClicked((event)->demoPane.getChildren().add(line));
buttonRemove.setOnMouseClicked((event)->demoPane.getChildren().remove(line));
line.parentProperty().addListener((observable, oldParent, newParent)->{
if(newParent != null)
((Pane)newParent).getChildren().add(rectangle);
else
((Pane)oldParent).getChildren().remove(rectangle);
});
}
有人可以帮我吗?我究竟做错了什么?