Attualmente ho una finestra di dialogo con quattro campi di testo da cui viene raccolto l'input. Quando l'input non può soddisfare i miei requisiti, la finestra di dialogo dovrebbe rimanere aperta e mostrare un messaggio di errore. Al momento ho il seguente codice:Continua a mostrare una finestra di dialogo quando la convalida dell'input fallisce
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
});
Il metodo getInput()
ottiene il testo dai campi di testo e delle prove cui nei confronti di alcuni requisiti. Quando l'input passa, le quattro stringhe vengono inserite in un ArrayList<String>
. Altrimenti, il metodo restituisce null
. Come puoi vedere, il convertitore di risultati verifica se il metodo ha restituito null
. In caso contrario, restituisce semplicemente lo ArrayList<String>
.
Tuttavia, quando la convalida non riesce, la finestra di dialogo deve essere mantenuta aperta. Funziona con dlg.showAndWait()
, ma il lato negativo è che genera un errore: java.lang.IllegalStateException: Stage already visible
. (continua a funzionare, ma ottenere un errore non è come dovrebbe essere)
La mia domanda è: qualcuno sa come fare questo, senza innescare un errore?
. Nota: Sto usando JavaFX 8 (JDK 1.8.0_40), che ha le caratteristiche di dialogo costruito in
Grazie per la risposta! Questo significa che questo non è possibile con il convertitore di risultati? – bashoogzaad
Il convertitore di risultati ha lo scopo di convertire il risultato. Quindi è del tutto possibile troppo tardi per impedire la chiusura della finestra di dialogo ;-) – eckig
È anche possibile collegare un ActionListener sul pulsante ok e consumare l'evento quando l'Input non è valido. – tomsontom