我试图通过单击一个按钮来打开一个舞台,但是在打开它之前,我想检查该舞台是否已经打开,然后将打开的舞台弹出到最前面,而不是打开一个新的舞台(没有多重打开同一阶段)。
@FXML
private void btn_Validate(ActionEvent event) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/scontrols/students/StudentManagement.fxml"));
Parent root = (Parent) loader.load();
StudentManagementController sendTo = loader.getController();
sendTo.receiveFromCamera(txtPictureName.getText());
Stage stage = new Stage();
stage.setScene(new Scene(root));
if(!stage.isShowing())
{
stage.show();}
} catch (IOException ex) {
Logger.getLogger(WebCamController.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 0 :(得分:0)
您正在检查新创建的 !stage.isShowing()
上的Stage
。这将永远不会做您想要的。您需要保留对另一个Stage
的引用,并继续使用该引用。
public class Controller {
private Stage otherStage;
@FXML
private void btn_Validate(ActionEvent event) {
if (otherStage == null) {
Parent root = ...;
otherStage = new Stage();
otherStage.setScene(new Scene(root));
otherStage.show();
} else if (otherStage.isShowing()) {
otherStage.toFront();
} else {
otherStage.show();
}
}
如果Stage
在关闭时不希望保留在内存中,则可以稍作改动。
public class Controller {
private Stage otherStage;
@FXML
private void btn_Validate(ActionEvent event) {
if (otherStage == null) {
Parent root = ...;
otherStage = new Stage();
otherStage.setOnHiding(we -> otherStage = null);
otherStage.setScene(new Scene(root));
otherStage.show();
} else {
otherStage.toFront();
}
}
根据您的需要,您可能还希望存储对已加载控制器的引用。