JComboBox चयन बदलें श्रोता?


145

जब भी कोई पसंद किया जाता है, मैं आग लगने की एक घटना पाने की कोशिश कर रहा हूं JComboBox

मेरे पास समस्या यह है कि कोई स्पष्ट addSelectionListener()तरीका नहीं है ।

मैंने उपयोग करने की कोशिश की है actionPerformed(), लेकिन यह कभी भी नहीं होता है।

के लिए मॉडल को ओवरराइड करने की कमी JComboBox, मैं विचारों से बाहर हूं।

मुझे एक चयन परिवर्तन के बारे में कैसे सूचित किया जाए JComboBox? *

संपादित करें: मुझे माफी मांगनी होगी यह पता चला है कि मैं एक दुर्व्यवहार उपवर्ग का उपयोग कर रहा था JComboBox, लेकिन मैं सवाल छोड़ दूंगा क्योंकि आपका जवाब अच्छा है।


बहुत बढ़िया सवाल है, क्योंकि मैंने देखा है कि एक्शनप्रॉपरेड कॉम्बोक्स को लोड करने पर आग लगाता है, लेकिन यह चुनने पर नहीं कि जब कोई इसकी उम्मीद करेगा।
ब्रायन नोब्लुच जुएल

जवाबों:


160

यह इस तरह ActionListeners को जवाब देना चाहिए :

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

@ जॉन कालसेक ठीक ही बताते हैं कि addItemListener()काम भी करेगा। आपको 2 ItemEvents, हालांकि, पहले से चयनित आइटम के विस्थापन के लिए, और नए आइटम के चयन के लिए एक और मिल सकता है। बस दोनों घटना प्रकारों का उपयोग न करें!


45
मैं ItemListener को पसंद करूँगा (यह देखने के लिए कि क्या यह एक चयन है या यहां तक ​​कि विचलन भी है) ItemEvent की जांच करना सुनिश्चित करें। ActionListener को तब भी निकाल दिया जा सकता है, यदि चयन नहीं बदला है (यानी यदि उपयोगकर्ता पहले से चयनित आइटम पर क्लिक करता है)। यह वही हो सकता है या नहीं हो सकता है जो आप चाहते हैं।
दान डायर

6
मुझे पता है कि यह प्रश्न पुराना है, लेकिन पूरक करने के लिए, यदि AddItem विधि कहा जाता है, तो ActionListener को निकाल दिया जाता है।
गेब्रियल सेमार

150

का कोड उदाहरण ItemListenerकार्यान्वयन

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

अब हम केवल चयनित आइटम प्राप्त करेंगे।

तो बस अपने JComboBox के लिए श्रोता जोड़ें

addItemListener(new ItemChangeListener());

2
मैंने इस कोड की कोशिश की, एक समस्या यह है कि जब मैं पहले से चयनित आइटम पर क्लिक करता हूं, तो श्रोता को ट्रिगर नहीं किया जाएगा, क्योंकि कोई राज्य परिवर्तन नहीं है।
dmark

4
@ मुझे लगता है कि यह उचित है, कारण कुछ भी नहीं बदला गया था। हो सकता है कि ऐसे परिदृश्य पर निर्भर न रहने के लिए आपको किसी तरह अपने कार्यों को पुनर्गठित करना चाहिए।
वायाचेस्लाव

@ चिह्न, आपकी टिप्पणी से मुझे एक प्रश्न हल करने में मदद मिली :)
Tia


11

यहां आइटम चयन परिवर्तन के लिए श्रोता को जोड़कर एक कॉम्बो बॉक्स बनाया जा रहा है:

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
    }
});

3
यह उत्तर उस में पिछले उत्तरों को बढ़ाता है ...? कृपया डुप्लिकेट मत करो! असंबंधित: / घटकों के लगाने, कि एक उपयुक्त LayoutManager के अनन्य कार्य है कभी कभी भी किसी भी मैनुअल आकार करना
Kleopatra

7

आप इन कोशिश कर सकते हैं

 int selectedIndex = myComboBox.getSelectedIndex();

-या-

Object selectedObject = myComboBox.getSelectedItem();

-या-

String selectedValue = myComboBox.getSelectedValue().toString();

मुझे पता है कि यह क्यों डाउनवोट किया गया था, लेकिन मेरा मानना ​​है कि उन डाउनवोट पर पुनर्विचार किया जाना चाहिए ... यदि आप एक्शनपैरफॉर्म विधि में चयनित इंडेक्स की जांच करते हैं, तो आप पाएंगे कि यह काम करता है। यह आग लगाता है, और -1 घटनाओं को छोड़कर आपको शुरू में झूठी गोलीबारी को बाहर करने की अनुमति देगा। मेरी समस्या का हल!
ब्रायन नोब्लुक

4

मैं हाल ही में इस एक ही समाधान की तलाश कर रहा था और अंतिम चयनित आइटम और नए चयनित आइटम के लिए विशिष्ट चर निर्दिष्ट किए बिना एक साधारण खोजने में कामयाब रहा। और यह सवाल, हालांकि बहुत उपयोगी था, मुझे उस समाधान की आवश्यकता नहीं थी जो मुझे चाहिए। इससे मेरी समस्या हल हो गई, मुझे आशा है कि यह आपके और दूसरों को हल करती है। धन्यवाद।

मुझे पिछली या अंतिम वस्तु कैसे मिलेगी?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.