使用自己的 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.

一起位于项目的根目录中

IntelliJ project structure

最好的方法是什么?我什至可以将内容设置为 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 文件设计每个选项卡。