如何获取当前加载的 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() 方法来检查它是从哪个文件加载的。

但是,对于您的潜在问题,可能有更好的解决方案,不需要检查特定文件名。