JDatePicker是用于选择日期的开源Java GUI组件

http://sourceforge.net/projects/jdatepicker/

创建组件后,当我将2月设置为月份时,似乎出现了一个错误。其他所有月份均正常工作。

package jat.examples.DatePicker;

import jat.jdatepicker.JDateComponentFactory;
import jat.jdatepicker.JDatePicker;

import javax.swing.JApplet;
import javax.swing.JComponent;

public class DatePickerExample extends JApplet{

private static final long serialVersionUID = 1920676464239324135L;
JDatePicker depart_date_picker;

public void init() {
    depart_date_picker = JDateComponentFactory.createJDatePicker();
    depart_date_picker.setTextEditable(true);
    depart_date_picker.setShowYearButtons(true);

    add((JComponent) depart_date_picker);

}

public void start() {

    depart_date_picker.getModel().setYear(2010);
    depart_date_picker.getModel().setMonth(1);
    //depart_date_picker.getModel().setMonth(1);
    depart_date_picker.getModel().setDay(15);
    depart_date_picker.getModel().setSelected(true);
}

}


它不显示2月,而是显示3月。

在调试器中,我注意到oldValue为null。

public void setMonth(int month) {
    int oldMonthValue = this.calendarValue.get(Calendar.MONTH);
    T oldValue = getValue();
    calendarValue.set(Calendar.MONTH, month);
    fireChangeEvent();
    firePropertyChange("month", oldMonthValue, this.calendarValue.get(Calendar.MONTH));
    firePropertyChange("value", oldValue, getValue());
}


果然,当我两次调用该方法时,它正确显示了February。

    depart_date_picker.getModel().setMonth(1);
    depart_date_picker.getModel().setMonth(1);


可能是变量初始化问题。我是正确的,有人可以解决这个问题,还是我使用库不正确?

最佳答案

我注意到您的软件包导入是jat.jdatepicker.JDatePicker,它似乎直接包含在https://sourceforge.net/p/jat的源存储库中

您正在使用的此版本的JDatePicker是原始JDatePicker项目的一个分支。尽管开放源代码项目不允许使用派生工具,但是如果有需要解决的问题,建议尝试并返回到原始项目。

我建议您最好使用https://github.com/JDatePicker/JDatePicker项目的最新版本

我针对jdatepicker-1.3.4测试了您的案例,该案例可从中央存储库(https://search.maven.org/#artifactdetails%7Corg.jdatepicker%7Cjdatepicker%7C1.3.4%7Cjar)下载

包含在Maven中:

<dependency>
    <groupId>org.jdatepicker</groupId>
    <artifactId>jdatepicker</artifactId>
    <version>1.3.4</version>
</dependency>


通过以下测试,最初选择了二月。

public static void main(String[] args) {
    JFrame testFrame = new JFrame();
    testFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    testFrame.setSize(500, 500);
    JPanel jPanel = new JPanel();

    JDatePicker picker = new JDateComponentFactory().createJDatePicker();
    picker.setTextEditable(true);
    picker.setShowYearButtons(true);
    jPanel.add((JComponent) picker);

    picker.getModel().setYear(2010);
    picker.getModel().setMonth(1);
    //picker.getModel().setMonth(1);
    picker.getModel().setDay(15);
    picker.getModel().setSelected(true);

    JPanel datePanel = new JPanel();
    datePanel.setLayout(new BorderLayout());
    datePanel.add(jPanel, BorderLayout.WEST);
    BorderLayout fb = new BorderLayout();
    testFrame.setLayout(fb);
    testFrame.getContentPane().add(datePanel, BorderLayout.WEST);
    testFrame.setVisible(true);
}

10-06 12:37