JavaFX打开新窗口

Meh*_*rov 35 javafx-2

查看此代码,它们显示了一种在登录后显示新窗口的方法.当用户名和密码正确时,它会打开新对话框.我想要一个按钮单击打开新对话框,而不检查用户名和密码.

blo*_*p3r 82

如果你只是想要一个按钮来打开一个新窗口,那么这样的工作:

btnOpenNewWindow.setOnAction(new EventHandler<ActionEvent>() {
    public void handle(ActionEvent event) {
        Parent root;
        try {
            root = FXMLLoader.load(getClass().getClassLoader().getResource("path/to/other/view.fxml"), resources);
            Stage stage = new Stage();
            stage.setTitle("My New Stage Title");
            stage.setScene(new Scene(root, 450, 450));
            stage.show();
            // Hide this current window (if this is what you want)
            ((Node)(event.getSource())).getScene().getWindow().hide();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 就是这样.`隐藏它或'关闭它'将删除它.只需删除对此窗口/阶段的任何引用(这样您就可以使用任何其他java对象). (4认同)
  • 有没有办法"删除"现有的窗口而不是隐藏它? (2认同)
  • @Line 在这个例子中并不是真的。但是假设您想在 try 块之外使用“root”做其他事情,那么它会很有用。 (2认同)

Ski*_*ner 15

我在JavaFX应用程序中使用以下方法.

newWindowButton.setOnMouseClicked((event) -> {
    try {
        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setLocation(getClass().getResource("NewWindow.fxml"));
        /* 
         * if "fx:controller" is not set in fxml
         * fxmlLoader.setController(NewWindowController);
         */
        Scene scene = new Scene(fxmlLoader.load(), 600, 400);
        Stage stage = new Stage();
        stage.setTitle("New Window");
        stage.setScene(scene);
        stage.show();
    } catch (IOException e) {
        Logger logger = Logger.getLogger(getClass().getName());
        logger.log(Level.SEVERE, "Failed to create new Window.", e);
    }
});
Run Code Online (Sandbox Code Playgroud)