JComboBox работает

У меня есть одно поле со списком, которое содержит один элемент, скажем, «а». Я хочу, чтобы прослушиватель действий этого поля со списком вызывался только при ручном выборе элемента «a». Я также пробовал ItemStateChanged, но он работает аналогично Action Listener.

Как мне это сделать?


person Neelam Sharma    schedule 30.08.2012    source источник
comment
Добавление прослушивателя перед установкой исходного выбора может появиться как требующее этого. Если проблема не в этом, то размещение вашего sscce может помочь прояснить ситуацию.   -  person trashgod    schedule 30.08.2012


Ответы (3)


Взгляните на следующий пример.

// Create an editable combobox
String[] items = {"item1", "item2"};
JComboBox cb = new JComboBox(items);
cb.setEditable(true);

// Create and register listener
 MyItemListener actionListener = new MyItemListener();
 cb.addItemListener(actionListener);

class MyItemListener implements ItemListener {
 // This method is called only if a new item has been selected.
  public void itemStateChanged(ItemEvent evt) {
    JComboBox cb = (JComboBox)evt.getSource();

    // Get the affected item
    Object item = evt.getItem();

    if (evt.getStateChange() == ItemEvent.SELECTED) {
        // Item was just selected
    } else if (evt.getStateChange() == ItemEvent.DESELECTED) {
        // Item is no longer selected
    }
}
}
person Sumit Singh    schedule 30.08.2012

Я не думаю, что вы можете прослушивать события только для одного элемента ComboBox, но при прослушивании всего поля со списком в обратном вызове вы можете проверить выбранный элемент перед обработкой события (или его игнорированием).

В примере, предоставленном Сумит Сингх, отметьте затронутый элемент.

// Get the affected item
Object item = evt.getItem();

//check item
if(item == <the item you want to watch>)
{
    //process
}
person phsym    schedule 30.08.2012

Как насчет создания 2 прослушивателей действий, один увидит, выбран ли «а», и если да, он вызовет второй

person Andrei0427    schedule 30.08.2012
comment
не могли бы вы опубликовать правильное объяснение и код о том, как добиться этого, поскольку это кажется мне неуместным... - person Harmeet Singh; 30.08.2012