2011-06-22 1 views
1

Mon modèle JComboBox contient un article comme item1, item2, item1. Mon problème est lorsque je sélectionne troisième élément (item1) dans JComboBox et vérifier getSelectedIndex() il retourne toujours 0.JComboBox Changement d'article

Si l'article est même dans mon modèle comment puis-je obtenir l'index de chaque élément différemment? Comme:

  • Item1 retourne 0
  • article 2 renvoie 1
  • Item1 retourne 2
+0

Je devine que la méthode equals de chaque élément doit retourner false pour item1.equals (item1) (Object o) lorsque la fente comparant 0 et la fente 2. – MeBigFatGuy

+0

@MeBigFatGuy: et pourquoi Tu penses? –

+1

@ user709247, Veuillez poster le code correspondant. Vous avez déjà 3 personnes tirant dans l'obscurité, et pourtant aucune réponse cordiale de votre part. Réveillez-vous! – mre

Répondre

3

Un JList n'a pas de problèmes avec des éléments identiques.

Working list

import javax.swing.event.*; 
import javax.swing.*; 

class TestList { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       final String[] items = {"item1", "item2", "item1"}; 
       final JList list = new JList(items); 
       final JTextField output = new JTextField(15); 
       JPanel gui = new JPanel(); 
       gui.add(list); 
       gui.add(output); 
       list.addListSelectionListener(new ListSelectionListener(){ 
        public void valueChanged(ListSelectionEvent lse) { 
         int index = list.getSelectedIndex(); 
         String outputText = 
          "Index: " + 
          index + 
          " Value: " + 
          items[index]; 
         output.setText(outputText); 

        } 
       }); 
       JOptionPane.showMessageDialog(null, gui); 
      } 
     }); 
    } 
} 
+0

JComboBox # getSelectedIndex() renvoie uniquement la chaîne combo.getSelectedIndex(). ToString +1 – mKorbel

+0

peut être OP a 'items = {" item1 "," item2 "," item1 "};' –

+1

@Andrew: c'est ce que je suis demander à l'utilisateur de faire. Avoir quelque chose qui peut différer 2 entrées dans comboBox ou bien quel est le point d'ajouter deux fois la même entrée? : - \ –

4

Si deux entrées du JComboBox correspondent au même objet, alors même si vous cliquez sur l'article 3 l'article réel qui sera sélectionné sera la première entrée de cet objet (c'est-à-dire celui avec l'index le plus bas) Je ne pense pas que cela fonctionnera pour les mêmes objets.

6

Il renvoie l'index = 0. Parce que la méthode getSelectedIndex() utilise .equals sur les objets qui sont dans le JComboBox et le compare avec celui sélectionné. Dans votre cas car item1 est aussi à l'index 0, il trouve la condition true et renvoie 0. Si vous voulez obtenir un index différent, vous devez surcharger la méthode getSelectedIndex().

Un aperçu de la méthode par défaut getSelectedIndex() de JComboBox trouvé à Java2s:

public int getSelectedIndex() { 
     Object sObject = dataModel.getSelectedItem(); 
     int i, c; 
     Object obj; 

     for (i = 0, c = dataModel.getSize(); i < c; i++) { 
      obj = dataModel.getElementAt(i); 
      if (obj != null && obj.equals(sObject)) 
       return i; 
     } 
     return -1; 
    } 

Vous devriez avoir quelque chose [peut itemName être si l'objet de l'élément a un nom ou quoi que ce soit d'autre] différent dans 2 entrées pour obtenir résultat désiré. Remplacez getSelectedIndex() et comparez la chose qui est censée être différente dans tous. Si les deux entrées sont complètement identiques alors quel est le point de l'ajouter deux fois?