2008-09-12 16 views
126

JComboBoxから選択するたびにイベントを発生させようとしています。JComboBoxセレクションリスナー?

私が抱えている問題は、明白なaddSelectionListener()メソッドがないということです。

actionPerformed()を使用しようとしましたが、決して起動しません。

モデルのオーバーライドが短く、JComboBoxのアイデアがありません。

JComboBoxで選択変更を通知するにはどうすればよいですか?

編集:私はそれが私がJComboBoxの誤動作のサブクラスを使用していたが判明し謝罪する必要がありますが、あなたの答えは良いですので、私は疑問を残しておきます。投票を開始します。 :)

+0

優秀な質問を、私はコンボボックスを読み込むのではなく時に一つを選択の上に火をのactionPerformedことに気付きましたので、それを期待するだろう。 –

答えて

129

それはこのように、ActionListenersに応答しなければならない:

combo.addActionListener (new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     doSomething(); 
    } 
}); 

@John Calsbeek当然addItemListener()があまりにも、動作することを指摘しています。ただし、2つのItemEventsが表示されますが、1つは以前選択されたアイテムの選択解除用で、もう1つは新しいアイテムの選択用です。両方のイベントタイプを使用しないでください!

+42

私はItemListenerを好むでしょう(ItemEventをチェックして、それが選択か非選択かを確認してください)。選択肢が変更されていなくても(つまり、ユーザが既に選択されている項目をクリックしても)、ActionListenerを起動することができます。これはあなたが望むものかもしれません。 –

+4

私はこの質問が古いことを知っていますが、補完するために、addItemメソッドが呼び出されるとActionListenerも起動されます。 –

21

jodonnellのソリューションが失敗した場合、ItemListenerインターフェイスのitemStateChanged()メソッドを試してみます。

7

あなたはこれらの

int selectedIndex = myComboBox.getSelectedIndex(); 

- または -

Object selectedObject = myComboBox.getSelectedItem(); 

- または -

String selectedValue = myComboBox.getSelectedValue().toString(); 
+0

なぜこれが下落されたのか知っていますが、これらの下降声を再考する必要があると思います... actionPerformedメソッドで選択したインデックスを確認すると、これが機能します。それは発砲し、-1イベントを除外すると、開始時に誤発砲を除外することができます。私の問題を解決! –

132

ItemListener実装

class ItemChangeListener implements ItemListener{ 
    @Override 
    public void itemStateChanged(ItemEvent event) { 
     if (event.getStateChange() == ItemEvent.SELECTED) { 
      Object item = event.getItem(); 
      // do something with object 
     } 
    }  
} 
のコード例を試すこと

今すぐ選択されたアイテムのみを取得します。

は、それからちょうどあなたのJComboBoxの

addItemListener(new ItemChangeListener()); 
+1

このコードを試しましたが、1つの問題は、既に選択されているアイテムをクリックすると、状態の変更がないため、リスナーがトリガーされないことです。 – dmark

+3

@dmarkこれは合理的だと思います。何も変更されていないためです。おそらく、このようなシナリオに依存しないように、何らかの形で行動を再編成する必要があります。 – Viacheslav

+0

@dmarkお返事ありがとうございます、あなたのご意見は私が質問を解決するのを助けました:) – Tia

4

にリスナーを追加し、私は最近、この非常に同じソリューションを探していて、最後に選択した項目と新しい選択した項目の特定の変数を割り当てずに、簡単なものを見つけるために管理されていました。そして、この質問は非常に役に立ちましたが、私が必要とした解決法を提供しませんでした。これは私の問題を解決した、私はあなたと他の人を解決することを願っています。ありがとう。ここで

How do I get the previous or last item?

7

項目選択変更用のリスナーを追加するコンボボックスを作成します

JComboBox comboBox = new JComboBox(); 

    comboBox.setBounds(84, 45, 150, 20); 
    contentPane.add(comboBox); 

    JComboBox comboBox_1 = new JComboBox(); 
    comboBox_1.setBounds(84, 97, 150, 20); 
    contentPane.add(comboBox_1); 
    comboBox.addItemListener(new ItemListener() { 
     public void itemStateChanged(ItemEvent arg0) { 
      //Do Something 
     } 
    }); 
} 
+2

この回答はその前の回答を強化しています...?重複しないでください!無関係:コンポーネントの手動でのサイズ変更/配置を決して行うことは決してありません。これは適切なLayoutManagerの排他的な作業です – kleopatra