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

Interfaces Graphiques en Java Discussion :

Sélection de JCombobox


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut Sélection de JCombobox
    j'ai un JCombobox dans mon interface, qui se remplie à partir de ma base de données au fur et à mesure de ma saisi (sur le combo, comme sur google) pour rechercher un nom (qui est dans ma BD)... une fois trouvé le Item sélectionné me renvoie null, voici ma tranche de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String s;
             s=(String) j.getSelectedItem();
             l.setText("voici le nom selectionné: "+s);
    ça me renvoie toujours "voici le nom selectionné: null"
    ça fait quelques jours que je cherche, mais je n'ai pas trouvé ou est le problème!
    qui peut me trouver une solution, ou me proposer un autre composant pour rechercher mes paient (par leur nom et prénom).

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Points : 126
    Points
    126
    Par défaut
    Tu cast un objet en String, c'est impossible! C'est pour ça que ton programme te retourne null.
    Pour ce que tu veux faire, il faut que tu utilises un Listener comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	  class ComboChoose implements ItemListener{
     
    		    public void itemStateChanged(ItemEvent e) {
    		      s = (String) e.getItem();
    		    }               
    		  }
    Et ajouter ce listener à ta JComboBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maJComboBox.addItemListener(new ComboChoose());
    Ta String doit être déclarée comme static en dehors de toutes les méthodes.

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    Non c'est possible, je travaille déja avec des combobox remplie par moi même; et ça renvoie le bon texte (j'ai tjs généré actionPerformed), je crois que le combo ne doit pas se remplir de ma BDD, n'est ce pas?

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Points : 126
    Points
    126
    Par défaut
    C'est possible...
    Peux-tu nous montrer un peu plus de ton code?

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    Mon combobox se trouve sur un Jpanel, voici le 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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    public class box extends javax.swing.JPanel {
     
        /**
         * Creates new form box
         */
     
        public box() {
               initComponents();
     
     
     
     
        JTextField text = (JTextField) j.getEditor().getEditorComponent();
     
     text.getDocument().addDocumentListener(new DocumentListener() {
     
                public void insertUpdate(DocumentEvent documentEvent) {
                     updateInputText();
                }
     
     
                public void removeUpdate(DocumentEvent documentEvent) {
                     updateInputText();
                }
     
                public void changedUpdate(DocumentEvent documentEvent) {
                     updateInputText();
                }
     
                private void updateInputText() {
     
     
              ArrayList a;
            a= new ArrayList<String>();
            ArrayList f;
            f= new ArrayList<String>();
     
              try {
                String query =null;
                String q =null;
                String q1 =null;
                String UrlBase = "jdbc:postgresql://localhost/gestion du cms";
                String driver="org.postgresql.Driver";
                String user = "postgres";
                String MDP="*****";
     
                try {
                    Class.forName("org.postgresql.Driver");
                } catch (ClassNotFoundException ex) {
     
                }
                Connection conn = DriverManager.getConnection(UrlBase, user, MDP);
     
    Statement state = conn.createStatement();
     
    q =("SELECT nom,prenom,codepatient FROM patientsportif WHERE nom LIKE '"+(((JTextField)box.this.j.getEditor().getEditorComponent()).getText())+"%'");
     
     
     
     
    ResultSet result = state.executeQuery(q );
     
    ResultSetMetaData resultMeta = result.getMetaData();
     
    while(result.next()){
    for(int i = 1; i <= resultMeta.getColumnCount(); i++)
     
        a.add(result.getObject(i).toString());
     
    }
     
    for(int i = 0; i <a.size(); i=i+3){
     
        f.add(a.get(i)+" "+a.get(i+1)+" "+a.get(i+2));
    }
     
    box.this.j.setModel(new javax.swing.DefaultComboBoxModel(f.toArray()));
     
     
     
    result.close();
    state.close();
    } catch (Exception e) {
    e.printStackTrace();
    }  
                box.this.j.setPopupVisible(true); }
    });
        j.addItemListener(null);
     
     
     
        }
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            jLabel1 = new javax.swing.JLabel();
            j = new javax.swing.JComboBox();
            l = new javax.swing.JLabel();
     
            setBackground(new java.awt.Color(255, 255, 255));
     
            jLabel1.setText("Nom et prénom     ");
     
            j.setEditable(true);
            j.setToolTipText("");
            j.addItemListener(new java.awt.event.ItemListener() {
                public void itemStateChanged(java.awt.event.ItemEvent evt) {
                    jItemStateChanged(evt);
                }
            });
            j.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jActionPerformed(evt);
                }
            });
     
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
            this.setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(86, 86, 86)
                    .addComponent(jLabel1)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addComponent(j, javax.swing.GroupLayout.PREFERRED_SIZE, 258, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 8, Short.MAX_VALUE)
                    .addComponent(l, javax.swing.GroupLayout.PREFERRED_SIZE, 298, javax.swing.GroupLayout.PREFERRED_SIZE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(73, 73, 73)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel1)
                        .addComponent(j, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(87, 87, 87)
                    .addComponent(l, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(92, Short.MAX_VALUE))
            );
        }// </editor-fold>                        
     
        private void jActionPerformed(java.awt.event.ActionEvent evt) {                                  
     
              String s;
             s=(String) j.getSelectedItem;
             l.setText("voici le nom selectionné: "+s);
     
     
     
        }

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Points : 126
    Points
    126
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        j.addItemListener(null);
    Le problème provient surement d'ici!^^

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    non, je ne pense pas, cette instruction je l'ai ajouté, lors d'essai de votre proposition!

  8. #8
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 131
    Points : 93
    Points
    93
    Par défaut
    salut,amina
    j'ai pas vu ton code complétement mais normalement ,vous avez un problème dans le remplissage du comboBox ,puisque la liste retourné est vide ,càd que les données obtenue par l’exécution de la bonne requête n'intègrent pas dans le combo ,voici cette portion du code qui va peut être vous aidez :
    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
     
    JComboBox comboBox = new JComboBox();
    comboBox.setBounds(48, 30, 130, 20);
    		panel_2.add(comboBox);
    	try {
    		Class.forName("com.mysql.jdbc.Driver" );
    		String url = "jdbc:mysql://localhost:3306/nom de la BDD";
    		Connection conn = DriverManager.getConnection(url, user,
    		passwd);
     
    		java.sql.Statement state =  conn.createStatement();
    		 ResultSet 	 result;
    		 result=state.executeQuery("la requête ");
    /* elle va vous permettre de lire ligne par ligne le contenu retourné par la requête plus précisément les extension 
    d'une colonne c'est préférable de sélectioner un champs pour une requête dans votre cas  
    puisque c'est un combo en métrant   la valeur 1 comme index  càd result .getString(1)*/
    			while(result.next()){
    				comboBox.addItem(result.getString(l'index de la colonne));
     
    			}	
     
    			result.close();
    			state.close();
    	} catch (Exception e1) {
     
    				e1.printStackTrace();
    			}
    /*ensuite vous pouvez récupérer le choix sélectionner  facilement par ca sans caste puisque le String est un OBJET */ 
    System.out.print("ma sélection"+comboBox.getSelectedItem());
    bon concernant l'index de la colonne sa dépend le nombre du champs avec leurs extensions retournés par la requête ,et bien sure result.getString ou .getInt....etc."sa dépend le type du champs" suivi de la position de la colonne trié selon l'ordre que vous ayez donné pour les champs demandé dans la requête si il y a beaucoup du champs sectionnés dans une requête( bien sure cette instruction elle est utilisable pour récupéré les données d'une table) ,
    NOTE:cette ensemble d'instruction on peut la mettre dans le constructeur de la JFrame pour que le combobox soit prêt lors de l'ouverture d'une fenêtre
    BON COURAGE , et j’espère que tu a une aidée .

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si getSelectedItem est null, c'est que rien n'est sélectionné dans la combo. C'est facile à dire comme ça évidement, mais il faut essayer de comprendre ce qui se passe. Tu passe par une actionPerformed. L'actionPerformed est appelé lorsque la sélection a changé. Même si ça veux dire qu'elle est passée de blabla à null. Donc la première chose à regarder au moment où tu vois ton null dans la console, c'est
    1) est-ce que la combobox est bien refermée? Lorsuq'un item est sélectionné, la combo se ferme
    2) est-ce que dans la version fermée de ta combobox, ta string apparait bien à l'écran? Comme ça:
    Nom : combobox1.gif
Affichages : 191
Taille : 11,1 Ko


    Seulement dans ces conditions, il serait normal d'avoir autre chose que null. Je pense que à aucun moment, tu ne clique sur la valeur que tu veux sélectionner dans ta combobox et, tu pense que parce qu'il ne reste qu'une seule valeur possible, c'est celle là qui est selectionnée. Je pense aussi, mais il faudrait vérifier, que ton actionPerformed se déclenche à chaque fois que tu change ton model.



    Citation Envoyé par JeremGamer Voir le message
    Tu cast un objet en String, c'est impossible! C'est pour ça que ton programme te retourne null.
    Non. Si il n'était pas possibe de Caster en String (parce qu'on aurait mis autre chose), tu aurais un ClassCastException!

Discussions similaires

  1. Sélection de JComboBox nulle ?
    Par BenkessiratAmina dans le forum Débuter
    Réponses: 10
    Dernier message: 18/06/2014, 16h44
  2. Réponses: 2
    Dernier message: 12/01/2012, 23h12
  3. sélection élément JCombobox
    Par le_sayan dans le forum Débuter
    Réponses: 2
    Dernier message: 30/07/2010, 14h00
  4. Couleur de sélection dans un JComboBox
    Par Foub dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 11/03/2007, 15h20
  5. Réponses: 6
    Dernier message: 20/09/2006, 11h01

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