2014-02-04 4 views
-1

У меня есть JComboBox и он имеет связанный с ним метод itemStageChanged. JComboxBox обновляется двумя способами:JComboBox - отключить setSelectedItem от вызова ItemStageChange

  1. Я называю comboBox.setSelectedItem(...)
  2. пользователь выбирает элемент в comboBox через мой GUI

Я хочу только (2), чтобы инициировать событие. Какой метод (например, actionPerformed? changeListener? itemListener? И т. Д.) Следует использовать, что будет только ловить (2), а не (1). В настоящее время itemStateChanged (даже с оператором if для проверки, является ли оно ItemEvent.SELECTED) вызывается по (1) и (2).

class ItemChangeListener implements ItemListener{ 
    @Override 
    public void itemStateChanged(ItemEvent event) { 
     if (event.getStateChange() == ItemEvent.SELECTED) { 
      //gets in here if user selects an item with their mouse 
      //or if setSelectedItem is called 
     } 
    }  
} 
+0

Вы отклонили мое сообщение без причины, но скопировали мой код? нечего сказать .... – alex

+0

Вы нашли способ решить вашу проблему? – alex

ответ

-1

Дайте этому попытку:

Boolean flag = false; 

class ItemChangeListener implements ItemListener{ 
    @Override 
    public void itemStateChanged(ItemEvent event) { 
     // Condition for the desired event 
     if (!flag && event.getStateChange() == ItemEvent.SELECTED) { 
      Object item = event.getItem(); 
      // do something with object 
     } 
    }  
} 
[...] 
//Add the listener 
myComboBox.addItemListener(new ItemChangeListener()); 
[...] 
// Setting the selection 
flag = true; 
comboBox.setSelectedItem(...) 
flag = false; 

Взятые из here.

+0

Да, это то, что у меня есть. Это называется (1) и (2). – CodeGuy

+0

Хорошо, см. Мое обновление. Дело в том, что ActionListener не видит разницы между пользователем и настраивает новый выбор, поэтому вам нужно обнаружить его самостоятельно. – alex

+0

Я так не думаю, но, может быть, дождусь некоторых парней с большим опытом работы с ui. – alex

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