добавете ListSelectionListener на JComboBox

Аз съм съвсем нов в Java Swing. И съм заседнал в опитите си да добавя ListSelectionListener към екземпляр JComboBox. Изглежда само интерфейсът ListSelectionModel има addListSelectionListener метод. Не мога да го разбера...

Защо искам да го добавя е, че искам програмата да направи нещо, дори елементът в падащото поле да не се променя след избиране.

ВЪЗМОЖЕН ОТГОВОР Просто си мислех да прикача actionListener към combobox, който не работи. и мисля, че това е грешка на 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");

        }
    });

AFAIK, 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