Ho un JFormattedTextField con un NumberFormat con Locale.US. Quindi il separatore decimale è il punto e il separatore di raggruppamento è la virgola.NumberFormat non sufficientemente accurato
Ora digito la stringa "1,23" in questo campo di testo e sposta lo stato attivo su un altro componente. Mi aspetto che la stringa scompaia (come quando digito "a" anziché "1,23") perché ovviamente non è una rappresentazione valida di un numero quando si utilizza Locale.US. Ma invece il testo nel campo di testo è cambiato in "123".
Questo perché il NumberFormat utilizzato non è rigido durante l'analisi e semplicemente ignora la virgola.
Domanda: Come posso dire a NumberFormat di lanciare una ParseException in questo caso in modo che il campo di testo sia vuoto dopo aver spostato lo stato attivo su un altro componente?
Codice di prova:
JDialog dialog = new JDialog();
JPanel panel = new JPanel(new BorderLayout());
dialog.getContentPane().add(panel);
NumberFormat nf = NumberFormat.getInstance(Locale.US);
JFormattedTextField textField = new JFormattedTextField(nf);
textField.setText("1,23");
panel.add(textField, BorderLayout.CENTER);
panel.add(new JButton("focus"), BorderLayout.EAST);
dialog.pack();
dialog.setVisible(true);
Spostare l'attenzione dal campo di testo per il pulsante e il testo cambierà in "123".
Questo non è un duplicato. L'altra domanda riguardava Interiers, non Doubles. La domanda qui si riduce a un NumberFormat eccessivamente indulgente che non controlla se è consentita una virgola in quella posizione. Sembra che abbiamo bisogno di una sottoclasse di NumberFormat con un controllo più severo. –
@RalfH: hai ragione, questo non è un duplicato. Ho modificato la domanda per mostrare l'uso sottostante di NumberFormat in JFormattedTextField. –
Come posso rimuovere l'etichetta duplicata da questa domanda? Vorrei pubblicare la mia soluzione. –