Zmiana Wyboru JComboBox?

Staram się, aby zdarzenie zostało odpalone, gdy tylko zostanie dokonany wybór z JComboBox.

Problem polega na tym, że nie ma oczywistej metody. Próbowałem użyć actionPerformed(), ale nigdy nie odpala.

Brakuje mi pomysłów.

Jak otrzymać powiadomienie o zmianie wyboru na JComboBox?

Edit: muszę przeprosić, okazało się, że używałem źle zachowującej się podklasy JComboBox, ale zostawię pytaj, bo twoja odpowiedź jest dobra. Rozpocznij głosowanie. :)

6 answers

Powinno odpowiedzieć na ActionListeners , Tak:

combo.addActionListener (new ActionListener () {
    public void actionPerformed(ActionEvent e) {
        doSomething();
    }
});

@John Calsbeek słusznie zwraca uwagę, że addItemListener() również zadziała. Możesz jednak otrzymać 2 ItemEvents, jeden za odznaczenie wcześniej wybranego elementu, a drugi za wybór nowego elementu. Po prostu nie używaj obu typów zdarzeń!

 142
Author: jodonnell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:05

Przykład kodu ItemListener implementacji

class ItemChangeListener implements ItemListener{
    @Override
    public void itemStateChanged(ItemEvent event) {
       if (event.getStateChange() == ItemEvent.SELECTED) {
          Object item = event.getItem();
          // do something with object
       }
    }       
}

Teraz otrzymamy tylko wybrany element.

Następnie po prostu dodaj listener do swojego JComboBox

addItemListener(new ItemChangeListener());
 138
Author: Viacheslav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-20 12:28:37

Wypróbowałbym itemStateChanged() metodę ItemListener interfejs, jeśli rozwiązanie jodonnella się nie powiedzie.

 21
Author: John Calsbeek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-12 13:33:50

Tutaj powstaje ComboBox, który dodaje słuchacz do zmiany wyboru pozycji:

    JComboBox comboBox = new JComboBox();

    comboBox.setBounds(84, 45, 150, 20);
    contentPane.add(comboBox);

    JComboBox comboBox_1 = new JComboBox();
    comboBox_1.setBounds(84, 97, 150, 20);
    contentPane.add(comboBox_1);
    comboBox.addItemListener(new ItemListener() {
        public void itemStateChanged(ItemEvent arg0) {
            //Do Something
        }
    });
}
 9
Author: Ahuramazda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-10 19:24:02

Możesz spróbować tych

 int selectedIndex = myComboBox.getSelectedIndex();

-lub -

Object selectedObject = myComboBox.getSelectedItem();

-lub -

String selectedValue = myComboBox.getSelectedValue().toString();
 7
Author: JavaKeith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-14 10:06:50

Ostatnio Szukałem tego samego rozwiązania i udało mi się znaleźć proste bez przypisywania konkretnych zmiennych dla ostatniego wybranego elementu i nowego wybranego elementu. I to pytanie, choć bardzo pomocne, nie dostarczyło mi rozwiązania, którego potrzebowałem. To rozwiązało mój problem, mam nadzieję, że rozwiąże twój i innych. Dzięki.

Jak uzyskać poprzedni lub ostatni przedmiot?

 4
Author: Craig Wayne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:30