2012-01-21 17 views
8

मेरे पास एक JComboBox है, एक बार हर बार मैं डेटाबेस से तारों का एक सेट पुनः प्राप्त करना चाहता हूं और उन तारों को JComboBox की सामग्री में सेट करना चाहता हूं, और उनमें से एक वर्तमान में चयनित मूल्य के रूप में सेट करता हूं। लेकिन मैं यह भी चाहता हूं कि उपयोगकर्ता JComboBox को संपादित करने और डेटाबेस में एक मान जोड़ने और इसे वर्तमान मान के रूप में सेट करने में सक्षम हो।JComboBox संपादन का पता लगाने

मैं यह पता लगाने में सक्षम होना चाहता हूं कि जब JComboBox में वर्ण दर्ज किए जाते हैं, तो मैं एक गिनती को रीसेट कर सकता हूं जो JComboBox को तब तक अपडेट करने से रोकता है जब तक यह शून्य न हो। मेरी पहली वृत्ति एक KeyListener उपयोग करने के लिए था, लेकिन कॉम्बो बक्से पर जावा ट्यूटोरियल इस कहते हैं,

हालांकि JComboBox निम्न स्तर की घटनाओं के लिए श्रोताओं को पंजीकृत करने के तरीकों को विरासत में -, ध्यान, कुंजी, और माउस घटनाओं - उदाहरण के लिए अनुशंसा करते हैं कि आप कॉम्बो बॉक्स पर निम्न-स्तर की घटनाओं को न सुनें।

और वे कहते हैं कि निकाल दी गई घटनाएं दिखने और महसूस के आधार पर बदल सकती हैं।

+0

मुझे इस तरह के प्रश्न पसंद हैं। स्विंग एक दिलचस्प ढांचा है और इसे अजीब, लेकिन व्यावहारिक, हैक्स की श्रृंखला को जानने से अधिक बार उपयोग नहीं किया जाता है। :) –

उत्तर

4

यह थोड़ा पासा है, लेकिन इसे संपादक घटक (ए जेटेक्स्टफिल्ड) पर दस्तावेज़ अपडेट सुनने के लिए काम करना चाहिए।

JComboBox cb = new JComboBox(); 
    Component editor = cb.getEditor().getEditorComponent(); 
    if (editor instanceof JTextField) { 
     ((JTextField) editor).getDocument().addDocumentListener(new DocumentListener() { 
      @Override 
      public void insertUpdate(DocumentEvent documentEvent) { 
       //To change body of implemented methods use File | Settings | File Templates. 
      } 

      @Override 
      public void removeUpdate(DocumentEvent documentEvent) { 
       //To change body of implemented methods use File | Settings | File Templates. 
      } 

      @Override 
      public void changedUpdate(DocumentEvent documentEvent) { 
       //To change body of implemented methods use File | Settings | File Templates. 
      } 
     });          
    } 

उन * अद्यतन (DocumentEvent documentEvent) तरीके से टाइप किया हर चरित्र/JComboBox से हटा के लिए बुलाया जाना चाहिए।

2

मैं यह जोड़ना चाहता हूं कि परिवर्तित अद्यतन विधि सादा पाठ दस्तावेज़ों के लिए अधिसूचना को आग नहीं देगी। यदि आप एक सादे पाठ पाठ घटक का उपयोग कर रहे हैं, तो आपको insertUpdate और/या RemoveUpdate का उपयोग करना होगा।

मुझे हाल ही में एक दस्तावेज़ श्रोता का उपयोग बटन को अक्षम/सक्षम करने के तरीके के रूप में करना था यदि उपयोगकर्ता कॉम्बो बॉक्स संपादित कर रहा था। मैं कुछ इस तरह से किया था और बहुत अच्छी तरह से काम किया: तब

public class MyDocumentListener implements DocumentListener 
{ 

    @Override 
    public void insertUpdate(DocumentEvent e) 
    { 
    setChanged(); 
    notifyObservers(true); 
    } 

    @Override 
    public void removeUpdate(DocumentEvent e) 
    { 
    setChanged(); 
    notifyObservers(false); 
    } 

    @Override 
    public void changedUpdate(DocumentEvent e) 
    { 
    // Not used when document is plain text 
    } 
} 

, मैं इस तरह कॉम्बो बॉक्स को यह श्रोता कहा:

((JTextComponent) combobox.getEditor().getEditorComponent()) 
    .getDocument().addDocumentListener(new MyDocumentListener()); 

यह काम करता है क्योंकि कॉम्बो बॉक्स के साथ जुड़े दस्तावेज़ सादा पाठ है । जब मैंने चेंज अपडेट का इस्तेमाल किया तो यह नहीं हुआ।

संबंधित मुद्दे