我之前曾问过这个问题,但没有任何回应,所以让我再试一次它的措词以及我尝试过的内容。
当我单击按钮时,我想创建一个类的新实例:
DataCardController specCapture = new DataCardController("NEW CAPTURE");
现在在我的DataCardController中,我有一些要关联的属性。目前,为了简化起见,我还没有通过它们,我只是在上面的代码中附加了一个名为“ NEW CAPTURE”的字符串。 我有一个名为dataCard.fxml的fxml文件,它是一个带有几个标签的anchorPane。标签之一应该代表此“新捕获”字符串。
在DataCardController类中,我有:
public DataCardController(String spectrumName) throws IOException{
name = spectrumName;
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("dataCard.fxml"));
loader.setLocation(getClass().getResource("dataCard.fxml"));
loader.setController(this);
loader.setRoot(this.data);
Pane newpane = null;
try {
newpane = loader.load();
} catch (IOException e) {
e.printStackTrace();
}
}
我想做的是,当我保存我的dataCardController实例时,它将运行此代码并初始化fxml文件。然后,我希望将其加载到Box的初始视图中。所以我尝试添加多余的行:
MainPage.spectrumListVBox.getChildren().add(newpane);
但是,这总是在最后一行抛出错误。它返回一个空值错误。我看不到如何显示此内容。我想在一个视图框中查看此fxml的多个实例,其想法是,当我与单个fxml进行交互时,可以在代码的其他地方引用它表示的数据。
我什至以正确的方式来对待吗?如果将fxml直接加载到MainPage Controller中的窗格中,我已经设法查看了它:
Pane newLoadedPane = FXMLLoader.load(getClass().getResource("dataCard.fxml"));
spectrumListVBox.getChildren().add(newLoadedPane);
但是问题是,如果我只是加载fxml,则没有分配控制器。如果我在fxml文件中声明了控制器,它将加载控制器,但是我无法将不同的变量分配给不同的实例。
请帮助!
答案 0 :(得分:0)
要正确地加载资源,通常不需要调用getClassLoader()
。只需调用getClass().getResource("/dataCard.fxml");
(如果它位于资源文件夹中,则可能需要在fxml文件前面的/
。
最后,您的代码行将如下所示:
FXMLLoader loader = new FXMLLoader(getClass().getResource("/dataCard.fxml"));
还要检查以确保“ dataCard.fxml”位于“ / src / main / resources”下。