【发布时间】:2012-06-18 13:23:03
【问题描述】:
我正在尝试创建一个只接受 24 小时时间的 JFormattedTextField。
我非常接近解决方案,但有一种情况下以下代码示例不起作用。
如果您输入时间“222”并从字段中更改焦点,则时间将更正为“2202”。我希望它只接受完整的 4 位数 24 小时时间。这段代码几乎在所有情况下都能按我的意愿工作,除了我刚才提到的那个。有什么建议吗?
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);
}
【问题讨论】:
-
简单的解决方法是使用
JTextField,并使用DocumentFilter:-) 对于DocumentFilter,您可以查看example -
不正确,可能是 02:22 或 22:02
-
如果您使用的是 SimpleDateFormat,您可能会不走运。来自 Javadoc:“对于解析,模式字母的数量被忽略,除非需要分隔两个相邻的字段。”它将前两位数字解析为小时字段,因此它知道剩余数字必须是分钟字段。
-
啊哈,太真实了,做一件事然后在
FocusLost上检查长度如果小于4,然后给用户一个JOptionPane看,或者不要让如果长度小于 4,此组件将失去焦点 :-)
标签: java swing simpledateformat jformattedtextfield