добавить ListSelectionListener в JComboBox

Я совершенно новичок в Java Swing. И я застрял, пытаясь добавить ListSelectionListener в экземпляр JComboBox. Кажется, только интерфейс ListSelectionModel имеет метод addListSelectionListener. Я как-то не могу понять...

Почему я хочу добавить это, так это то, что я хочу, чтобы программа делала что-то, даже если элемент в поле со списком не меняется после выбора.

ВОЗМОЖНЫЙ ОТВЕТ Я просто думал о том, чтобы прикрепить actionListener к неработающему выпадающему списку. и я думаю, что это ошибка openjdk. Я сообщил об этом здесь

Заранее спасибо.


person draw    schedule 02.04.2011    source источник


Ответы (4)


Взгляните на JComboBox#addItemListener:

JComboBox combo = createCombo();
combo.addItemListener(new ItemListener()
{
    @Override
    public void itemStateChanged(ItemEvent e)
    {
        if (e.getStateChange() == ItemEvent.SELECTED)
        {
            Object selectedItem = e.getItem();
            // Do something with the selected item...
        }
    }
});

Это событие запускается как для взаимодействия с мышью, так и с клавиатурой.

person Uhlen    schedule 02.04.2011
comment
будет ли ItemEvent запущен, даже если тот же элемент, который уже был выбран, выбран снова? - person draw; 03.04.2011
comment
Вероятно, не потому, что тогда ничего не произошло и не нужно было запускать событие. Я не думаю, что в этом случае ListSelectionEvent запускается из ListSelectionModel JList. - person Uhlen; 03.04.2011

Для JComboBox вам придется использовать ActionListener.

    JComboBox jComboBox = new JComboBox();
    jComboBox.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("combobox event");

        }
    });

Насколько я знаю, actionPerformed возникает всякий раз, когда пользователь делает выбор для JComboBox, даже если это тот же элемент, который уже был выбран.

person Bala R    schedule 02.04.2011
comment
нет, ничего не происходит, когда выбран отображаемый элемент (либо щелчок, либо ввод клавиши Enter) - person draw; 02.04.2011

Это зависит от вашего требования. ActionEvent запускается только при использовании клавиатуры, а не при изменении выбора при перемещении мыши по элементам.

Если вы хотите выполнить какое-либо действие при изменении выбора элемента, даже если мышь перемещается, то да, вам, вероятно, потребуется доступ к JList. Вы можете получить доступ к JList, используемому всплывающим окном, с помощью следующего кода:

JComboBox comboBox = new JComboBox(...);
BasicComboPopup popup = (BasicComboPopup)comboBox.getAccessibleContext().getAccessibleChild(0);
JList list = popup.getList();
list.addListSelectionListener(...);
person camickr    schedule 02.04.2011

Используйте PopupMenuListener. Когда всплывающее меню закроется, получите выбранный индекс и выполните обработку.

person camickr    schedule 03.04.2011