2015-03-27 2 views
1

У меня есть JDateChooser, который используется для выбора дат рождения. Он начинается с нулевого значения даты и позволяет пользователю выбрать дату рождения либо с помощью текстового поля, либо с помощью кнопки jdatechooser, которая открывает Jcalendar.Как установить дату JCalendar в JDateChooser

Что я пытаюсь сделать, это установить дату 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; 
} 

Screenshot

ответ

4

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

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

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

image

Добавление: всплывающего окна редактора дата по умолчанию значения в JDateChooser; если вы установите его в явном виде, он будет по умолчанию значения:

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

Вы можете обновить другое, пустое текстовое поле в PropertyChangeListener, как показан here; имя свойства "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); 
     … 
    } 
} 

image

+0

Привет, мусор! Я не могу попробовать его еще, но из внешнего вида кода и ss выше у вас есть два отдельных компонента. Mine имеет только jdatechooser с кнопкой для всплывающего jcalendar. Кажется, что я не могу понять, как установить дату для всплывающего jcalendar с текстовым полем, равным нулю. Я пытаюсь не устанавливать дату в jchooser и вместо этого устанавливать его по умолчанию во всплывающем окне. Имеет ли смысл мой вопрос? – mfrancisp

+0

А, я вижу; Я обновил пример, чтобы показать один компонент с помощью всплывающего редактора; Я не вижу способа сделать поле пустым, но выдает всплывающее окно по умолчанию. – trashgod

+0

Является самым последним добавлением, что вы искали? – trashgod

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 устанавливает текущую дату, если texfield равно null. – mfrancisp

+0

Ну, я не думаю, что это возможно. JCalendar устанавливает дату на текущую дату, когда компонент texfield пуст или когда значение внутри него не может быть переведено на фактическую дату. –

+0

@CristianMarian: используйте экземпляр sinlge 'Calendar'; Я предложил подход [здесь] (http://stackoverflow.com/a/29305584/230513). – trashgod