Java 如何在JDateChooser中设置JCalendar日期
我有一个用于选择出生日期的JDateChooser。它以空日期值开始,让用户使用textfield或打开Jcalendar的jdatechooser按钮选择出生日期 我想做的是将JCalendar的日期设置为距当前日期-10年。默认情况下,JCalendar将日期设置为当前年份。我尝试了这段代码,但它不起作用-它仍然将日期设置为当前日期。任何帮助都可以。谢谢Java 如何在JDateChooser中设置JCalendar日期,java,swing,jcalendar,jdatechooser,Java,Swing,Jcalendar,Jdatechooser,我有一个用于选择出生日期的JDateChooser。它以空日期值开始,让用户使用textfield或打开Jcalendar的jdatechooser按钮选择出生日期 我想做的是将JCalendar的日期设置为距当前日期-10年。默认情况下,JCalendar将日期设置为当前年份。我尝试了这段代码,但它不起作用-它仍然将日期设置为当前日期。任何帮助都可以。谢谢 dcBirthDateNew = new JDateChooser(); dcBirthDateNew.setDateFo
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;
}
也许还有另一种方法,但这就是我所拥有的:
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);
也许还有另一种方法,但这就是我所拥有的:
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);
这似乎是正确的
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, -10);
JDateChooser chooser = new JDateChooser(c.getTime());
this.add(chooser);
附录:弹出编辑器的日期默认为JDateChooser中的值;如果显式设置,它将成为默认值:
JDateChooser chooser = new JDateChooser();
chooser.getDateEditor().setDate(c.getTime());
您可以更新PropertyChangeListener中的另一个空文本字段,如图所示;属性名为date
附录:仔细看,ActionListener的JDateChooser实现处理上述默认日期。您可以替代它,替换下面显示的行,以创建不同的默认值
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);
…
}
}
这似乎工作正常
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, -10);
JDateChooser chooser = new JDateChooser(c.getTime());
this.add(chooser);
附录:弹出编辑器的日期默认为JDateChooser中的值;如果显式设置,它将成为默认值:
JDateChooser chooser = new JDateChooser();
chooser.getDateEditor().setDate(c.getTime());
您可以更新PropertyChangeListener中的另一个空文本字段,如图所示;属性名为date
附录:仔细看,ActionListener的JDateChooser实现处理上述默认日期。您可以替代它,替换下面显示的行,以创建不同的默认值
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);
…
}
}
为了让jcalendar将其日期设置为该值,我正在寻找一种方法来绕过将日期值放入JDATechoser的textfield组件中。默认情况下,如果texfield为空,我认为jcalendar会将其日期设置为当前日期。我认为这是不可能的。当texfield组件为空或其中的值无法转换为实际日期时,JCalendar将其日期设置为当前日期。@CristianMarian:使用日历的sinlge实例;我提出了一种方法,我正在寻找一种方法,绕过将日期值放入jdatechooser的textfield组件中,以便jcalendar将其日期设置为该值。默认情况下,如果texfield为空,我认为jcalendar会将其日期设置为当前日期。我认为这是不可能的。当texfield组件为空或其中的值无法转换为实际日期时,JCalendar将其日期设置为当前日期。@CristianMarian:使用日历的sinlge实例;我提出了一个方法。嗨,垃圾!我还不能尝试,但是从上面代码和ss的外观来看,您有两个独立的组件。我的jdatechooser只有一个用于弹出jcalendar的按钮。我似乎不知道如何在文本字段为空的情况下设置弹出jcalendar的日期。我试图避免将日期设置为jchooser,而是在弹出窗口中将其设置为默认值。我的问题有意义吗?啊,我明白了;我更新了示例,用弹出编辑器显示单个组件;我看不出一种方法可以将字段变为空白,但是给弹出窗口一个默认值。你要找的是最新的附录吗?嗨,垃圾,这就是我要找的。然而,当我尝试你的解决方案时,可能遗漏了一些东西。我想为了让它工作,我还需要完整的代码来显示弹出窗口,对吗;我不想混合使用许可证;我包括一行前后的变化作为参考。嗨垃圾!我还不能尝试,但是从上面代码和ss的外观来看,您有两个独立的组件。我的jdatechooser只有一个用于弹出jcalendar的按钮。我似乎不知道如何在文本字段为空的情况下设置弹出jcalendar的日期。我试图避免将日期设置为jchooser,而是在弹出窗口中将其设置为默认值。我的问题有意义吗?啊,我明白了;我更新了示例,用弹出编辑器显示单个组件;我看不出一种方法可以将字段变为空白,但是给弹出窗口一个默认值。你要找的是最新的附录吗?嗨,垃圾,这就是我要找的。然而,当我尝试你的解决方案时,可能遗漏了一些东西。我想为了让它工作,我还需要完整的代码来显示弹出窗口,对吗;我不想混合使用许可证;我包括了一行之前和之后的变化作为参考。