Jaki jest najlepszy sposób na pobieranie numerów od użytkownika poprzez swingowe okienka? Aktualnie mam coś takiego:
private int giveInt(String message)
{
int result =0;
boolean successful = false;
String input;
do{
try {
input=JOptionPane.showInputDialog(message);
result = Integer.parseInt(input);
successful = true;
} catch (InputMismatchException ime) {
JOptionPane.showMessageDialog(null, "Please enter an number");
}
}while (!successful);
return result;
}
Lecz gdy w wyskakującym okienku kliknę Cancel, okno nie pobiera rzadnej wartości i program nie może sparsować tego na integer. Jakie jest najlepsze wyjście z takiej sytuacji?
Spawdzić czy input jest równe/różne od null i zachować się w takiej sytuacji, tak jak chcemy, by działał nasz program? Ewentualnie chwycić NPE, ale moim zdaniem używanie wyjątków do sterowania programem to Code Smell.
W GUI musisz przywyknąć do tego, że większość rzeczy będzie toporna, po prostu użytkownik ma za duże możliwości wprowadzenia syfu. Stwórz sobie klasę pomocniczą:
public final class MyJOptionPane {
private static final String CLASSNAME = MyJOptionPane.class.getName();
private static final Logger LOGGER = Logger.getLogger(CLASSNAME);
public static int showEnforcedIntInputDialog(Object message) {
while (true) {
try {
String val = JOptionPane.showInputDialog(message);
return Integer.parseInt(val);
} catch (NumberFormatException nfe) {
LOGGER.logp(Level.SEVERE, CLASSNAME, "showEnforcedIntInputDialog", "Could not parse input as java.lang.String", nfe);
}
}
}
}
I potem wszędzie tego używaj tak:
public static void main(String[] args) {
int value = MyJOptionPane.showEnforcedIntInputDialog("Podaj liczbę");
...
}