我们说我有一个Stage
A
,其中包含两个Button
,oui
Button
会打开一个新的Stage
B
,non
关闭A
。在点击A
oui
并打开Button
后,我尝试做的就是关闭B
。我正在使用showAndWait()
打开B
,然后我尝试执行A.close()
,当我尝试运行showAndWait()
时显然未能A.close()
开头在showAndWait()
A
关闭之前,但所有B
控件(包括Button
和Text 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();
}
}
答案 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
}