У меня есть JDateChooser, который используется для выбора дат рождения. Он начинается с нулевого значения даты и позволяет пользователю выбрать дату рождения либо с помощью текстового поля, либо с помощью кнопки jdatechooser, которая открывает Jcalendar.
Я пытаюсь установить дату JCalendar в -10 лет с текущей даты. По умолчанию JCalendar устанавливает дату в текущем году. Я пробовал этот код, но он не работает - он по-прежнему устанавливает дату на текущую дату. Любая помощь поможет. Благодарю!
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;
}
Кажется, это работает правильно.
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, -10);
JDateChooser chooser = new JDateChooser(c.getTime());
this.add(chooser);
Приложение: Дата JDateChooser
всплывающего окна по умолчанию соответствует значению в JDateChooser
; если вы установите его явно, оно станет значением по умолчанию:
JDateChooser chooser = new JDateChooser();
chooser.getDateEditor().setDate(c.getTime());
Вы можете обновить другое, пустое текстовое поле в PropertyChangeListener
, как показано здесь; имя свойства - "date"
.
Приложение: Глядя ближе, JDateChooser
реализация ActionListener
обрабатывает дату по умолчанию, описанную выше. Вы можете переопределить его, заменив строки, показанные ниже, для создания другого значения по умолчанию.
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);
…
}
}
Возможно, есть и другой способ сделать это, но это то, что у меня есть:
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);