В настоящее время у меня есть диалог с четырьмя текстовыми полями, из которых собирается вход. Когда вход не соответствует моим требованиям, диалог должен оставаться открытым и показывать сообщение об ошибке. Сейчас у меня следующий код:Продолжайте показывать диалоговое окно при неудачной проверке ввода данных
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
});
Метод getInput()
получает текст из TextFields и испытаний его от некоторых требований. Когда вход проходит, четыре строки помещаются в ArrayList<String>
. Else, метод возвращает null
. Как вы можете видеть, конвертер результатов проверяет, вернулся ли метод null
. Если это не так, он просто возвращает ArrayList<String>
.
Но, когда проверка не удалась, диалог должен оставаться открытым. Он работает с dlg.showAndWait()
, но недостатком является то, что он вызывает ошибку: java.lang.IllegalStateException: Stage already visible
. (он продолжает работать, но получение ошибки не так, как должно быть)
Мой вопрос: кто-нибудь знает, как это сделать, без возникновения ошибки?
. Примечание: Я использую JavaFX 8 (JDK 1.8.0_40), который имеет диалоговые функции, встроенные в
Спасибо за ваш ответ! Означает ли это, что это невозможно в конверторе результатов? – bashoogzaad
Преобразователь результата предназначен для преобразования результата. Так что вполне возможно, что слишком поздно, чтобы предотвратить закрытие диалога ;-) – eckig
Вы также можете подключить ActionListener на кнопке ok, чтобы использовать событие, когда вход недействителен. – tomsontom