Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    4

    Aiuto: impostare la combobox su giorni e mesi precisi.

    Salve, sono nuovo del forum e in generale della programmazione. Pertanto scusate se uso male il forum.
    Durante uno dei miei esercizi mi sono trovato davanti ad un problema che apparentemente non so come risolvere...

    Ho due combobox una del giorno altra del mese. Vorrei che alla selezione del mese i giorni si modificassero in base al mese. Pertanto per i mesi da 30 massimo 30 giorni etc.
    Al mom non mi interessa mettere particolari verifiche per febbraio.
    Parte del codice � autogenerato e pertanto non posso metterci mano.
    Magari è una cosa banale ma al momento per me tanto banale non è.

    Ho una classe Data cosi strutturata:

    public class Data {

    private static final String[] mesi= new String[]{"Gen","Feb","Mar","Apr","Mag","Giu",
    "Lug","Ago","Set","Ott","Nov","Dic"};

    private static final String[] giorni= {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
    "11", "12", "13", "14", "15", "16", "17", "18",
    "19", "29", "30", "31" };

    public static String convertiMese(int mm) {
    return mesi[mm-1];
    }
    public static String convertiGiorno(int gg) {
    return giorni[gg-1];
    }
    }

    in pratica ho creato due array che poi ho associato alle combobox della gui. Avevo pensato ad un ciclo for e degli if ma trovo comunque difficolta. Oltre a ciò conviene aggiungere un evento associato alle combobox?
    Suggerimenti/ aiuti?
    Ultima modifica di Salnero; 29-01-2017 a 04:05

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Io ti suggerirei le seguenti cose.

    L'array dei mesi abbreviati è ok.

    private static final String[] mesi = {"Gen","Feb","Mar","Apr","Mag","Giu", "Lug","Ago","Set","Ott","Nov","Dic"};

    Nota che non c'è bisogno di new String[], non è sbagliato ma è superfluo perché quella è una inizializzazione e quindi si può inizializzare l'array direttamente con { ...... }

    In più puoi aggiungere un altro array con i giorni dei mesi:

    private static final int[] giorniMesi = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    Quindi registri un ActionListener sul JComboBox che contiene i mesi. Quando il mese viene scelto, nel actionPerformed prendi l'indice del mese selezionato (0...11) e questo indice lo puoi usare nell'array giorniMesi. Quindi dato il numero di giorni, vai a svuotare il JComboBox dei giorni e poi con un banale ciclo for lo riempi con degli Integer (nota: meglio Integer che String!) che vanno da 1 fino a giorniMesi[indiceMeseSelezionato]

    Tutto qui. Quanto ho detto è fattibile anche se un po' "spartano". Ci sono design migliori, specialmente se si volesse rendere questa gestione facilmente riutilizzabile (immagina se avessi 10+ combo giorno/mese in parti differenti della applicazione).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    4
    Credo di aver capito... proverò a mettere in codice quanto scritto. Per svuotare la combobox devo usare il removeAll() giusto?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Salnero Visualizza il messaggio
    Credo di aver capito... proverò a mettere in codice quanto scritto. Per svuotare la combobox devo usare il removeAll() giusto?
    removeAllItems()

    (non il removeAll(), perché riguarda il concetto di "container" ... e JComboBox non fa da contenitore di componenti)
    Ultima modifica di andbin; 29-01-2017 a 17:26
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    4
    Ci sono riuscito :P Alla fine ho risolto in maniera un po diversa da come mi hai detto ma funziona. In pratica ho aggiunto quell' event nella gui e scritto il codice che segue.


    private void jComboBox2PopupMenuWillBecomeInvisible(javax.swing .event.PopupMenuEvent evt) {

    int maxGiorni;

    switch(Integer.parseInt(jComboBox2.getSelectedItem ().toString())) {
    case 4:
    case 6:
    case 9:
    case 11: maxGiorni=30;
    break;
    case 2: maxGiorni=Calendar.getInstance().get(Calendar.YEAR )%4==0?29:28;
    break;
    default: maxGiorni=31;
    }
    DefaultComboBoxModel model= new DefaultComboBoxModel();
    for(int i=1;i<=maxGiorni;i++)

    model.addElement(i);
    jComboBox1.setModel(model);
    jComboBox1.setEnabled(true);
    }
    Ultima modifica di Salnero; 02-02-2017 a 19:39

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 © 2025 vBulletin Solutions, Inc. All rights reserved.