从JDatePicker获取日期遇类型转换异常:GregorianCalendar无法转Date
解决JDatePicker日期获取的类型转换异常
问题原因
你遇到的GregorianCalendar cannot be cast to Date异常,是因为当前使用的jdatepicker库中,JDatePicker的默认模型返回的是GregorianCalendar实例,而不是你代码里直接强转的Date类型,导致类型不匹配。
修复方案
方案一:从Calendar对象中提取Date
直接修改addToRegister方法里的日期获取逻辑,先把返回值转为Calendar,再通过getTime()方法得到Date对象:
public void addToRegister() { String name = nameTextField.getText(); sdf = new SimpleDateFormat(); // 修正日期获取代码 Calendar calendar = (Calendar) datePicker.getModel().getValue(); Date dateToFormat = calendar.getTime(); String date = sdf.format(dateToFormat); String amount = amountTextField.getText(); tableModel.addRow(new Object[] {name, date, amount}); }
方案二:初始化时指定返回Date类型的模型
如果你的jdatepicker版本支持UtilDateModel(多数主流版本都支持),可以在创建JDatePicker时直接使用该模型,这样getValue()会直接返回Date,无需额外转换:
// 替换原datePicker初始化代码 UtilDateModel dateModel = new UtilDateModel(); JDatePanel datePanel = new JDatePanel(dateModel); datePicker = new JDatePicker(datePanel); // 此时addToRegister里的代码可以保留原强转逻辑 Date dateToFormat = (Date) datePicker.getModel().getValue();
额外提示
- 建议指定
SimpleDateFormat的具体格式,比如new SimpleDateFormat("yyyy-MM-dd"),避免默认格式不一致的问题 - 注意空值判断:如果用户未选择日期,
getValue()可能返回null,建议添加非空校验避免空指针异常
内容的提问来源于stack exchange,提问作者maverickar
相关产品推荐
相关产品推荐

