2013-03-12 3 views
3

У меня есть JComboBox, и у меня к нему подключен слушатель.JCombobox - Выполнять действие только при изменении значения

Прямо сейчас, каждый раз, когда пользователь «выбирает» что-то из раскрывающегося списка, срабатывает, даже если он только что переустановил значение, которое было выбрано ранее.

Есть ли способ запустить событие только в том случае, если выбранное значение поля со списком ДИФФЕРЕНА, чем было до его выбора?

Я предполагаю, что я мог бы хранить значение поля со списком в другом поле и сравнивать его каждый раз с событием, это просто кажется излишним. У меня 20 или около того таких комбинированных ящиков. Я бы предпочел не иметь еще 20 переменных JUST для хранения значений, чтобы событие не срабатывало.

Должен быть лучший способ.

Благодарю вас за помощь!

+0

Вообще говоря. Нет. Вы можете использовать ['JComboBox # putClientProperty'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#putClientProperty%28java.lang.Object,%20java .lang.Object% 29), чтобы сохранить ранее выбранное значение и использовать 'JComboBox # getClientProperty', чтобы извлечь его и сравнить с изменяющимся значением ... как мысль – MadProgrammer

+1

Это: http://stackoverflow.com/questions/58939/ jcombobox-selection-change-listener может вам помочь. Для меня это похоже на вопрос. –

ответ

8

Считаете ли вы использование ItemListener вместо ActionListener?

JComboBox<String> cb = new JComboBox<>(new String[] {"Stack", "Over", "Flow"}); 
cb.addItemListener(new ItemListener() { 
    @Override 
    public void itemStateChanged(ItemEvent e) { 
     System.out.println("Change"); 
    } 
}); 

Он срабатывает дважды, потому что один предмет становится ДЕЛЕГИРОВАННЫМ, а другой становится ВЫБРАННЫМ. Событие срабатывает для обоих. Вы можете проверить, какой из них произошел, вызвав e.getStateChange().

+0

Это похоже на работу. По какой-то причине он, похоже, дважды стреляет в меня, но это может быть из-за чего-то еще, что у меня происходит прямо сейчас. Спасибо! – Doug

+0

@Doug Проверьте мои изменения. – mostruash

+0

Я на самом деле просто понял это. Благодаря! Это будет легко изменить поведение. Это должно решить много проблем! – Doug

Смежные вопросы