1

我有BorderPane,它分为 3AnchorPane秒,它们不时变化。是否可以获得.fxml像“MainScreen.fxml”这样的完整文件名?我可以得到AnchorPaneSystem.out.println(getRootLayout().getCenter());但我不知道如何得到它的名字。

只是我需要从主类调用位于我的一个控制器中的方法。但我只想在该控制器的某些 fxml 文件当前正在使用时才调用它。

简而言之:如果 MainScreen.fxml 正在使用中,我将其称为 MainScreenController 的方法,如果没有,则不会。

4

1 回答 1

1

根据您的问题,我假设每个 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()向你的控制器添加一个方法来检查它是从哪个文件加载的。

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

于 2015-05-11T15:15:30.600 回答