单击按钮以显示新阶段时如何关闭当前阶段而不使新阶段的组件处于非活动状态

时间:2017-08-26 14:09:09

标签: java events javafx stage

我们说我有一个Stage A,其中包含两个Buttonoui Button会打开一个新的Stage Bnon关闭A。在点击A oui并打开Button后,我尝试做的就是关闭B。我正在使用showAndWait()打开B,然后我尝试执行A.close(),当我尝试运行showAndWait()时显然未能A.close()开头在showAndWait() A关闭之前,但所有B控件(包括ButtonText Field}都处于非活动状态,是否有解决方法?

以下是点击oui以便打开B Stage时执行的代码:

public class AController implements Initializable {

    @FXML
    private Button oui;
    @FXML
    private Button non;

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO

    }

    @FXML
    private void ouiBtnClick(ActionEvent event) throws IOException {

    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("B.fxml"));

    Stage stage = new Stage();
    VBox mainPane = (VBox) loader.load();
        Scene scene = new Scene(mainPane);

    stage.setScene(scene);
    stage.initStyle(StageStyle.DECORATED);
    stage.setResizable(false);


        stage.showAndWait();
        nonBtnClick(); // method that close `A`


    }

    @FXML
    private void nonBtnClick() {
        Stage s = (Stage) non.getScene().getWindow();
        s.close();
    }

}

2 个答案:

答案 0 :(得分:1)

使用show代替showAndWait就可以了。感谢Sedrick Jefferson的评论。

答案 1 :(得分:0)

根据我的理解,你需要关闭现阶段并开启新阶段。如果你需要关闭A阶段,我们可以说当前阶段并开启新阶段,我们可以说下一阶段,你需要获得你的活动窗口并关闭它,我的意思是 clickEvent

的窗口
 @FXML
private void ouiBtnClick(ActionEvent event) throws IOException {

FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("B.fxml"));

Stage stage = new Stage();
VBox mainPane = (VBox) loader.load();
    Scene scene = new Scene(mainPane);

stage.setScene(scene);
stage.initStyle(StageStyle.DECORATED);
stage.setResizable(false);


    stage.show();
    nonBtnClick(event);


}

@FXML
private void nonBtnClick(ActionEvent event) {
  ((Node) event.getSource()).getScene().getWindow().hide();//close currentstage
}