假设我有一个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();
}
}
最佳答案
使用show
代替showAndWait
可以解决问题。感谢Sedrick Jefferson的评论。