【发布时间】:2016-07-06 14:00:29
【问题描述】:
我有一个通过 FXML 声明的 TabPane。我正在尝试动态添加新标签。
我为这些标签创建了一个单独的类:
public class DetailTab extends Tab {
我的 Controller.java 正在生成新的 DetailTab 并将它们添加到我的 TabPane:
detailsPane.getTabs().add(new DetailTab(title));
在 DetailTab.java 中,我尝试使用不同的 FXML 文件填充新选项卡的内容,具体取决于传递给 DetailTab 构造函数的字符串。
try {
System.out.println("Trying fxml");
this.setContent(FXMLLoader.load(getClass().getResource("tabUserComments.fxml")));
} catch (Exception e) {
e.printStackTrace();
}
这会创建一个 NullPointerException。 tabUserComments.fxml 文件与 DetailTab.java 一起位于项目的根目录中。
最好的方法是什么?我什至可以从 DetailTab 本身将内容设置为 FXML 文件吗?如果可能的话,我想避免使用控制器来设置选项卡的内容。
【问题讨论】:
-
您似乎想要局部视图,我认为 javafx 不支持,除了当您使用相同的后备控制器加载不同的 fxml 文件时,将创建控制器的新实例,它们不会共享相同的实例/状态
-
如有必要,我很乐意为每个单独的选项卡的 fxml 创建一个单独的控制器。我确实注意到如果我为 tabUserComments.fxml 分配不同的控制器,异常就会清除。但是,现在我看到该选项卡仍未由新的 fxml 数据填充。
-
那么有没有更好的方法来使用单独的 fxml 文件填充选项卡?我计划有很多选项卡,并且更愿意单独设计它们,而不是让我的 DetailTab 类膨胀,每个选项卡都有所有不同的代码。
-
不完全相关,但你可以看到here
-
查看 FXML 文档简介的 Custom components 部分。
标签: java intellij-idea javafx fxml