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

Composants Java Discussion :

Mise à jour de l'affichage d'un JComboBox


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Par défaut Mise à jour de l'affichage d'un JComboBox
    Bonjour à tous,

    (C'est la première fois que je post j'espère que je ne fais rien de mal ^^)

    Voila, j'ai un petit problème avec une JComboBox. Lorsque je lance mon application, ma JComboBox se remplit avec des informations que je récupère dans un fichier .xml . Jusque là aucun problème, tout s'affiche très bien.

    Ensuite je propose à l'utilisateur de modifier la valeur qu'il aura choisit dans la JcomboBox (via des JTextArea) et il doit cliquer sur un bouton "modifier" pour valider. Là encore tout se passe bien, mon fichier .xml est bien modifié.

    Je relance alors a nouveau la fonction qui me permet de remplir ma JComboBox et je fais une validate() et un repaint() de ma fenêtre. Mais lorsque j'ouvre ma JComboBox elle contient toujours les informations de la précédente recherche (celles avant les modifications). Je suis obligé de relancer ma page (via ma MenuBar) afin que les nouvelles informations apparaissent et ce n'est vraiment pas ergonomique.


    J'espère avoir été clair, voici des fragments de mon code.

    Voici le code du Jpanel qui contient ma JComboBox :
    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
     
    public class FenetreConfiguration extends JPanel{
        FenetrePrincipale fen;//C'est ma JFrame
        ....
        JComboBox concordanceList;//La JComboBox qui me pose problème
        JButton concordanceModif = new JButton("Modifier");
        ....
        ConfigurationListener listener;//Le listener qui s'occupe de ma fenêtre
        ....
     
        public FenetreConfiguration(FenetrePrincipale fen){
     
                 this.fen = fen;
     
    	listener = new ConfigurationListener(this);
     
    	concordanceModif.setActionCommand("concordanceModif");
    	concordanceModif.addActionListener(listener);
     
    	remplirConcordance();		
     
                 placerConcordance();//place ma JComboBox dans ma Jframe
     
        }
     
        protected void remplirConcordance(){
    	try{
    		document = sxb.build(new File("..."));
    		racine = document.getRootElement();
     
    		List listELement = racine.getChild("CONCORDANCE").getChildren("ETAT");
    		Iterator it = listELement.iterator();
    		ArrayList concordanceTab = new ArrayList();
    		concordanceTab.add("Nouveau");
    		while(it.hasNext()){
    			Element courant = (Element)it.next();
    			concordanceTab.add(courant.getChildText("SOURCE")) //Je récupère le valeur que je veux afficher dans ma JComboBox
    		}
    		concordanceList = new JComboBox(concordanceTab.toArray());
     
    		concordanceList.setActionCommand("concordanceList");
    		concordanceList.addActionListener(listener);
    	}catch(Exception e){...}
        }
    }
    Et maintenant, le code de mon listener :
    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
     
    public class ConfigurationListener implements ActionListener {
        FenetreConfiguration fenConf;
        ....
     
        public ConfigurationListener(FenetreConfiguration fenConf){
    	this.fenConf = fenConf;
        }
     
        if(e.getActionCommand().equals("concordanceModif")){
    	try{
    		document = sxb.build(new File("..."));
    		racine = document.getRootElement();
     
    		List ListElement = racine.getChild("CONCORDANCE").getChildren("ETAT");
     
                              //Je récupère l'élément selectionné
    		int ind = fenConf.concordanceList.getSelectedIndex();
    		Element modif = (Element)ListElement.get(ind-1);
     
                              //Je modifie les éléments dont j'ai besoin		
    		Element src = modif.getChild("SOURCE");
    		Element dst = modif.getChild("DESTINATION");		
    		src.setText(fenConf.nomEtatSRC.getText());
    		dst.setText(fenConf.nomEtatDST.getText());
     
    	}catch(Exception ex){...}
    	try {
    		enregistreFichier("..."); //J'enregistre mon fichier .xml modifié
    	} catch (Exception e1) {}
     
                 //Jusque là tout fonctionne correctement
     
     
                 //-------------->C'EST ICI QUE CA MARCHE PAS<------------//
    	fenConf.remplirConcordance();
    	fenConf.fen.validate();
    	fenConf.fen.repaint();
        }
    }

    Voila, si vous avez une idée n'hésitez pas. (ou tout autres commentaires sur mon code qui me permettrait de m'améliorer ^^)

    Si vous voulez d'autres informations morceaux de codes...etc demandez moi.

    Merci d'avance à tout le monde.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Le problème se situe sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    concordanceList = new JComboBox(concordanceTab.toArray());
    A chaque modification, tu créés une nouvelle ComboBox. L'ancienne est toujours visible, mais la nouvelle, celle avec les valeurs actuelles, n'est pas affichée !
    Il ne faut pas procéder ainsi. La JComboBox doit être créée une fois pour toute. Pour modifier les données, tu dois passer par son modèle.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre éprouvé Avatar de bygui
    Homme Profil pro
    PLM/ALM
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : PLM/ALM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Par défaut
    Bonjour,
    Le problème viens peut être du fait que tu recréés une comboBox à chaque passage. Créez-la une fois à l'initialisation


    zut il y a plus rapide que moi

  4. #4
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Par défaut
    Merci pour cette réponse rapide.
    En effet c'est de la que venais mon erreur

    J'ai tenté de modifier simplement la ligne que je modifier plutôt que de tout vider pour la remplir à nouveau. Mais la méthode setSelectedItem ne faisais pas ce que je voulais.

    J'ai alors tenté de retirer l'objet selectionné dans ma JComboBox et d'en rajouter un nouveau et la ca fonctionne parfaitement. La mise à jour de l'affichage se fait sans problème à présent.

    Voici les 2 lignes de codes que j'ai rajouté à la fin de mon bloc "try" dans mon listener :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        fenConf.concordanceList.removeItem(fen.concordanceList.getSelectedItem());
        fenConf.concordanceList.addItem(new ElementConcordanceList(src.getText(), dst.getText()));

    C'est pas très "joli" mais ca fonctionne ^^.
    Encore merci à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Dessiner en Wpf et mise à jour de l'affichage
    Par Orc_Fayeh dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 11/04/2008, 11h51
  2. Mise à jour de l'affichage des messages
    Par emmy99 dans le forum Langage
    Réponses: 8
    Dernier message: 28/01/2008, 19h36
  3. Mise à jour de l'affichage
    Par piteon dans le forum 2D
    Réponses: 8
    Dernier message: 13/02/2007, 11h59
  4. Mise à jour de l'affichage de la fenêtre
    Par YuGiOhJCJ dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/12/2006, 10h55
  5. [JTree] Mise à jour de l'affichage
    Par freddy766 dans le forum Composants
    Réponses: 3
    Dernier message: 16/10/2006, 10h39

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