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 :

Charger JList en fonction de selection JComboBox


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut Charger JList en fonction de selection JComboBox
    Bonjour,
    Je sollicite votre aide car j'ai un souci avec mes JComboBox et JList. J'ai une liste qui est liée avec une combo box. Càd, la JList est chargée et remplie en cliquant sur l'item de la combo, et chaque clic sur l'item de la combo doit afficher des données différentes dans la JList.

    Or, dans mon cas, cela fonction seulement lors du 1e clic, les données sont bien chargées dans la liste mais à partir du 2e clic (par ex: un autre item) il se passe rien dans la liste. Les données qui y sont affichées sont tjr les mêmes (Celles obtenues par le 1e clic).

    Je précise que sur l'affichage console, ces données changent à chaque clic.

    Pourriez-vous éclairer ma lanterne, SVP?

    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
     
    private JComboBox getJComboCat() {
    		if (jComboCat == null) {
    			jComboCat = new JComboBox();
    			jComboCat.setModel(new DefaultComboBoxModel(new String[]{"Carte graphique", "Carte mère",
    		            "Clavier", "Connectiques", "Disque dur", "Ecran", "Processeur", "Souris", "Unité centrale", "Webcam"}));
    			jComboCat.addItemListener(new ItemListener(){
     
    					@Override
    				public void itemStateChanged(ItemEvent e) {
    					jScrollPane2.setViewportView(jListLib);
    					jComboCat = (JComboBox) e.getSource();
    					String data = (String) jComboCat.getSelectedItem();				
    					listLibelle(data);
    				}					
    			});
    			jComboCat.setBounds(new Rectangle(130, 180, 260, 25));
    		}
    		return jComboCat;
    	}
    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
     
    private void listLibelle(String s) {
    		try {
    			String url = "jdbc:mysql://localhost:3306/gestion_stock";
    			Connection connection = DriverManager
    					.getConnection(url, "root", "");
    			Statement stmt = connection.createStatement();
    			ResultSet rs = stmt
    					.executeQuery("select DISTINCT Libellé from stock WHERE Catégorie LIKE '%"
    							+ s + "%'");
    			modelLib = new DefaultListModel();
    			while (rs.next()) {
    				modelLib.addElement(rs.getString("Libellé"));
    				System.out.println("Purchage.listLibelle: "+ modelLib);
    			}
    		} catch (SQLException e) {
    			System.out.println("Purchase.getJListLib()" + e.getMessage());
    			System.out.println(e.getStackTrace());
    		}
    		if (jListLib == null) {								
    			jListLib = new JList(modelLib);
    			System.out.println("Purchase.getJListLib(): " +modelLib);
    			jListLib.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    		}
    	}
    Merci d'avance de votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Par défaut
    La première fois jListLib est null donc tu passe dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		if (jListLib == null) {								
    			jListLib = new JList(modelLib);
    			System.out.println("Purchase.getJListLib(): " +modelLib);
    		        jListLib.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    		}
    La deuxième fois tu n'y passe plus car jListLib != null, mais tu as changé de modèle : modelLib = new DefaultListModel();
    Donc la jListLib n'est pas mis à jour avec le nouveau modèle.

    1) Créer le modèle qu'une seule fois
    2) Le lier au JList
    3) Chaque changement dans le modèle se répercute dans le JList
    4) Pour changer les valeurs du modèle, supprimer les anciennes valeurs et ajouter les nouvelles.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    Merci beaucoup maisonneuve01, c'était effectivement ça. J'ai fait comme suit et ça a marché.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    jListLib = null;
    if (jListLib == null) {								
    			jListLib = new JList(modelLib);
    			System.out.println("Purchase.getJListLib(): " +modelLib);
    		        jListLib.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    		}
    Cependant, pourrais-tu me dire si c'est la bonne solution ou il existe d'autres meilleurs solutions.
    Merci d'avance.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Par défaut
    Je ne connais pas le code de ta classe mais il y a surement une meilleur façon de faire, recréer un Jlist à chaque fois n'est pas le top.

    Créer le modèle comme variable de la classe.
    A l'endroit ou tu créer ton interface graphique, créer un JList lier au modèle.
    ensuite il suffit juste de changer les valeurs dans le modèle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private DefaultListModel modelLib = new DefaultListModel();
     
    ...
     
            private void listLibelle(String s) {
    ...	
                    modelLib.clear()
    		while (rs.next()) {
                            modelLib.addElement(rs.getString("Libellé"));
                    }
    ...
    	}

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    ok, j'ai suivi ton conseil. Merci encore

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

Discussions similaires

  1. [JList]Clic droit et selection
    Par minus dans le forum Composants
    Réponses: 3
    Dernier message: 20/01/2009, 12h29
  2. [PHP-JS] syntaxe fonction verification select
    Par calitom dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2006, 15h53
  3. Réponses: 3
    Dernier message: 23/06/2006, 11h03
  4. [debutant] charger une page selon un select
    Par scorpking dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 02/06/2006, 10h37
  5. Multi selection JcomboBox
    Par delma dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 28/05/2006, 12h12

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