使用自己的FXML创建新标签

时间:2016-07-06 14:00:30

标签: java intellij-idea javafx fxml

我有一个通过FXML声明的TabPane。我正在尝试动态添加新标签。

我为这些标签创建了一个单独的类:

public class DetailTab extends Tab {

我的Controller.java正在生成新的DetailTabs并将它们添加到我的TabPane:

detailsPane.getTabs().add(new DetailTab(title));

在DetailTab.java中,我试图使用不同的FXML文件填充新选项卡的内容,具体取决于传递给DetailTab构造函数的String。

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文件吗?如果可能的话,我想避免使用Controller来设置选项卡的内容。

1 个答案:

答案 0 :(得分:0)

我可以通过在DetailsTab.java类中使用以下代码来获得部分解决方案:

try {
                FXMLLoader loader = new FXMLLoader(getClass().getResource("tabUserComments.fxml"));
                loader.setController(this);
                this.setContent(loader.load());

            } catch (Exception e) {
                e.printStackTrace();
            }

这仍然会导致问题,因为我无法访问tabUserComments.fxml控件中包含的数据。然而,我会将此标记为已回答,因为数据传递完全是另一个问题;这确实允许使用单独的FXML文件设计每个选项卡。