使用自己的 FXML 创建新选项卡
Create New Tab With its own FXML
我有一个通过 FXML 声明的 TabPane。我正在尝试动态添加新标签。
我为这些选项卡创建了单独的 class:
public class DetailTab extends Tab {
我的 Controller.java 正在生成新的 DetailTabs 并将它们添加到我的 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 文件吗?如果可能,我想避免使用控制器来设置选项卡的内容。
我能够通过在 DetailsTab.java class 中使用以下代码获得部分解决方案:
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("tabUserComments.fxml"));
loader.setController(this);
this.setContent(loader.load());
} catch (Exception e) {
e.printStackTrace();
}
这仍然会导致问题,因为我无法访问 tabUserComments.fxml 控件中包含的数据。但是,我会将其标记为已回答,因为数据传递完全是另一个问题;这确实允许使用单独的 FXML 文件设计每个选项卡。
我有一个通过 FXML 声明的 TabPane。我正在尝试动态添加新标签。
我为这些选项卡创建了单独的 class:
public class DetailTab extends Tab {
我的 Controller.java 正在生成新的 DetailTabs 并将它们添加到我的 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 文件吗?如果可能,我想避免使用控制器来设置选项卡的内容。
我能够通过在 DetailsTab.java class 中使用以下代码获得部分解决方案:
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("tabUserComments.fxml"));
loader.setController(this);
this.setContent(loader.load());
} catch (Exception e) {
e.printStackTrace();
}
这仍然会导致问题,因为我无法访问 tabUserComments.fxml 控件中包含的数据。但是,我会将其标记为已回答,因为数据传递完全是另一个问题;这确实允许使用单独的 FXML 文件设计每个选项卡。