简体   繁体   English

如何在JDateChooser中设置JCalendar日期

[英]How to set JCalendar date in JDateChooser

I have a JDateChooser that is used for selecting birth dates. 我有一个JDateChooser,用于选择生日。 It starts out as null date value and let's the user choose the birth date either using the textfield or the jdatechooser button which opens the Jcalendar. 它以空日期值开始,让用户使用文本字段或打开Jcalendar的jdatechooser按钮选择出生日期。

What I'm trying to do is to set the JCalendar's date to -10 years from the current date. 我想做的是将JCalendar的日期设置为从当前日期开始的-10年。 By default, the JCalendar is setting the date at the current year. 默认情况下,JCalendar将日期设置为当前年份。 I tried this code but it doesn't work -- it still sets the date to the current date. 我尝试了此代码,但无法正常工作-仍将日期设置为当前日期。 Any help will do. 任何帮助都可以。 Thanks! 谢谢!

    dcBirthDateNew = new JDateChooser();
    dcBirthDateNew.setDateFormatString("MM/dd/yyyy");
    dcBirthDateNew.getDateEditor().getUiComponent().addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent evt) {
            if (evt.getSource() instanceof JTextComponent) {
                final JTextComponent textComponent=((JTextComponent)evt.getSource());
                SwingUtilities.invokeLater(new Runnable(){
                    public void run() {
                        textComponent.selectAll();
                    }});
            }   
        }
    });
    JCalendar calx = dcBirthDateNew.getJCalendar();
    calx.setCalendar(getPrevDate());

private static Calendar getPrevDate() {
    DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
    Date myDate = new Date(System.currentTimeMillis());
    System.out.println("result is "+ dateFormat.format(myDate));
    Calendar cal = Calendar.getInstance();
    cal.setTime(myDate);
    cal.add(Calendar.YEAR, -10);
    System.out.println(dateFormat.format(cal.getTime()));
    return cal;
}

屏幕截图

This seems to work correctly. 这似乎正常工作。

Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, -10);

JDateChooser chooser = new JDateChooser(c.getTime());
this.add(chooser);

图片

Addendum : The popup editor's date defaults to the value in the JDateChooser ; 附录 :弹出编辑器的日期默认为JDateChooser的值; if you set it explicitly, it will become the default value: 如果显式设置,它将成为默认值:

JDateChooser chooser = new JDateChooser();
chooser.getDateEditor().setDate(c.getTime());

You can update another, empty text field in a PropertyChangeListener , as shown here ; 您可以在更新另一个空文本字段PropertyChangeListener ,如图所示这里 ; the property name is "date" . 属性名称为"date"

Addendum : Looking closer, the JDateChooser implementation of ActionListener handles the default date described above. 附录 :仔细JDateChooserActionListenerJDateChooser实现处理上述默认日期。 You can override it, replacing the lines shown below, to create a different default. 您可以覆盖它,替换下面显示的行,以创建其他默认值。

JDateChooser chooser = new MyDateChooser();
this.add(chooser);
…
private static class MyDateChooser extends JDateChooser {

    @Override
    public void actionPerformed(ActionEvent e) {
        …
        Date date = dateEditor.getDate();
        if (date == null) {
            Calendar c = Calendar.getInstance();
            c.add(Calendar.YEAR, -10);
            calendar.setTime(c.getTime());
        } else {
            calendar.setTime(date);
        }
        jcalendar.setCalendar(calendar);
        …
    }
}

图片

Maybe there is another way of doing this, but this is what I have: 也许还有另一种方法,但这就是我所拥有的:

Date date = new Date();
Calendar calendar = Calendar.getInstance();
int subtractYearValue = 10;

int currentYear = Calendar.getInstance().get(Calendar.YEAR);
int currentMonth = Calendar.getInstance().get(Calendar.MONTH);
int currentDate= Calendar.getInstance().get(Calendar.DATE);

calendar.set(currentYear - subtractYearValue , currentMonth , currentDate);
date.setTime(calendar.getTimeInMillis());

dateChooser.setDate(date);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM