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

Agents de placement/Fenêtres Java Discussion :

JComboBox / ArrayList - valeurs distinctes


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut JComboBox / ArrayList - valeurs distinctes
    Bonjour,

    J'avance petit à petit dans mon premier micro-développement; une solution trouvée laisse apparaitre de nouveaux problèmes. Celui d'aujourd'hui est l'alimentation d'une combobox avec les valeurs d'une table MySQL.

    Jusque là, pas de souci particulier. Le problème se pose lorsque les valeurs dans ma combobox se présente sous cette forme [valeur1, valeur2,...] en une seule et unique ligne. Alors que j'attendais une valeur par ligne.

    Voici mon moteur de connexion :


    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
    63
    64
    65
    66
    67
    68
    69
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JOptionPane;
    import javax.swing.JButton;
    import javax.swing.JTextField;
    import java.sql.*;
    import java.text.NumberFormat;
    import java.text.ParsePosition;
    import java.util.ArrayList;
     
    public class MoteurConnect {
     
    	public ArrayList MaConnec(){		
    		// Information d'accès à la base de données
    		String url = "jdbc:mysql://localhost/test";
    		String login = "root";
    		String passwd = "root";
    		int compteur=0;
    		String test="";
    		ArrayList<String> list = new ArrayList<String>();
    		Connection cn =null;
    		Statement st =null;
    		ResultSet rs=null;
     
    		try {
     
    			// Etape 1 : Chargement du driver
    			Class.forName("com.mysql.jdbc.Driver");
     
    			// Etape 2 : récupération de la connexion
    			cn = DriverManager.getConnection(url, login, passwd);
     
    			// Etape 3 : Création d'un statement
    			st = cn.createStatement();
     
    			String sql = "select nom from data.valeurs";
     
    			//				// Etape 4 : exécution requête
    			rs = st.executeQuery(sql); 		
     
    			// Si récup données alors étapes 5 (parcours Resultset)
     
    			while (compteur<5){
    					compteur++;
    					while (rs.next()) {
    					test=(rs.getString("nom"));
    					list.add(test);	
    					}
    			}
     
    					//			ResTest = String.valueOf(test);
     
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			// TODO: handle exception
    			e.printStackTrace();
    		} finally {
    			try {
    			// Etape 6 : libérer ressources de la mémoire.
    				cn.close();
    				st.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		return list;
    	}
    }
    Et ci-dessous ma grille (pour la forme) :

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    import java.awt.BorderLayout;
    import javax.lang.model.element.Modifier;
    import javax.swing.*;
    import java.awt.GridLayout;
    import java.awt.BorderLayout;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Statement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
     
     
    public class Grille extends JApplet {
     
    	JTextField champNom = new JTextField(30);
    	JTextField champPrénom = new JTextField(30);
    	JButton boutonLib1 = new JButton("Nom");
    	JButton boutonLib2 = new JButton("Prénom");	
    	JButton boutonReset = new JButton("RESET");
    	JButton boutonInject = new JButton("INJECT");
    	JComboBox ComboNom = new JComboBox() ;
     
    	/**
             * @param args
             */
    	Grille(){
     
    	JPanel contenuFenêtre = new JPanel();
    	BorderLayout disposition = new BorderLayout();
     
    	contenuFenêtre.setLayout(disposition);
    	JPanel panneauChamp = new JPanel();
     
    	GridLayout dispositionChamp = new GridLayout(2, 2);
    	panneauChamp.setLayout(dispositionChamp);
    	panneauChamp.add(boutonLib2);
    	panneauChamp.add(champPrénom);
    	panneauChamp.add(boutonLib1);
    	panneauChamp.add(champNom);
     
    	contenuFenêtre.add("North", panneauChamp);
     
    	JPanel panneauOP = new JPanel();
    	GridLayout dispositionOP = new GridLayout(2, 2);
    	panneauOP.setLayout(dispositionOP);
    	panneauOP.add(boutonReset);
    	panneauOP.add(boutonInject);
    	panneauOP.add(ComboNom);
     
        //  valeur liste déroulante : 
     
    	MoteurConnect maConnexion = new MoteurConnect();
     
    	ComboNom.addItem(maConnexion.MaConnec());
     
    	contenuFenêtre.add("South", panneauOP);
     
    	//Crée le cadre et lui affecte son contenu
    	JFrame frame = new JFrame("Grille");
    	frame.setContentPane(contenuFenêtre);
    	//Affecte à la fenêtre des dimensions suffisantes pour
    	//prendre en compte tous les contrôles
    	frame.pack();
    	//Affiche la fenêtre
    	frame.setVisible(true);	
    	//Instancie le récepteur d'événements et l'enregistre
    	//auprès de chaque bouton
    	MoteurInject moteurInject = new MoteurInject(this);
    	MoteurReset moteurReset = new MoteurReset(this);
    //
    	boutonReset.addActionListener(moteurReset);
    	boutonInject.addActionListener(moteurInject);
    }
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Grille t = new Grille();
    		}
     
     
    }
    J'espère avoir des éléments de réponses qui me permettront d'avancer.

    Merci.

  2. #2
    Membre expérimenté Avatar de kalina
    Femme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 220
    Par défaut
    Bonjour,
    c'est normal que tu obtiennes une seule ligne puisque en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboNom.addItem(maConnexion.MaConnec());
    tu ne fais qu'ajouter ton arrayList en un seul élément à ton comboBox avec "addItem", ce qu'il faut faire pour ajouter le contenu de ton ArrayList sous forme de lignes c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboNom.setModel(new javax.swing.DefaultComboBoxModel(maConnexion.MaConnec().toArray()));
    Bon courage.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je rajoute ceci:

    une méthode commence toujours par une minuscule (conventions java) pour ne pas confondre avec les classes
    une méthode doit avoir un nom explicite

    En tout état de cause, appeler la méthode "public List<String> getDataValues" aurait été bien préférable à "public ArrayList MaConnect"


    Dernière chose: en général, mauvais plan de mettre un accès à une base de données dans une applet, tu ne veux pas que le premier venu soit capable d'aller faire un delete from machinchose

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    Bonjour Kalina,

    Effectivement cela fonctionne très bien avec ton code.

    Pourrais-tu m'expliciter plus précisement ta ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboNom.setModel(new javax.swing.DefaultComboBoxModel(maConnexion.MaConnec().toArray()));
    Merci.

  5. #5
    Membre expérimenté Avatar de kalina
    Femme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 220
    Par défaut
    Bonjour,
    Citation Envoyé par dieu08 Voir le message
    Bonjour Kalina,

    Effectivement cela fonctionne très bien avec ton code.

    Pourrais-tu m'expliciter plus précisement ta ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboNom.setModel(new javax.swing.DefaultComboBoxModel(maConnexion.MaConnec().toArray()));
    Merci.
    Eh bien dieu08, grosso-modo tu as la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void setModel(ComboBoxModel model)
    que le comboBox utilise pour avoir sa liste de données.
    pour le paramètre "ComboBoxModel" j'ai utilisé un objet de la classe "javax.swing.DefaultComboBoxModel" dont le constructeur prend un tableau en paramètre, mais comme toi c'est un ArrayList que tu utilises, il faut le transformer en tableau avec toArray(), et je t'invite à consulter les cours de developpez.com pour plus de précisions!
    bon courage

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    Merci beaucoup Kalina pour ces précisions.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    je rajoute ceci:

    une méthode commence toujours par une minuscule (conventions java) pour ne pas confondre avec les classes
    une méthode doit avoir un nom explicite

    En tout état de cause, appeler la méthode "public List<String> getDataValues" aurait été bien préférable à "public ArrayList MaConnect"


    Dernière chose: en général, mauvais plan de mettre un accès à une base de données dans une applet, tu ne veux pas que le premier venu soit capable d'aller faire un delete from machinchose
    Merci pour tes conseils que je vais tenter de respecter pour mes prochains développements

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

Discussions similaires

  1. Choix d'un Index sur un champ ayant peu de valeurs distincts
    Par cfeltz dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/04/2007, 08h35
  2. Récupération de valeurs distinctes dans excel
    Par developpeur62 dans le forum Excel
    Réponses: 1
    Dernier message: 23/10/2006, 11h41
  3. Jcombobox suppression valeur
    Par lazzeroni dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 12/05/2006, 16h48
  4. valeurs distinctes dans un formulaire
    Par Goldenduck4000 dans le forum Access
    Réponses: 4
    Dernier message: 02/05/2006, 16h40
  5. 2 valeurs distincts dans un tableau à 2 dimensions...
    Par toyyo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/08/2005, 16h00

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