Tôi đang cố tạo một JFormattedTextField chỉ chấp nhận thời gian 24 giờ.Thời gian 24 giờ nghiêm ngặt trong JFormattedTextField
Tôi rất gần với giải pháp, nhưng có một trường hợp trong đó ví dụ mã sau không hoạt động.
Nếu bạn nhập thời gian "222" và thay đổi tiêu điểm từ trường, thời gian được sửa thành "2202". Tôi muốn nó chỉ chấp nhận đầy đủ 4 chữ số 24 giờ. Mã này hoạt động như tôi muốn trong hầu hết các trường hợp, ngoại trừ mã mà tôi vừa đề cập. Bất kỳ đề xuất?
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);
}
Cách giải quyết đơn giản là việc sử dụng của 'JTextField', và sử dụng' DocumentFilter' :-) Đối với [DocumentFilter] (http://docs.oracle.com/javase/7/docs/api/javax/swing/text/DocumentFilter.html) bạn có thể kiểm tra [ví dụ] này (http://stackoverflow.com/questions/9477354/how-to-allow -introducing-only-digits-in-jtextfield/9478124 # 9478124) –
không đúng, có thể là 02:22 hoặc 22:02 – mKorbel
Bạn có thể không may mắn nếu bạn đang sử dụng SimpleDateFormat. Từ Javadoc: "Để phân tích cú pháp, số chữ hoa văn bị bỏ qua trừ khi cần phải tách hai trường liền kề." Nó phân tích hai chữ số đầu tiên thành trường giờ, do đó, nó biết rằng số còn lại phải là trường phút. – Alex