【发布时间】:2018-06-30 21:07:36
【问题描述】:
我在 fxml 文件的 VBox 中有一个带有标签、文本字段和组合框的窗格。我们称之为 tempPane。 在同一阶段,我有一个按钮。 按下按钮后,我需要向 VBox 添加与 tempPane 完全相同的窗格。也就是说,向 VBOX 动态添加一个窗格。 我可以向 VBox 添加单独的控件,例如按钮或标签或文本字段,但尝试添加此新窗格时无法获得相同的结果。
部分控制器代码:
@FXML
private Pane tempPane;
@FXML
private Button btnAddNewPane;;
@FXML
private VBox vBox;
@FXML
void addNewPane(ActionEvent event) {
...
Pane newPane = new Pane();
newPane = tempPane;
// New ID is set to the newPane, this String (NewID) should be
//different each time button is pressed
newPane.setId(newID);
vBox.getChildren().add(newPane);
...
}
我得到的错误是:
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Children: duplicate children added: parent = VBox[id=filterBox]
at javafx.graphics/javafx.scene.Parent$3.onProposedChange(Parent.java:580)
at javafx.base/com.sun.javafx.collections.VetoableListDecorator.add(VetoableListDecorator.java:206)
at com.sener.dbgui.controller.SearchController$1.run(SearchController.java:53)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
at java.base/java.lang.Thread.run(Thread.java:844)
那么,为什么我会收到这个重复的子级错误?我在将 newPane ID 添加到 VBox 之前更改它。
【问题讨论】:
标签: javafx duplicates children pane vbox