私はJavaFX API内にバグがありましたが、わかりません。次のスニペットは正常に動作しますが、alert.show();
またはalert.showAndWait();
を追加すると、3つの異なるアラートダイアログが開きます。ここで、コードは次のとおりです。ここでJavaFX Alertが複数の警告を開くのを止める方法?
private void datePickerOnHiding(JFXDatePicker datePicker, JFXCheckBox chkBox) {
int counter = 0;
boolean entered = false;
if (datePicker.getValue().isBefore(LocalDate.now()) ||datePicker.getValue().isEqual(LocalDate.now())) {
if ((eventHiddenCounter % 2) == 0) {
System.out.println("HAHA");//Testing
txtfMessage.setVisible(true);
txtfMessage.setText("Please select a future date.");
Alert alert = new Alert(AlertType.WARNING, "Please select a future date.");
alert.showAndWait();
datePicker.setValue(null);
counter ++;
entered = true;
}
} else {
txtfMessage.setVisible(false);
chkBox.setSelected(true);
}
//Testing
System.out.println("" + eventHiddenCounter + ": " + ((eventHiddenCounter % 2) == 0));
System.out.println("COUNTER: " + counter + "\nENTERED: " + entered);
entered = false;
eventHiddenCounter ++;
}
がコメントアウトalert.showAndWait
との出力に含まです:
HAHA
0:真
COUNTER:1
ENTERED:真
ここでは、含まれている(バグ):
HAHA
HAHA
HAHA
0:
真 COUNTER:入力された1
:真
1:
偽 COUNTER:入力された1
:真
2:真
COUNTER: 1
ENTERED:true
私はかなり困惑しています - なぜこれが起こっているのですか?それを回避するには何ができますか?
ちなみに、目標は、現在の日付と同じかそれより前の日付をユーザーが選択しないようにすることです。
これは、日付ピッカーに限定されないことを確認できます。私は、閉鎖イベント中にアラートを使用するときに同じ問題を抱えています。今回は、Alertをドラッグして、その背後にある別の権利を見つけました。不思議なことに、私はこれがAPIバグだと確信しています。 – PujitM
私はその声明を取り消すでしょう。 終了イベントリスナーでアラートダイアログが閉じられた後、フォーカスが移動しました。私はフォーカスが失われたリスナーのために非常に似たような対話をしているので、彼らは同じだと思いました。 閉じるリスナーアラートのアラートタイプを変更した後に間違いを認識しました。 – PujitM
@PujitM私は実際にあなたが話していたものをかなり失ってしまった。私が知る限り、 'onHiding'イベントの代わりに' onHidden'イベントを使用すると、おそらく問題はなくなります。これは、あなたが 'Alert'をブロックしていて、その警告が親ウィンドウが見えるようにしようとしているからです。これはおそらく、コンボボックスがまだ隠れている間に別のリクエストを隠すことを引き起こしたでしょう。 – Jai