Ich glaube, ich habe einen Fehler in der JavaFX API gefunden, aber ich bin mir nicht sicher. Das folgende Snippet verhält sich also normal, aber wenn ich ein alert.show();
oder alert.showAndWait();
hinzufüge, öffnet das Programm drei verschiedene Alarmdialoge. Hier ist der Code:Wie kann JavaFX Alert beim Öffnen mehrerer Alerts gestoppt werden?
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 ++;
}
Hier ist der Ausgang mit dem alert.showAndWait
auf Kommentar:
HAHA
0: true
COUNTER: 1
ENTERED: true
es hier ist mit enthalten (der Fehler):
HAHA
HAHA
HAHA
0: true
COUNTER: 1
ENTERED: true
1: false
COUNTER: 1
ENTERED: true
2: true
COUNTER: 1
EINGEGEBEN: wahr
Ich bin ziemlich perplex - warum passiert das und was kann ich tun, um es zu umgehen?
Übrigens ist es das Ziel, zu verhindern, dass der Benutzer ein Datum gleich oder vor dem aktuellen Tag auswählt.
Ich kann bestätigen, dass dies nicht auf Datumsauswahl beschränkt ist. Ich habe das gleiche Problem bei der Verwendung von Benachrichtigungen während einer Abschlussveranstaltung. Dieses Mal zog ich die Warnung herum, um ein anderes Recht dahinter zu finden. Neugierig, und ich bin mir ziemlich sicher, dass dies ein API-Bug an diesem Punkt ist. – PujitM
Warten Ich werde diese Aussage aufheben. Es stellt sich heraus, dass sich der Fokus verschoben hat, nachdem der Alert-Dialog im Listener für abschließende Ereignisse geschlossen wurde. Ich habe einen sehr ähnlichen Dialog für einen Fokus-verlorenen Hörer, daher dachte ich, dass sie die gleichen wären. Ich erkannte meinen Fehler nach dem Ändern des AlertType des Schließen Listener Alert. – PujitM
@PujitM Ich bin wirklich ziemlich verloren in dem, worüber du geredet hast. Soweit ich weiß, wäre Ihr Problem wahrscheinlich weg, wenn Sie das Ereignis "onHidden" anstelle des Ereignisses "onHiding" verwenden würden. Dies liegt daran, dass Sie eine blockierende "Warnung" verwendet haben und diese Warnung versucht, sicherzustellen, dass das übergeordnete Fenster sichtbar ist. Dies führte wahrscheinlich dazu, dass die Combobox eine weitere Anfrage zum Verstecken erhielt, während sie sich noch im "Versteck" -Zustand befand. – Jai