按代码关闭fxml窗口,javafx

alf*_*923 48 java user-interface javafx fxml

我需要通过控制器中的代码关闭当前的fxml窗口

我知道stage.close()或stage.hide()在fx中执行此操作

如何在fxml中实现这个?我试过了

private void on_btnClose_clicked(ActionEvent actionEvent) {
        Parent root = FXMLLoader.load(getClass().getResource("currentWindow.fxml"));    
        Scene scene = new Scene(root);

        Stage stage = new Stage();            
        stage.setScene(scene);
        stage.show();
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用!

所有帮助将不胜感激.谢谢!

a.b*_*a.b 135

  1. 给你的关闭按钮一个fx:id,如果你还没有: <Button fx:id="closeButton" onAction="#closeButtonAction">
  2. 在您的控制器类中:

    @FXML private javafx.scene.control.Button closeButton;
    
    @FXML
    private void closeButtonAction(){
        // get a handle to the stage
        Stage stage = (Stage) closeButton.getScene().getWindow();
        // do what you have to do
        stage.close();
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 这种方法对我不起作用.我收到一个`NullPointerException` (3认同)
  • @ZinMinn如果你想关闭应用程序,只需调用Platform.exit().关闭阶段与关闭应用程序不同(您可以有多个阶段). (3认同)

cod*_*leb 19

如果您有一个扩展的窗口,javafx.application.Application;您可以使用以下方法.(这将关闭整个应用程序,而不仅仅是窗口.我误解了OP,感谢评论者指出它).

Platform.exit();
Run Code Online (Sandbox Code Playgroud)

例:

public class MainGUI extends Application {
.........

Button exitButton = new Button("Exit");
exitButton.setOnAction(new ExitButtonListener());
.........

public class ExitButtonListener implements EventHandler<ActionEvent> {

  @Override
  public void handle(ActionEvent arg0) {
    Platform.exit();
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑Java 8之美:

 public class MainGUI extends Application {
    .........

    Button exitButton = new Button("Exit");
    exitButton.setOnAction(actionEvent -> Platform.exit());
 }
Run Code Online (Sandbox Code Playgroud)

  • `Platform.exit()`将关闭所有阶段并击落整个应用程序.这可能不是所希望的. (4认同)
  • 最初的海报是在询问如何关闭窗口(舞台),而不是应用程序。 (4认同)

Aus*_*n D 8

NullPointerException从接受的答案中收到一个后,按照以下方式实现了这一点.

在我的FXML中:

<Button onMouseClicked="#onMouseClickedCancelBtn" text="Cancel">
Run Code Online (Sandbox Code Playgroud)

在我Controller班上:

@FXML public void onMouseClickedCancelBtn(InputEvent e) {
    final Node source = (Node) e.getSource();
    final Stage stage = (Stage) source.getScene().getWindow();
    stage.close();
}
Run Code Online (Sandbox Code Playgroud)