2012-12-03 27 views
14

मैं नेटबीन्स 7.1 में संपादन योग्य JComboBox में ऑटो-पूर्ण कैसे कर सकता हूं जैसे वीबी डॉट नेट में ComboBox में। मेरे पास एक सूची बाध्यकारी वाला कॉम्बो बॉक्स है, मैं सूची में आइटम के केवल कुछ पहले अक्षर टाइप करके आइटम का चयन करना चाहता हूं उदाहरण के लिए यदि किसी सूची में kitten है, तो यह ki टाइप करते समय चुना जाना चाहिए।JComboBox स्वत: पूर्ण

उत्तर

37

यदि आप इसे स्वयं करना चाहते हैं, तो आप this article में दिए गए चरणों का पालन कर सकते हैं।

यदि आप पहिया को फिर से शुरू नहीं करना चाहते हैं, तो आप this article में बताए गए अनुसार इस कार्यक्षमता को जोड़ने के लिए मौजूदा 3 वें पार्टी lib का उपयोग कर सकते हैं। उदाहरण SwingX पुस्तकालय (उदाहरण के जुड़े हुए लेख से नकल) का उपयोग कर के लिए:

this.comboBox = new JComboBox(new Object[] { "Ester", "Jordi", 
     "Jordina", "Jorge", "Sergi" }); 
AutoCompleteDecorator.decorate(this.comboBox); 
+0

पता नहीं है कि यह कैसे था जब यह लिखा गया था, लेकिन पहले लिंक में कोड अब सार्वजनिक डोमेन में है और साइट पर उपलब्ध है। यह तुरंत उपयोग करने योग्य था। – reden

0

मैं एक कस्टम स्विंग JComboBox "AutoComboBox" नाम तो आप इस gist forking द्वारा उस पर टाइप करते हुए जो ऑटो पूरा करता है विकसित की है।

यहां एक छोटा डेमो है।

सबसे पहले घोषित करें और इसे प्रारंभ करें। (यदि आप एक आईडीई का उपयोग कर रहे हैं, तो बस को खींच कर अपने JFrame या JDialog फार्म के लिए पर कक्षा जगह)

AutoComboBox autoComboBox = new AutoComboBox(); 

अगला, आइटम सूची निर्धारित किया है। यह एक स्ट्रिंग सरणी लेता है। आप AutoComboBox क्लास को संशोधित करके प्रकार बदल सकते हैं।

String[] itemArray = {"Malith", "John", "Jack" }; 
autoComboBox.setKeyWord(itemArray); 

अब आप जो "Malith" है एक ऑटो JComboBox को पूरा करने के लिए है, "जॉन", आइटम के रूप में "जैक"!

यहाँ दो वर्गों मैं विकसित की है,

हैं AutoComboBox.java

import java.util.Vector; 
import javax.swing.DefaultComboBoxModel; 
import javax.swing.JComboBox; 
import javax.swing.JTextField; 


public class AutoComboBox extends JComboBox<Object> { 

String keyWord[] = {"item1", "item2", "item3"}; 
Vector myVector = new Vector(); 

public AutoComboBox() { 

    setModel(new DefaultComboBoxModel(myVector)); 
    setSelectedIndex(-1); 
    setEditable(true); 
    JTextField text = (JTextField) this.getEditor().getEditorComponent(); 
    text.setFocusable(true); 
    text.setText(""); 
    text.addKeyListener(new ComboListener(this, myVector)); 
    setMyVector(); 
} 

/** 
* set the item list of the AutoComboBox 
* @param keyWord an String array 
*/ 
public void setKeyWord(String[] keyWord) { 
    this.keyWord = keyWord; 
    setMyVectorInitial(); 
} 

private void setMyVector() { 
    int a; 
    for (a = 0; a < keyWord.length; a++) { 
     myVector.add(keyWord[a]); 
    } 
} 

private void setMyVectorInitial() { 
    myVector.clear(); 
    int a; 
    for (a = 0; a < keyWord.length; a++) { 

     myVector.add(keyWord[a]); 
    } 
} 

} 

ComboListener.java

import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.util.Vector; 
import javax.swing.DefaultComboBoxModel; 
import javax.swing.JComboBox; 
import javax.swing.JTextField; 
import org.apache.commons.lang3.text.WordUtils; 

public class ComboListener extends KeyAdapter 
{ 
@SuppressWarnings("rawtypes") 
JComboBox cbListener; 
@SuppressWarnings("rawtypes") 
Vector vector; 

@SuppressWarnings("rawtypes") 
public ComboListener(JComboBox cbListenerParam, Vector vectorParam) 
{ 
    cbListener = cbListenerParam; 
    vector = vectorParam; 
} 

@SuppressWarnings({ "unchecked", "rawtypes" }) 
public void keyReleased(KeyEvent key) 
{ 
      // TODO Auto-generated method stub 
      String text = ((JTextField)key.getSource()).getText(); 

      cbListener.setModel(new DefaultComboBoxModel(getFilteredList(text))); 
      cbListener.setSelectedIndex(-1); 
      ((JTextField)cbListener.getEditor().getEditorComponent()).setText(text); 
      cbListener.showPopup(); 
} 


@SuppressWarnings({ "rawtypes", "unchecked" }) 
public Vector getFilteredList(String text) 
{ 
    Vector v = new Vector(); 
    for(int a = 0;a<vector.size();a++) 
    { 
     if(vector.get(a).toString().startsWith(text)) 
     { 
      v.add(vector.get(a).toString()); 
     } 
        else if(vector.get(a).toString().startsWith(text.toLowerCase())) 
     { 
      v.add(vector.get(a).toString()); 
     } 
        else if(vector.get(a).toString().startsWith(text.toUpperCase())) 
     { 
      v.add(vector.get(a).toString()); 
     } 
        else if(vector.get(a).toString().startsWith(WordUtils.capitalizeFully(text))) 
     { 
      v.add(vector.get(a).toString()); 
     } 
        else if(vector.get(a).toString().startsWith(WordUtils.uncapitalize(text))) 
     { 
      v.add(vector.get(a).toString()); 
     } 
    } 
    return v; 
} 
} 
+1

आपको org.apache.commons.lang3.text.WordUtils आयात करने की आवश्यकता हो सकती है ... – Malith

+0

दिलचस्प है, लेकिन इसमें कुछ बदलावों की आवश्यकता है। सबसे महत्वपूर्ण बात यह है कि घर की कुंजी आपके समाधान में काम नहीं करती है। मैंने इसे यहां ठीक कर दिया है: http://tinybrain.de/1007529। एक खुला सवाल यह है कि नीचे तीर को सही तरीके से कैसे काम करना है। –

-1

एक और शांत पुस्तकालय है कि एक JComboBox माध्यम से खोज : http://www.jidesoft.com/products/oss.htm

आप जार यहां से डाउनलोड कर सकते हैं: http://www.java2s.com/Code/JarDownload/jide/jide-oss-3.5.7.jar.zip

अपने सभी आपको क्या करना है इस परियोजना में पुस्तकालय आयात करने के बाद है:

JComboBox comboBox = ....; 
ComboBoxSearchable searchable = new ComboBoxSearchable(comboBox); 
संबंधित मुद्दे