Слушатель изменения выбора JComboBox? - PullRequest
134 голосов
/ 12 сентября 2008

Я пытаюсь заставить событие срабатывать всякий раз, когда делается выбор из JComboBox.

Проблема в том, что у меня нет очевидного addSelectionListener() метода.

Я пытался использовать actionPerformed(), но он никогда не срабатывает.

Если не считать переопределения модели для JComboBox, у меня нет идей.

Как получить уведомление об изменении выбора на JComboBox? **

Редактировать: Я должен извиниться. Оказывается, я использовал ненадлежащий подкласс JComboBox, но я оставлю вопрос, поскольку ваш ответ хороший.

Ответы [ 6 ]

149 голосов
/ 12 сентября 2008

Он должен отвечать на ActionListeners , например:

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

@ John Calsbeek справедливо указывает, что addItemListener() тоже будет работать. Вы можете получить 2 ItemEvents, однако, один для отмены выбора ранее выбранного элемента, а другой для выбора нового элемента. Только не используйте оба типа событий!

141 голосов
/ 20 января 2013

Пример кода 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());
22 голосов
/ 12 сентября 2008

Я бы попробовал метод itemStateChanged() интерфейса ItemListener, если решение Джодоннелла не удалось.

10 голосов
/ 25 июля 2013

Здесь создается 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
        }
    });
}
7 голосов
/ 02 февраля 2010

Вы можете попробовать эти

 int selectedIndex = myComboBox.getSelectedIndex();

-или-

Object selectedObject = myComboBox.getSelectedItem();

-или-

String selectedValue = myComboBox.getSelectedValue().toString();
4 голосов
/ 03 февраля 2013

Недавно я искал то же самое решение, и мне удалось найти простое, не назначая конкретные переменные для последнего выбранного элемента и нового выбранного элемента. И этот вопрос, хотя и был очень полезным, не дал нужного мне решения. Это решило мою проблему, я надеюсь, что это решит вашу и других. Спасибо.

Как получить предыдущий или последний товар?

...