如何使用不同的信息多次添加同一节点? (JavaFX的)

时间:2015-07-31 22:07:30

标签: java javafx

我正在制作一个程序,当我上传其中一个系列的新剧集时通知我,我有一个内置的通知中心,用于存储上传内容。 我是如何做到这一点的,基本上是制作一个VBox,NotificationPanel,然后有一个基本的东西,如关闭按钮的nLayout,每次我上传一个新剧集时,为每个系列添加不同名称和文字的nLayout。但我已经看到这不可能",因为我收到了这个错误:

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Children: duplicate children added: parent = VBox@2168def7

任何人都知道如何让这个工作?

3 个答案:

答案 0 :(得分:0)

您无法多次添加同一节点。 只需为每个通知创建NotificationPanel的新实例

答案 1 :(得分:0)

正如评论所说,你不能在你的VBox中多次添加同一个类的实例。

每当你抓住你的活动(上传剧集),你可以做的是:

  1. 检索您的VBox
  2. 创建JavaFX容器的新实例(例如:HBox,TextField,TextArea,TreeView等...)
  3. 使用您要显示的信息填充此实例
  4. 在VBox中添加此实例
  5. 顺便说一句,通过这样做,您不会使用JavaFX的花哨模型 - 视图绑定机制。更好的解决方案是拥有一个带有ObservableList的模型类,您可以在其中推送一个对象的实例,该对象包含上传的剧集的信息, 并使用自定义CellFactory将此ObservableList绑定到ListView,以便按照您希望的方式构建List的单元格。

    您可以在此处找到有关绑定机制的信息:http://docs.oracle.com/javafx/2/binding/jfxpub-binding.htm

    您可以在此处找到有关ListView和自定义CellFactory的信息:http://docs.oracle.com/javafx/2/ui_controls/list-view.htm

    希望有所帮助:)

答案 2 :(得分:0)

如果我找到你,你应该创建自己的自定义节点。例如

public class EpisodeBox extends Vbox {
     public EpisodeBox(String name){
           getChildren().add(new Label(name));
           getChildren().add(new Button("Close"));
           // ... etc.
     }
}

正如Kwoinkwoin所述,您可以在每个活动中创建一个新的EpisodeBox并将其添加到您的Panel。