Próbuję utworzyć JFormattedTextField, który akceptuje tylko 24-godzinny czas.Ścisły 24-godzinny czas w JFormattedTextField
Jestem bardzo blisko rozwiązania, ale mam jeden przypadek, w którym poniższy przykład kodu nie działa.
Po wprowadzeniu czasu "222" i zmianie ostrości z pola, czas jest korygowany na "2202". Chciałbym, aby zaakceptował tylko 4-cyfrowy 24-godzinny czas. Ten kod działa tak, jak chcę w prawie wszystkich przypadkach, z wyjątkiem tego, o którym wspomniałem. Jakieś sugestie?
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);
}
Łatwy Rozwiązaniem jest użycie 'JTextField' i używając' DocumentFilter' :-) Dla [DocumentFilter] (http://docs.oracle.com/javase/7/docs/api/javax/swing/text/DocumentFilter.html) możesz sprawdzić ten [przykład] (http://stackoverflow.com/questions/9477354/how-to-allow -instrukcja-tylko-cyfr-w-jtextfield/9478124 # 9478124) –
nieprawda, może być 02:22 lub 22:02 – mKorbel
Możesz mieć dużo szczęścia, jeśli używasz SimpleDateFormat. Z Javadoc: "Podczas analizowania liczba liter wzorcowych jest ignorowana, chyba że trzeba oddzielić dwa sąsiednie pola." Parsuje pierwsze dwie cyfry jako pole godziny, więc wie, że pozostała cyfra musi być polem minut. – Alex