如何在FXML控制器中获取父窗口?

nvc*_*nvn 21 javafx-2 fxml

例如,我想在单击按钮时打开DirectoryChooser:

<VBox fx:controller="com.foo.MyController"
    xmlns:fx="http://javafx.com/fxml">
    <children>
        <Button text="Click Me!" onAction="#handleButtonAction"/>
    </children>
</VBox>
Run Code Online (Sandbox Code Playgroud)

而Controller类:

package com.foo;

public class MyController {
    public void handleButtonAction(ActionEvent event) {
        DirectoryChooser dc = new DirectoryChooser();
        File folder = dc.showDialog(null);//I want to put the WIndows here.
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将主窗口放到ShowDialog中,以便它被阻止但我该如何访问它?

Ser*_*nev 43

您可以询问任何节点Scene然后再打电话Scene#getWindow().

例如 ((Node)event.getTarget()).getScene().getWindow()

  • @zygimantus`((MenuItem)event.getTarget()).getParentPopup().getOwnerWindow()` (6认同)
  • 这可以为 MenuItem 完成吗?您的代码为我提供了此错误:`Caused by: java.lang.ClassCastException: javafx.scene.control.MenuItem cannot be cast to javafx.scene.Node` (4认同)