Вы проверяете !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();
}
}
Вы также можете сохранить ссылку на загруженный контроллер, в зависимости от ваших потребностей.