私は JavaFX アプリケーションに取り組んでいます。私のシナリオでは、2 つのオプションOK
とCancel
. ユーザーが入力したパスワードを返しました。
パスワードダイアログを表示する私のクラスは -
public static String showPasswordDialog(String title, String message, Stage parentStage, double w, double h) {
try {
Stage stage = new Stage();
PasswordDialogController controller = (PasswordDialogController) Utility.replaceScene("Password.fxml", stage);
passwordDialogController.init(stage, message, "/images/password.png");
if (parentStage != null) {
stage.initOwner(parentStage);
}
stage.initModality(Modality.WINDOW_MODAL);
stage.initStyle(StageStyle.UTILITY);
stage.setResizable(false);
stage.setWidth(w);
stage.setHeight(h);
stage.showAndWait();
return controller.getPassword();
} catch (Exception ex) {
return null;
}
パスワード プロンプトを表示するコードは以下のとおりです。実際には、このプロンプトは他の UI の上に表示されるため、これを で囲む必要があります。Platform.runlater()
そうしないと、 がスローされNot on FX application thread
ます。正しいパスワードを取得するまで、このパスワード プロンプトを表示する必要があります。runlater 内に表示するパスワードを含めた場合、パスワードの値を取得するにはどうすればよいですか。
他に良い方法はありますか?
final String sPassword = null;
do {
Platform.runLater(new Runnable() {
@Override
public void run() {
sPassword = JavaFXDialog.showPasswordDialog(sTaskName + "Password", "Enter the password:", parentStage, 400.0, 160.0);
}
});
if (sPassword == null) {
System.out.println("Entering password cancelled.");
throw new Exception("Cancel");
}
} while (sPassword.equalsIgnoreCase(""));