关闭 fxml 窗口 by code, javafx

2022-08-31 14:36:11

我需要通过控制器中的代码关闭当前的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();
}

但它不起作用!

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


答案 1
  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();
    }
    

答案 2

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

Platform.exit();

例:

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();
  }
}

编辑Java 8的美丽:

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

    Button exitButton = new Button("Exit");
    exitButton.setOnAction(actionEvent -> Platform.exit());
 }

推荐