Mam obecnie okno dialogowe z czterema polami tekstowymi, z których pobierane jest dane wejściowe. Kiedy wejście nie spełnia moich wymagań, okno dialogowe powinno pozostać otwarte i pokazać komunikat o błędzie. Obecnie mam następujący kod:Wyświetlaj okno dialogowe, gdy sprawdzanie poprawności wejścia zakończy się niepowodzeniem.
dlg.setResultConverter(dialogButton -> {
if (dialogButton == createButtonType) {
ArrayList<String> returnList = getInput();
if (returnList != null) {
return returnList;
}
else {
dlg.showAndWait();
}
}
return null;
});
Optional<ArrayList<String>> result = dlg.showAndWait();
result.ifPresent(customerDetails -> {
//Use the input for something
});
Sposób getInput()
pobiera tekst z pól tekstowych oraz testów go przed niektórymi wymaganiami. Kiedy dane wejściowe mijają, cztery ciągi są umieszczane w ArrayList<String>
. Inaczej metoda zwraca null
. Jak widać, konwerter wyników sprawdza, czy metoda zwróciła null
. Jeśli nie, po prostu zwraca ArrayList<String>
.
Jednak, gdy sprawdzanie poprawności nie powiedzie się, okno dialogowe powinno pozostać otwarte. Działa z dlg.showAndWait()
, ale wadą jest to, że uruchamia błąd: java.lang.IllegalStateException: Stage already visible
. (nadal działa, ale błąd jest inny niż powinien).
Moje pytanie brzmi: czy ktoś wie, jak to zrobić, nie powodując błędu?
. Uwaga: Używam JavaFX 8 (JDK 1.8.0_40), który ma cechy dialogowych zbudowany w
Dzięki za odpowiedź! Czy to oznacza, że nie jest to możliwe z konwerterem wyników? – bashoogzaad
Konwerter wyników służy do przekonwertowania wyniku. Jest więc całkiem możliwe, że za późno, aby nie dopuścić do zamknięcia okna dialogowego ;-) – eckig
Możesz także dołączyć ActionListener na przycisku ok, aby zużywać zdarzenie, gdy dane wejściowe są nieprawidłowe. – tomsontom