IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Pb de mise à jour d'un JComboBox


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut Pb de mise à jour d'un JComboBox
    Salut à tous,

    Voilà j'ai codé un calendrier qui marche et maintenant je suis en train de l'améliorer afin de pouvoir changer la locale du calendrier et ainsi le mettre à jour dynamiquement. Le changement est effectif pour les jours de la semaine et du mois mais pas pour le JComboBox des mois. Soit je récupère l'exception : Exception in thread "main" java.lang.NullPointerException at Calendar.actionPerformed(Calendar.java:95) ou soit j'ai les mois dans les 2langues que j'utilise qui s'affichent dans le JComboBox. Je sais où est le problème mais je n'arrive pas à le corrgier. Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    public class Calendar {
        ...
        static JComboBox monthsCombo;
        static String[] months;
        static Month[] onlyMonths;
        ...
     
        public Calendar(JPanel westMainWindowPanel, Locale locale){ 
     	...
    	monthsCombo = new JComboBox();
            updateMonth();
      	...	
    	monthsCombo.addActionListener(new ActionListener(){
                 public void actionPerformed(ActionEvent e){
    		System.out.println(monthsCombo.getSelectedItem()); // Affichage de null			
                    System.out.println(((Month)monthsCombo.getSelectedItem()).getMonthIndex()); // J'ai l'exception qui se fini ici
    	            ...
    	     }
                }); 
        }
     
        // MAJ du calendrier
        protected static void updateCalendarLocale(Locale locale){ 
                ...	
                updateMonth();
    	    // Les autres MAJ
                ...
        }
     
        // MAJ du combo box des mois
        private static void updateMonth(){ 
            // Je récupère les mois en fonction de la locale
        	months = dateSymbols.getMonths();
        	onlyMonths = new Month[Calendar.UNDECIMBER];
        	String month = "";
     
            // Ce for permet d'enlever le 13ième mois vide retourné par la méthode getMonths() et d'avoir des couples (numéro du mois, nom du mois)
     	for (int i = Calendar.JANUARY; i < Calendar.UNDECIMBER; i++){
     	         month = months[i].substring(0,1).toUpperCase()+months[i].substring(1);
     	         onlyMonths[i] = new Month(i, month);
     	}
     
            // Je test si le combo a déjà été affiché
            // Si c'est le cas je le met à jour, du moins j'essaye parce que c'est ici que ça bloque
    	if (monthsCombo.getItemCount() == 12) {
                     // J'ai l'exception qui commence ici
     	         monthsCombo.removeAllItems();			
     
                     // Je rempli le JcomboBox avec les nouvelles valeurs
     	         for (int i = Calendar.JANUARY; i < Calendar.UNDECIMBER; i++){
                              monthsCombo.addItem(onlyMonths[i]);
                              System.out.println(monthsCombo.getItemAt(i));
     	         }
    	}
            // Sinon je le crée
    	else {
    		monthsCombo = new JComboBox(onlyMonths);
    	}
     
    	monthsCombo.setSelectedIndex(selectedMonth);
        }
    }
    Sinon, je ne sais pas si je devrais utiliser un ComboBoxModel. Comment ça marche et quel serait son utilité dans mon cas ?

    Merci d'avance pour vos réponses

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Personne n'a d'idées pour résoudre mon problème ? C'est surement une erreur bête mais je n'arrive pas à la touver.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Franchement un petit coup de pouce serait le bienvenu .

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    J'ai encore essayé aujourd'hui mais je n'arrive pas à mettre dynamiquement le contenu de mon JComboBox.

    J'ai réussi à le faire dans un autre cas dans une fenêtre pop-up parce que dans ce cas le JComboBox est recrée à chaque affichage de la fenêtre donc il n'y a pas de problème pour la mise à jour du contenu.

    Mais sans le recréer j'ai soit l'exception (dans mon post initial) soit mon JComboBox après une sélection reste "bloqué" sur le même item : getSelectedItem() retroune toujours le même item peut importe celui sélectionné. Voilà mon code de la méthode updateMonth pour ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // MAJ du combo box des mois
        private static void updateMonth(){ 
            // Je récupère les mois en fonction de la locale
        	months = dateSymbols.getMonths();
        	onlyMonths = new Month[Calendar.UNDECIMBER];
        	String month = "";
     
            // Ce for permet d'enlever le 13ième mois vide retourné par la méthode getMonths() et d'avoir des couples (numéro du mois, nom du mois)
     	for (int i = Calendar.JANUARY; i < Calendar.UNDECIMBER; i++){
     	         month = months[i].substring(0,1).toUpperCase()+months[i].substring(1);
     	         onlyMonths[i] = new Month(i, month);
     	}
     
    	monthsCombo = new JComboBox(onlyMonths);
     
    	monthsCombo.setSelectedIndex(selectedMonth);
        }

  5. #5
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    Salut,

    Ben oui mais t'as qu'une seule combo...
    Peut etre en en mettant plusieurs au sein d'un GroupButton, et d'appeler le getselectedIndex sur lui...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Citation Envoyé par BainE
    Salut,

    Ben oui mais t'as qu'une seule combo...
    Peut etre en en mettant plusieurs au sein d'un GroupButton, et d'appeler le getselectedIndex sur lui...
    Oui, j'ai qu'un seul combo box mais je ne vois ce que celà va apporter à mon problème si j'en rajoute un et que j'appelle getselectedIndex sur lui.

    Personne d'autre aurait une idée pour résoudre mon problème svp.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    J'ai essayé de résoudre mon problème en utilisant un ComboBoxModel mais j'ai le même problème que mon post du 13/12/2006. Je dois surement mal mis prendre mais où là j'ai vraiment besoin de votre aide parce que je suis largué. Ca fait maintenant plus de 2 semaines que j'ai entre autre ce problème et je tourne en rond. Si ça peut vous aider voilà mon modèle (c'est mon premier modèle alors il doit surement il y avoir des fautes ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    public static class MonthComboBoxModel extends AbstractListModel implements ComboBoxModel{
     
    	private GCMonth[] months;
    	private GCMonth item;
    	private final ArrayList<ListDataListener> listeners = new ArrayList<ListDataListener>();
     
    	public MonthComboBoxModel(GCMonth[] months){
    		this.months = months;
    	}
     
    	public GCMonth getSelectedItem(){
    		return item;
    	}
     
    	public void setSelectedItem(Object monthSelected){
    		item  = (GCMonth)monthSelected;
    	}
     
    	public GCMonth getElementAt(int index){
    		return months[index];
    	}
     
    	public int getSize(){
    		return months.length;
    	}
     
    	public void addListDataListener(ListDataListener l){
    		listeners.add(l);
    	}
     
    	public void removeListDataListener(ListDataListener l){
    		listeners.remove(l);
    	}
     
    	public void removeAllItems(GCMonth[] newMonths){
    		months = newMonths;
    	}
    }
     
    // Ma méthode updateMonth est maintenant la suivante
    private static void updateMonth(){ 
    	String[] months = dateSymbols.getMonths();
    	GCMonth[] onlyMonths = new GCMonth[Calendar.UNDECIMBER];
    	String month = "";
     
    	for (int i = Calendar.JANUARY; i < Calendar.UNDECIMBER; i++){
    		month = months[i].substring(0,1).toUpperCase()+months[i].substring(1);
    		onlyMonths[i] = new GCMonth(i, month);
    	}
     
    	final MonthComboBoxModel monthModel = new MonthComboBoxModel(onlyMonths);
    	monthsCombo = new JComboBox(monthModel);
     
    	if (monthsCombo.getItemCount() == 12) {			
    		monthModel.removeAllItems(onlyMonths);
    	}
     
    	monthsCombo.setSelectedIndex(selectedMonth);
    }

Discussions similaires

  1. Mise à jour d'un JTable avec JComboBox
    Par Akhilleus dans le forum Composants
    Réponses: 6
    Dernier message: 29/12/2011, 17h00
  2. Pb mise à jour contenu JComboBox
    Par Crhys dans le forum Composants
    Réponses: 3
    Dernier message: 20/07/2011, 11h46
  3. Réponses: 2
    Dernier message: 18/02/2010, 19h13
  4. Mise à jour de l'affichage d'un JComboBox
    Par Abission dans le forum Composants
    Réponses: 3
    Dernier message: 20/05/2009, 09h41
  5. [JCombobox] Evenement et Mise à jours.
    Par Iphelias dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 13/12/2007, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo