JComboBox選択変更リスナー?


145

から選択が行われるたびにイベントを発生させようとしていますJComboBox

私が抱えている問題は、明確なaddSelectionListener()方法がないということです。

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

のモデルをオーバーライドしJComboBoxないと、アイデアが足りません。

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

編集:私は謝罪する必要があります。不正な動作をするのサブクラスを使用していたことがわかりJComboBoxましたが、あなたの答えは良いので、質問は残しておきます。


すばらしい質問です。actionPerformedはコンボボックスのロード時に起動しますが、いつ期待するかを選択するときに起動しないことに気付いたので。
Brian Knoblauch 2013

回答:


160

次のように、ActionListenersに応答する必要があります。

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

@ジョン・カルズビークはそれaddItemListener()がうまくいくことも正しく指摘しています。ItemEventsただし、以前に選択した項目の選択解除用と、新しい項目の選択用の2が表示される場合があります。両方のイベントタイプを使用しないでください。


45
私はItemListenerを好みます(ItemEventをチェックして、選択であるか選択解除であるかを確認してください)。選択が変更されていない場合(つまり、ユーザーが既に選択されているアイテムをクリックした場合)でも、ActionListenerをトリガーできます。これは必要な場合とそうでない場合があります。
Dan Dyer

6
私はこの質問が古いことを知っていますが、補足するために、addItemメソッドが呼び出されるとActionListenerも起動されます。
ガブリエルカマラ2015

150

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());

2
このコードを試してみましたが、1つ問題は、すでに選択されている項目をクリックしても、状態の変化がないため、リスナーがトリガーされないことです。
dmark 2016

4
@dmarkこれは妥当だと思います。何も変更されていません。たぶん、そのようなシナリオに依存しないように、何らかの形でアクションを再編成する必要があります。
Viacheslav '23

@dmarkありがとう、あなたのコメントは私が質問を解決するのに役立ちました:)
Tia


11

ここでは、項目選択の変更のリスナーを追加するComboBoxを作成しています。

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
    }
});

3
この回答は、その前の回答を強化します...?複製しないでください!関連なし:コンポーネントの手動でサイズ変更/
検索を

7

これらを試すことができます

 int selectedIndex = myComboBox.getSelectedIndex();

-または-

Object selectedObject = myComboBox.getSelectedItem();

-または-

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

なぜ反対票が投じられたのかはわかっていますが、反対票は再検討する必要があると思います... actionPerformedメソッドで選択したインデックスを確認すると、これが機能していることがわかります。発火します。-1イベントを除外すると、開始時の誤った発砲を除外できます。私の問題を解決しました!
Brian Knoblauch 2013

4

私は最近、これと同じソリューションを探していて、最後に選択されたアイテムと新しく選択されたアイテムに特定の変数を割り当てることなく、簡単なソリューションを見つけることができました。そして、この質問は非常に役に立ちましたが、私が必要とする解決策を提供しませんでした。これで私の問題は解決しました。あなたや他の人が解決することを願っています。ありがとう。

前または最後のアイテムを取得するにはどうすればよいですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.