如何获取当前加载的 fxml 文件的名称?
How to get name of currently loaded fxml file?
我有BorderPane
,分为3个AnchorPane
不时变化。是否可以获得完整的 .fxml
文件名,如 'MainScreen.fxml'?我可以用 System.out.println(getRootLayout().getCenter());
得到 AnchorPane
,但我不知道如何得到它的名字。
只是我需要从主 class 调用位于我的一个控制器中的方法。但我只想在当前正在使用该控制器的某些 fxml 文件时调用它。
简而言之:如果MainScreen.fxml正在使用,我会调用它的MainScreenController的方法,如果没有,那么我不会。
根据你的问题,我假设每个 AnchorPane 都是从不同的 FXML 文件加载的,并且你在你的应用程序中保留了对其控制器的引用。
一个简单的解决方案是将文件信息放入控制器。
您可以手动执行此操作...
URL location = getClass().getResource("MainScreen.fxml");
FXMLLoader fxmlLoader = new FXMLLoader(location);
// ... more fxmlLoader configuration ...
fxmlLoader.load();
// assuming your own Controller class has a setLocation method
Controller c = (Controller) fxmlLoader.getController();
c.setLocation(location);
...或依赖 FXMLLoader。
// your own Controller class
public class Controller
{
// the URL will be automatically injected by the FXMLLoader
// careful: the name of the field must be 'location'
@FXML
private URL location;
// ...
}
然后您可以简单地向您的控制器添加一个 getLocation()
方法来检查它是从哪个文件加载的。
但是,对于您的潜在问题,可能有更好的解决方案,不需要检查特定文件名。
我有BorderPane
,分为3个AnchorPane
不时变化。是否可以获得完整的 .fxml
文件名,如 'MainScreen.fxml'?我可以用 System.out.println(getRootLayout().getCenter());
得到 AnchorPane
,但我不知道如何得到它的名字。
只是我需要从主 class 调用位于我的一个控制器中的方法。但我只想在当前正在使用该控制器的某些 fxml 文件时调用它。
简而言之:如果MainScreen.fxml正在使用,我会调用它的MainScreenController的方法,如果没有,那么我不会。
根据你的问题,我假设每个 AnchorPane 都是从不同的 FXML 文件加载的,并且你在你的应用程序中保留了对其控制器的引用。
一个简单的解决方案是将文件信息放入控制器。
您可以手动执行此操作...
URL location = getClass().getResource("MainScreen.fxml");
FXMLLoader fxmlLoader = new FXMLLoader(location);
// ... more fxmlLoader configuration ...
fxmlLoader.load();
// assuming your own Controller class has a setLocation method
Controller c = (Controller) fxmlLoader.getController();
c.setLocation(location);
...或依赖 FXMLLoader。
// your own Controller class
public class Controller
{
// the URL will be automatically injected by the FXMLLoader
// careful: the name of the field must be 'location'
@FXML
private URL location;
// ...
}
然后您可以简单地向您的控制器添加一个 getLocation()
方法来检查它是从哪个文件加载的。
但是,对于您的潜在问题,可能有更好的解决方案,不需要检查特定文件名。