Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    La questione non è esattamente così semplice: se l'anno selezionato è bisestile, immagino che la combobox dei giorni debba visualizzare i valori da 1 a 29 (e non solo fino a 28).

    Se vuoi essere "coerente" con gli anni bisestili, puoi aiutarti in questo modo: costruisci un Calendar posizionato nel giorno 1 del mese scelto e dell'anno scelto. Quindi, verifica qual è il valore massimo per il campo "giorno" di quel calendar:

    codice:
    int annoScelto = ...;
    int meseScelto = ...;   // Mese = numero - 1!!!
    
    // Mi posiziono al giorno 1 del mese/anno scelto
    GregorianCalendar gc = new GregorianCalendar(annoScelto, meseScelto, 1);
    
    // Ottengo il massimo giorno di quel mese
    int maxGiorno = gc.getMaximum( Calendar.DATE );
    
    // Ora costruisci la lista di valori (esempio, come array di string):
    String[] giorni = new String[ maxGiorno ];
    for(int i=0; i<maxGiorno; i++) giorni[i] = String.valueOf(i+1);
    
    // Usa l'array per la JComboBox
    ...

    Ciao.
    Ciao Lele, ho inteso benissimo cosa volevi dire... e se posso permettermi la questione è molto più semplice... ossia basta fare un controllo e aggiungere i giorni fino a quando cambia l'"int" del mese
    codice:
    uscita:
    for(int i=1; i<=31; i++)
    {
           giornoMax++;
           dd.add(Calendar.DAY_OF_MONTH,1);
           if(dd.get(Calendar.MONTH)!=(mese-1))
           {
                break uscita;
           }
    }
    in questo caso giornoMax viene impostato sul massimo dei giorni del mese....

    Beh.. dopo questa breve parentesi ... il mio problema non è questo ma bensì come poter aggiornare in fase di esecuzione il JComboBox dei giorni... in base alla scelta del mese e dell'anno scelto...
    Logicamente il pannello lo deve rendere visibile immediatamente alla sua creazione... e se un utente cambia il mese... beh... come (durante l'esecuzione) poter modificare il JComboBox del giorno???
    Ultima modifica di miticogilles; 04-02-2014 a 01:37

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    Ciao Lele, ho inteso benissimo cosa volevi dire... e se posso permettermi la questione è molto più semplice... ossia basta fare un controllo e aggiungere i giorni fino a quando cambia l'"int" del mese

    codice:
    uscita:
    for(int i=1; i<=31; i++)
    {
           giornoMax++;
           dd.add(Calendar.DAY_OF_MONTH,1);
           if(dd.get(Calendar.MONTH)!=(mese-1))
           {
                break uscita;
           }
    }

    Beh... perchè tutta quella complessità: se guardi bene, io di if non ne ho proprio usate e nemmeno ho usato cicli for per ottenere il massimo giorno del mese. Il ciclo for successivo (che è già cablato perfettamente sul numero di giorni del mese), serve solo a costruire l'array dei giorni da passare alla JComboBox (o, se vuoi una cosa terra terra, solo per riempire il ComboBox), non per "calcolare il massimo giorno"... quello già ce l'ho al passaggio precedente.

    in questo caso giornoMax viene impostato sul massimo dei giorni del mese....

    ... che io ricavo con una sola chiamata a getMaximum() sull'oggetto Calendar... senza avere un ciclo for per ciascun giorno del mese.

    Beh.. dopo questa breve parentesi ... il mio problema non è questo ma bensì come poter aggiornare in fase di esecuzione il JComboBox dei giorni... in base alla scelta del mese e dell'anno scelto...
    Logicamente il pannello lo deve rendere visibile immediatamente alla sua creazione... e se un utente cambia il mese... beh... come (durante l'esecuzione) poter modificare il JComboBox del giorno???

    Aggiungi un ActionListener (o un ItemListener) ai JComboBox. Quando ricevi l'evento verifichi se la selezione è cambiata e, in tal caso, ricalcoli la JComboBox dei giorni.


    codice:
    comboBoxAnno.addItemListener( new ItemListener() {
       @Override
       public void itemStateChanged(ItemEvent ie) {
          verificaCambioAnno();
       }
    });
    
    comboBoxMese.addItemListener( new ItemListener() {
       @Override
       public void itemStateChanged(ItemEvent ie) {
          verificaCambioMese();
       }
    });
    
    ...
    
    private void verificaCambioAnno() {
       if ( l'anno è cambiato ) {
          ricalcolaGiorni();
       }
    }
    
    private void verificaCambioMese() {
       if ( il mese è cambiato ) {
          ricalcolaGiorni();
       }
    }
    
    ...
    
    private void ricalcolaGiorni() {
       int annoScelto = ...;
       int meseScelto = ...;   // Mese = numero - 1!!!
    
       // Mi posiziono al giorno 1 del mese/anno scelto
       GregorianCalendar gc = new GregorianCalendar(annoScelto, meseScelto, 1);
    
       // Ottengo il massimo giorno di quel mese
       int maxGiorno = gc.getMaximum( Calendar.DATE );
    
       // Svuoto la JComboBox dei giorni
       comboBoxGiorni.removeAllItems();
    
       // La riempio con i nuovi valori
       for(int i=0; i<maxGiorno; i++) comboBoxGiorni.addItem( String.valueOf(i+1) );
    }

    Ciao.
    Ultima modifica di LeleFT; 04-02-2014 a 10:35

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.