【问题标题】:How to set the date on JDatePicker's JFormattedTextField with a java.util.Date (JDatePickerImpl 1.3.4)如何使用 java.util.Date (JDatePickerImpl 1.3.4) 在 JDatePicker 的 JFormattedTextField 上设置日期
【发布时间】:2018-01-22 12:58:35
【问题描述】:

我尝试了不同的方法,但仍然无法获得由我创建的方法返回的 Java util.Date 实例以显示在我的 JDatePicker's JFormattedText

我打印了我得到的util.Date 的值,即2018-01-01

让我们调用变量dateStart 来保存值2018-01-01

当我尝试这样做时

jDatePickerImpl.getJFormattedTextField().setText(dateStart+"");

它会在JFormattedTextField 上显示 2018-01-01,这没关系。

但问题是,当我点击JDatePickerImpl 组件时,我得到一个exception 错误

AWT-EventQueue-0" java.lang.ClassCastException: java.util.Date cannot be cast to java.util.Calendar
    at utility.date.DateLabelFormatter.valueToString(DateLabelFormatter.java:26)

所以我想也许我可以使用 JDatePanelImpl 实例的 setDate(int,int,int) 方法。

jDatePanelImpl.getModel().setDate(getYear(utilDate),getMonth(utilDate),getDay(utilDate));

    private int getYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);    
        int year = calendar.get(Calendar.YEAR);
        return year;
    }

    private int getMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int month = calendar.get(Calendar.MONTH);
        return month;
    }

    private int getDay(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        return day;
    }

但是当我这样做时,我只会得到一个空白或空的JFormattedTextField

我能够以字符串格式显示日期,但这并不能解决问题,因为只要单击JDatePicker 组件,就会出现异常错误。

这是我第一次尝试使用JDatePicker 库,我只是不知道下一步该做什么。

顺便说一句,我试图在JFormattedTextField 上设置的util.Date 对象是来自数据库Resultset 的日期,但我已将其转换为util.Date 格式,这就是我能够做到的原因打印出它的价值。

谢谢。

【问题讨论】:

  • 有什么理由在您的代码中使用早已过时的DateCalendarclasses? java.time, the modern Java date and time API, 使用起来更好。我建议您从数据库中获取日期为LocalDate。如果您需要将 DateCalendar 传递给日期选择器库,请仅在执行此操作之前进行转换。
  • @OleV.V.谢谢你。我还没有检查那些用于处理日期的 Java 8 API。这是我第一次创建具有许多日期输入和输出的项目,这导致我使用 JDatePicker1.3.4。以前没试过。

标签: java swing date datepicker


【解决方案1】:

我也有同样的问题。但这解决了我的问题

设置日期后设置“setSelected(true)”

jDatePanelImpl.getModel().setDate(getYear(utilDate),getMonth(utilDate),getDay(utilDate));

jDatePanelImpl.getModel().setSelected(true);

【讨论】:

    【解决方案2】:

    您的堆栈跟踪向您显示出了什么问题以及哪里出了问题。

    您将 java.util.Date 传递给 DateLabelFormatter.valueToString() 方法(第 26 行),该方法采用日历。 Date在运行时无法转换为Calendar,导致调用方法时出错。

    要么将日历传递给方法,要么将方法更改为采用日期。

    【讨论】:

      【解决方案3】:

      获取JDatePicker的型号为DateModel<Calendar>,设置值如下:

      Calendar calendar = Calendar.getInstance();
      calendar.setTime(date);
      DateModel<Calendar> dateModel = (DateModel<Calendar>) datePicker.getModel();
      dateModel.setValue(calendar);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-30
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-09
        • 1970-01-01
        相关资源
        最近更新 更多