Cómo establecer JCalendar fecha en JDateChooser

Tengo un JDateChooser que se utiliza para la selección de fechas de nacimiento. Comienza como nulo valor de fecha y vamos al usuario elegir la fecha de nacimiento o usando el campo de texto o el jdatechooser botón que abre la Jcalendar.

Lo que estoy tratando de hacer es establecer la JCalendar de la fecha -10 años a partir de la fecha actual. De forma predeterminada, el JCalendar es la configuración de la fecha en el año en curso. He probado este código pero no funciona — todavía marca la fecha a la fecha actual. Cualquier ayuda va a hacer. Gracias!

    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;
}

Cómo establecer JCalendar fecha en JDateChooser

InformationsquelleAutor mfrancisp | 2015-03-27

2 Kommentare

  1. 4

    Esto parece funcionar correctamente.

    Calendar c = Calendar.getInstance();
    c.add(Calendar.YEAR, -10);
    
    JDateChooser chooser = new JDateChooser(c.getTime());
    this.add(chooser);

    Cómo establecer JCalendar fecha en JDateChooser

    Anexo: en La ventana de editor de la fecha por defecto el valor en el JDateChooser; si se establece explícitamente, que se convertirá en el valor predeterminado:

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

    Puede actualizar a otra, el campo de texto vacío en un PropertyChangeListener, como se muestra aquí; el nombre de la propiedad es "date".

    Anexo: Mirando más de cerca, la JDateChooser implementación de ActionListener se encarga de la fecha predeterminada descrito anteriormente. Se puede reemplazar, en sustitución de las líneas que se muestra a continuación, para crear un valor predeterminado diferente.

    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);
            
        }
    }

    Cómo establecer JCalendar fecha en JDateChooser

    • Hola basura! De los que no puedo probarlo, pero desde el aspecto del código y ss arriba, usted tiene dos componentes por separado. El mío sólo tiene el jdatechooser con un botón de una ventana de jcalendar. Lo que me parece que no puede averiguar es cómo fijar una fecha para la emergente jcalendar con el textfield ser null. Estoy tratando de evitar el establecimiento de la fecha para la jchooser y en su lugar establecer como predeterminado en el menú emergente. ¿Mi pregunta sentido?
    • Ah, ya sé; he actualizado el ejemplo para mostrar que el único componente con popup editor; no veo una manera de hacer que el campo en blanco, pero le dan el emergente de un valor predeterminado.
    • Es la más reciente adición a lo que estás buscando?
    • Hola Basura, eso es lo que yo estaba buscando. Sin embargo puede haber perdido algo cuando probé tu solución. Creo que para que esto funcione, yo también necesitaría todo el código para hacer que la ventana emergente que aparece a la derecha?
    • Derecho; no quería mezclar las licencias; he incluido una línea antes y después del cambio de referencia.
  2. 0

    Tal vez hay otra forma de hacer esto, pero esto es lo que tengo:

    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);
    • Yo estaba buscando una manera de evitar poner la fecha valor en el campo de texto de los componentes de la jdatechooser para que el jcalendar para establecer la fecha para ese valor. Por defecto creo que el jcalendar establece la fecha actual si texfield es nulo.
    • Bueno, yo no creo que es posible. El JCalendar establece la fecha a fecha actual cuando el texfield componente está vacío o cuando el valor en el interior de la misma, no puede ser traducida en una fecha real.
    • El uso de un single instancia de Calendar; he propuesto un enfoque aquí.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea