2011-06-22 7 views
1

私のJComboBoxモデルには、item1,item2,item1のような項目が含まれています。私はJComboBoxで3番目の項目(item1)を選択し、アイテムが、私は違った各項目のインデックスを取得することができますどのように私のモデルで同じである場合、それは常に0JComboBoxアイテムの変更

を返すgetSelectedIndex()をチェックしたときに私の問題はありますか?同様に:その後、

  • ITEM1戻り0
  • 項目2に戻り1つの
  • ITEM1リターン2
+0

iがスロット0とスロット2 – MeBigFatGuy

+0

@MeBigFatGuyを比較した場合、各項目の.equals(オブジェクトo)メソッドは(ITEM1)item1.equalsためfalseを返す必要があります推測している。その理由あなたはそう思う? –

+1

@ user709247、関連コードを投稿してください。あなたはすでに暗闇の中で3人の人間を撮影しましたが、あなたからの心のこもった反応はありません。目を覚ます! – mre

答えて

3

JListには同一の項目に問題はありません。

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()は文字列combo.getSelectedIndex()を返します。toString +1 – mKorbel

+0

はOPにある可能性があります 'items = {" item1 "、" item2 "、" item1 "};' –

+1

@Andrew:それは私ですユーザーに依頼する。 2つのエントリーをcomboBoxで違うものにするか、同じエントリーを2回追加するのは何ですか? : - \ –

4

JComboBoxの中に2つのエントリが同じオブジェクトに対応する場合、も、あなたの場合アイテム3をクリックすると、選択された実際のアイテムがそのオブジェクトの最初のエントリになります(つまり、インデックスが最も小さいもの) これは同じオブジェクトに対しては機能しないと思います。

6

これは、getSelectedIndex()というメソッドは、JComboBox内のオブジェクトに対して.equalsを使用し、選択したオブジェクトと比較するためです。あなたの場合、item1もインデックス0にあるので、条件trueを見つけて0を返します。異なるインデックスを取得するには、getSelectedIndex()メソッドをオーバーライドする必要があります。

するJComboBoxのデフォルトgetSelectedIndex()方法の概要は、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; 
    } 

取得するために2つのエントリに異なる何かを[項目オブジェクトは名前や他の何かを持っている場合ITEMNAMEすることができる]している必要があります望ましい結果。 getSelectedIndex()をオーバーライドし、すべてが異なることを意味するものを比較してください。両方のエントリが完全に同じ場合、それを2回追加する点は何ですか?

関連する問題