Sto provando a creare un JFormattedTextField che accetta solo un orario di 24 ore.Tempo di 24 ore rigoroso in JFormattedTextField
Sono molto vicino a una soluzione, ma ho un caso in cui il seguente esempio di codice non funziona.
Se si immette l'ora "222" e si cambia messa a fuoco dal campo, l'ora viene corretta su "2202". Mi piacerebbe che accetti solo un tempo di 24 ore a 4 cifre. Questo codice funziona come voglio in quasi tutti i casi, tranne quello che ho appena menzionato. Eventuali suggerimenti?
public static void main(String[] args) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("HHmm");
dateFormat.setLenient(false);
DateFormatter dateFormatter = new DateFormatter(dateFormat);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFormattedTextField textField = new JFormattedTextField(dateFormatter);
frame.add(textField, BorderLayout.NORTH);
frame.add(new JTextField("This is here so you can change focus."), BorderLayout.SOUTH);
frame.setSize(250, 100);
frame.setVisible(true);
}
La soluzione più semplice è l'uso di 'JTextField', e l'utilizzo di' DocumentFilter' :-) Per [DocumentFilter] (http://docs.oracle.com/javase/7/docs/api/javax/swing/text/DocumentFilter.html) puoi controllare questo [esempio] (http://stackoverflow.com/questions/9477354/how-to-allow -introdurre-only-digit-in-jtextfield/9478124 # 9478124) –
non vero, potrebbe essere 02:22 o 22:02 – mKorbel
Potrebbe essere sfortunato se si utilizza SimpleDateFormat. Da Javadoc: "Per l'analisi, il numero di lettere di pattern viene ignorato a meno che non sia necessario separare due campi adiacenti." Analizza le prime due cifre come il campo delle ore, quindi sa che la cifra rimanente deve essere il campo dei minuti. – Alex