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 :

ComboBoxModel problème de sélection


Sujet :

Composants Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut ComboBoxModel problème de sélection
    Bonjour à tous,

    Je cherche a écrire un model de JComboBox ou je peux a tous moment supprimer les items et ajouter d'autres items.

    Le problème vient que je ne peux pas toujours sélectionner un item dans la liste déroulante.
    Si je clique sur un item, il ne me le sélectionne pas toujours!

    Voici ma classe Model:
    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 class MyComboBoxModel extends AbstractListModel implements ComboBoxModel {
    	private ArrayList<String>  liste = new ArrayList<String>();
    	private String selection;
     
     
    	public MyComboBoxModel(){
    	}
     
    	@Override
    	public void addListDataListener(ListDataListener arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public Object getElementAt(int index) {
    		// TODO Auto-generated method stub
    		 return liste.get(index);
    	}
     
    	@Override
    	public int getSize() {
    		// TODO Auto-generated method stub
    		return liste.size();
    	}
     
    	@Override
    	public void removeListDataListener(ListDataListener arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public Object getSelectedItem() {
    		// TODO Auto-generated method stub
    		return selection;
    	}
     
    	@Override
    	public void setSelectedItem(Object anObject) { 
    		selection = (String) anObject;  
    	}
     
    	public void addItem(String liste2){
    		liste.add(liste2);
    		this.fireIntervalAdded(this, getSize(), getSize());
    	}
     
    	public void removeAllItems() {
    		liste.clear();
    		liste = new ArrayList<String>();
    		selection="";
    		this.fireIntervalRemoved(this, 0, getSize());
    	}
     
    	public ArrayList<String> getListe() {
    		return liste;
    	}
    }
    Voici l'init de la liste déroulante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     //Liste déroulante
            membre_masquer= new JComboBox(new MyComboBoxModel());
            membre_masquer_model= (MyComboBoxModel)membre_masquer.getModel();
            membre_masquer.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent event) {
    				iSystem.out.println("test clique liste déroulante"+membre_masquer_model.getSelectedItem()+" | "+membre_masquer.getSelectedIndex());
    				if(membre_masquer.getSelectedIndex()>=0){
    						id_membre = Integer.valueOf((String) membres_masquer.get(membre_masquer.getSelectedIndex()).get(0));
    						System.out.println("test clique liste déroulante"+id_membre);
    					} 
                }               
    		});
    Quand je clique sur un item j'ai dans la console:
    membre_masquer.getSelectedIndex() = -1
    Donc ça me le sélectionne pas.

    Voici comment je rafraîchi la liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    System.out.println("CLEAR");
        		membre_masquer_model.removeAllItems();
        		membres_masquer.clear();
        		membres_masquer=new ArrayList<ArrayList<Object>>();
        		for(int x=0;x<membres_connecter.size();x++){
     
        			membres_masquer.add(x, new ArrayList<Object>());
        			membres_masquer.get(x).add(0, String.valueOf(membres_connecter.get(x).getId()));
        			membres_masquer.get(x).add(1, membres_connecter.get(x));
        			membre_masquer_model.addItem(membres_connecter.get(x).getNom()+" "+membres_connecter.get(x).getPrenom());
        			System.out.println("ADD liste : "+membres_connecter.get(x).getNom()+" "+membres_connecter.get(x).getPrenom());
    			}
    Mon problème vient de la sélection d'un item.
    J'ai l'impression que j'ai des problème lorsque:
    -J'appel membre_masquer_model.removeAllItems();
    -Je clique sur l'item déjà sélectionner auparavant

    J'ai cherché des exemples de model de JComboBox avec ajout ou suppression d'item sur le net, mais je n'ai pas trouvé d’exemples.

    Merci pour votre aide

  2. #2
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Merci Fraco pour le lien mais je n'ai pas d'exemple sur le model du JComboBox.

    J'ai donc ré-écris une classe test, pour que vous puissiez m'aider!
    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
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
     
    import javax.swing.AbstractListModel;
    import javax.swing.ComboBoxModel;
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.event.ListDataListener;
     
    class MyComboBoxModel extends AbstractListModel implements ComboBoxModel {
     
    	/**
             * TEST ComboBoxModel
             */
    	private static final long serialVersionUID = 1L;
    	private ArrayList<String>  liste = new ArrayList<String>();
    	private String selection;
     
    	public MyComboBoxModel(){
    	}
     
    	@Override
    	public void addListDataListener(ListDataListener arg0) {
    		// TODO Auto-generated method stub
    	}
     
    	@Override
    	public Object getElementAt(int index) {
    		// TODO Auto-generated method stub
    		 return liste.get(index);
    	}
     
    	@Override
    	public int getSize() {
    		// TODO Auto-generated method stub
    		return liste.size();
    	}
     
    	@Override
    	public void removeListDataListener(ListDataListener arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public Object getSelectedItem() {
    		// TODO Auto-generated method stub
    		return selection;
    	}
     
    	@Override
    	public void setSelectedItem(Object anObject) { 
    		selection = (String) anObject;  
    	}
     
    	public void addItem(String liste2){
    		liste.add(liste2);
    		this.fireIntervalAdded(this, getSize()-1, getSize()-1);
    	}
     
    	public void removeAllItems() {
    		liste.clear();
    		liste = new ArrayList<String>();
    		selection="";
    		this.fireIntervalRemoved(this, 0, getSize()-1);
    	}
     
    	public ArrayList<String> getListe() {
    		return liste;
    	}
    }
     
    public class JComboBoxModel {
     
    	private static MyComboBoxModel cbox_model;
     
    	public static void main(String[] a){
    	    JFrame frame = new JFrame();
    	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    	    JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
     
    	    final JComboBox cbox = new JComboBox(new MyComboBoxModel());
    	    cbox_model= (MyComboBoxModel)cbox.getModel();
    	    cbox.setPreferredSize(new Dimension(280, 50));
    	    cbox.setMaximumRowCount(5);  
    	    cbox.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent event) {
    				System.out.println("Clique liste déroulante: (Selection)"+cbox_model.getSelectedItem()+" | id_selected: "+cbox.getSelectedIndex());
                }               
    		});
     
     
    	    JButton ajouter=new JButton("Ajouter");
    	    ajouter.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent arg0) {
    				// TODO Auto-generated method stub
    				cbox_model.addItem("élement 1");
    				cbox_model.addItem("élement 2");
    				cbox_model.addItem("élement 3");
    				cbox_model.addItem("élement 4");
    				cbox_model.addItem("élement 5");
    				System.out.println("liste nombres : "+cbox_model.getListe().size());
    				System.out.println("liste :"+cbox_model.getListe());
    				System.out.println("Elements ajoutés");
    			}
    	    });
     
    	    JButton supprimer=new JButton("Supprimer");
    	    supprimer.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent arg0) {
    				// TODO Auto-generated method stub
    				cbox_model.removeAllItems();
    				//On choisit de sélectionner aucun item
    				cbox_model.setSelectedItem("");
    				System.out.println("Elements supprimés");
    			}
    	    });
     
     
    	    panel.add(cbox);
    	    panel.add(ajouter);
    	    panel.add(supprimer);
    	    frame.add(panel);
     
    	    frame.setSize(300, 200);
    	    frame.setVisible(true);
    	}
    }
    Vous pouvez essayé ce code!

    Liste des bugs:
    1-Si je clique en premier sur la liste déroulante puis ajouter.
    Les éléments n'apparaissent pas dans la liste déroulante.

    2-Bug sur la sélection d'un élément
    (Pour l'essai, il va falloir cliquer en premier sur Ajouter)
    -Cliquer sur Ajouter
    -Sélectionner l'élément 4
    -Cliquer sur le bouton supprimer
    (Normalement l'élément 4 ne devrait plus être sélectionner grâce à cbox_model.setSelectedItem(""))
    L'élément apparaît encore dans la liste déroulante


    3-Bug de l'élément sélectionné
    (Pour l'essai, il va falloir cliquer en premier sur Ajouter)
    -Cliquer sur Ajouter
    -Sélectionner l'élément 4
    Vous avez alors dans la console:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Clique liste déroulante: (Selection)élement 4 | id_selected: 3
    -Cliquer sur le bouton supprimer
    -Cliquer sur le bouton ajouter
    -Sélectionner l'élément 4
    L'élément ne se sélectionne pas et :
    Vous avez alors dans la console:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Clique liste déroulante: (Selection) | id_selected: -1
    Merci pour votre aide

Discussions similaires

  1. Un problème de sélection
    Par cocaetjusdorange dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 10/04/2006, 17h02
  2. [XPath] Problème de sélection de noeuds
    Par Heriquet dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/02/2006, 10h22
  3. [VBA] Problème de sélection de feuille
    Par ptitsoleil87 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/12/2005, 10h44
  4. Problème de sélection sous IE
    Par titisite dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 27/12/2004, 14h05
  5. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56

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