Как установить дату JCalendar в JDateChooser

1

У меня есть 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;
}

Изображение 174551

Теги:
swing
jdatechooser
jcalendar

2 ответа

4
Лучший ответ

Кажется, это работает правильно.

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

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

Изображение 174551

Приложение: Дата 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);
        …
    }
}

Изображение 174551

  • 0
    Привет мусор! Я пока не могу попробовать, но, судя по приведенному выше коду и сс, у вас есть два отдельных компонента. У меня есть только jdatechooser с кнопкой для всплывающего jcalendar. То, что я не могу понять, как установить дату для всплывающего jcalendar с нулевым текстовым полем. Я пытаюсь избежать установки даты jchooser и вместо этого установить его по умолчанию во всплывающем окне. Мой вопрос имеет смысл?
  • 0
    Ах я вижу; Я обновил пример, чтобы показать один компонент с всплывающим редактором; Я не вижу способа сделать поле пустым, но задаю для всплывающего окна значение по умолчанию.
Показать ещё 3 комментария
0

Возможно, есть и другой способ сделать это, но это то, что у меня есть:

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);
  • 0
    Я искал способ обойти помещение значения даты в компоненте текстового поля jdatechooser для того, чтобы jcalendar установил его дату в это значение. По умолчанию я думаю, что jcalendar устанавливает текущую дату, если текстовое поле равно нулю.
  • 0
    Ну, я не думаю, что это возможно. JCalendar устанавливает свою дату на текущую дату, когда компонент texfield пуст или когда значение внутри него не может быть переведено в фактическую дату.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню