JComboBox tester l'existance d'un élément

Résolu
stigmate101 Messages postés 89 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 30 avril 2020 - 12 mars 2009 à 15:15
amundain Messages postés 110 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 28 août 2012 - 13 mars 2009 à 15:09
Bonjour
Comment dans une JComboBox tester l'existance d'un élément
Merci

4 réponses

amundain Messages postés 110 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 28 août 2012 1
13 mars 2009 à 15:09
Salut,


Il y a un souci sur ta comparaison : tu compares 2 instances de String qui ont le même texte mais pas la même référence ! La comparaison la + efficace peut se faire sur le contenu, à savoir le texte elle-même


Essaie de remplacer ta méthode actionPerformed avec celle-ci :





public










void


actionPerformed(ActionEvent e) {




boolean


exists =



false


;String sAction =



"Pas ajouté"

;String selected =



fenetre

.getListe1().getSelectedItem().toString();




for


(



int


i = 0 ; i <


fenetre

.getListe2().getItemCount() ; i++){ String itemToCompare=



fenetre

.getListe2().getItemAt(i).toString();




if


(itemToCompare.equals(selected)){exists=




true


;}

}




if


(!exists){



fenetre

.getListe2().addItem(selected);sAction =



"Ajouté"

;}










A +,

amundain





<hr width="100%" size="2" />


Java bien,merci.
3
amundain Messages postés 110 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 28 août 2012 1
12 mars 2009 à 15:35
Salut,






Tu fais une boucle de récupération des éléments et tu testes chaque élément...




for





(



int


i=0;i<ta_jComboBox.getItemCount();i++){


boolean exists=
((String)ta_jComboBox.getItemAt(i)).equals(TA_VARIABLE_COMPAREE));}





A +,

amundain

<hr width="100%" size="2" />Java bien,merci.
0
stigmate101 Messages postés 89 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 30 avril 2020
12 mars 2009 à 16:49
Merci Amundain pour ta solution.

Je pense qu'il doit exister une fonction qui permet de tester, si un élément existe dans une JComboBox.

Merci

@+
0
stigmate101 Messages postés 89 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 30 avril 2020
13 mars 2009 à 14:53
Je chercher à ajouter un élément selectionné dans une JComboBox dans une seconde JCombobox en testant au préalable l'existance de cette élément.
Dans mon code, le comportement n'est pas satisfaisant. J'utilise la fonction equal(). Ce que je ne comprends pas, c'est le premier test n'est pas pris en compte.
Par exemple si je selection "Element 1" dans la première JComboBox et que je le copie dans la seconde, alors qu'il est déjà présent. La première fois, il est copie, la deuxième fois non.
Ni la première fois ni la seconde, il ne devrait être copié.
Merci d'avance
Voici le code :


 


// --- début Classe FenetreListes_04 --- //
import java.awt.FlowLayout;


import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;


@SuppressWarnings("serial")
public class FenetreListes_04 extends JFrame{
 private JComboBox liste1;
 private JComboBox liste2;
 
 public FenetreListes_04(){
  super();
  
  build();//On initialise notre fenêtre
 }
 
 private void build(){
  setTitle("Fenêtre qui propose une liste de choix"); //On donne un titre à l'application
  setSize(420,340); //On donne une taille à notre fenêtre
  setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
  setResizable(true); //On permet le redimensionnement
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix
  setContentPane(buildContentPane());
 }
 
 private JPanel buildContentPane(){
  JPanel panel = new JPanel();
  panel.setLayout(new FlowLayout());
  
  Object[] elements = new Object[]{"Element 1", "Element 2", "Element 3", "Element 4", "Element 5"};
  
  liste1 = new JComboBox(elements);  
  panel.add(liste1);
  
  JButton bouton = new JButton(new CopierAction_04(this, "Copier"));  
  panel.add(bouton);
  
  liste2 = new JComboBox(elements);  
  panel.add(liste2);
  
  /*
  JButton bouton2 = new JButton(new SupprimmerAction_04(this, "Enlever"));  
  panel.add(bouton2);
  
  JButton bouton3 = new JButton(new ViderAction_04(this, "Vider"));  
  panel.add(bouton3);
  */
  return panel;
 }
 
 public JComboBox getListe1(){
  return liste1;
 }
 
 public JComboBox getListe2(){
  return liste2;
 }
 
 public static void main(String[] args) {
  //On crée une nouvelle instance de notre FenetreTexte
  FenetreListes_04 fenetre = new FenetreListes_04();
  fenetre.setVisible(true);//On la rend visible
 }
}
// --- Fin Classe FenetreListes_04 --- //


// --- Début class CopierAction_04 --- //
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;


@SuppressWarnings("serial")
public class CopierAction_04 extends AbstractAction {
 private FenetreListes_04 fenetre;
 
 public CopierAction_04(FenetreListes_04 fenetre, String texte){
  super(texte);  
  this.fenetre = fenetre;
 }
 
 public void actionPerformed(ActionEvent e) {
  boolean exists = false;
  String sAction = "Pas ajouté";
  Object selected = fenetre.getListe1().getSelectedItem();
  
  for ( int i = 0 ; i < fenetre.getListe2().getItemCount() ; i++){   
   exists = (fenetre.getListe2().getItemAt(i).equals(selected));   
  } 


  if(!exists){
   fenetre.getListe2().addItem(selected);
   sAction ="Ajouté";
  }
  System.out.println( sAction +" " + selected);    
 }
}
// --- Fin  class CopierAction_04 --- //
0
Rejoignez-nous