Прослушиватель изменения выбора JComboBox?
-
09-06-2019 - |
Вопрос
Я пытаюсь вызвать событие всякий раз, когда делается выбор из JComboBox
.
У меня проблема в том, что нет очевидного addSelectionListener()
метод.
Я пытался использовать actionPerformed()
, но он никогда не срабатывает.
Если не считать переопределения модели для JComboBox
, у меня закончились идеи.
Как получить уведомление об изменении выбора на JComboBox
?**
Редактировать: Я должен извиниться.Оказывается, я использовал некорректный подкласс JComboBox
, но я оставлю этот вопрос, так как ваш ответ хороший.
Решение
Оно должно реагировать на Слушатели действий, так:
combo.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
doSomething();
}
});
@Джон Калсбик справедливо отмечает, что addItemListener()
тоже будет работать.Вы можете получить 2 ItemEvents
, однако один для отмены выбора ранее выбранного элемента, а другой для выбора нового элемента.Просто не используйте оба типа событий!
Другие советы
Пример кода 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());
я бы попробовал itemStateChanged()
метод ItemListener
интерфейс, если решение Джодоннелла не удастся.
Вот создание 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
}
});
}
Вы можете попробовать эти
int selectedIndex = myComboBox.getSelectedIndex();
-или-
Object selectedObject = myComboBox.getSelectedItem();
-или-
String selectedValue = myComboBox.getSelectedValue().toString();
Недавно я искал это же решение и сумел найти простое, не назначая определенные переменные для последнего выбранного элемента и нового выбранного элемента.И этот вопрос, хотя и был очень полезным, не дал нужного мне решения.Это решило мою проблему, надеюсь, решит вашу и других.Спасибо.