Gun*_*don 18 java javafx javafx-2 fxml
我将.fxml-Files用于我的应用程序的视图层.每个fxml都附有一个控制器
<AnchorPane fx:controller="movielistjavafx.view.MainWindowController">
Run Code Online (Sandbox Code Playgroud)
我们假设我有一个mainFrame和它的控制器.mainFrame.fxml加载在start(Stage)-method中.
现在你要显示一个附加到Stage/Window/Whatever的fileChooser.
为此,让fxml-controller知道例如 primaryStage.
有没有办法将它注入控制器,或者FXML在运行时是否知道它属于哪个场景和阶段?
我只有想法是将primaryStage存储在某些静态上下文中,但这似乎不是一种对我这样做的方法.
Ulu*_*Biy 33
不是FXML,而是FXML(或其控制器)中的节点(控件)知道它们在运行时属于哪个场景和阶段(在添加到场景之后).
在控制器类中,
...
@FXML private Label label;
...
// in some method block
Stage stageTheLabelBelongs = (Stage) label.getScene().getWindow();
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用CDI事件来获得主要阶段.查看由CDI和JBoss Weld提供支持的博客文章FXML和JavaFX.
强大的解决方案(可以用作代码段):接受一个事件,然后获得触发该事件的控制权.使用该控件来获取舞台:
@FXML
private void browseDirectory(ActionEvent event) {
Stage stage = Stage.class.cast(Control.class.cast(event.getSource()).getScene().getWindow());
DirectoryChooser directoryChooser = new DirectoryChooser();
File selectedDirectory = directoryChooser.showDialog(stage);
System.out.println(selectedDirectory.getAbsolutePath());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31222 次 |
| 最近记录: |