2016-06-10 5 views
-5

Meine ComboBox mit vielen String-Objekten sagen wir für eine Instanz ("David", "John", "Mary", "Gabriel", "Anderson", "Henry", "Johnson", "Halstead", "Annie", "Jubilee"). ComboBox ist editierbar. Also, was auch immer ich schreibe in ComboBox, in der Dropdown-Option sollte ich nur String-Objekte, die mit der Zeichenfolge in ComboBox übereinstimmen gefunden bekommen. Sagen wir, wenn ich "An" im Combobox-Feld eingegeben habe, dann sollte ich nur Annie und Anderson in der ComboBox-Liste haben.Drop Down ComboBox

Dies unterscheidet sich von AutoCompleteComboBox. Also bitte, keine solchen Antworten werden begrüßt.

public void setEditor(ComboBoxEditor editor){ 
    super.setEditor(editor); 
    setEditable(true); 
    if (editor.getEditorComponent() instanceof JTextField) { 
     inputField = (JTextField) editor.getEditorComponent(); 
     inputField.addKeyListener(new KeyAdapter() { 
     public void keyTyped(KeyEvent e){ 
      char key = e.getKeyChar(); 
      String[] matchedString; 
      if(Character.isLetterOrDigit(key)||Character.isSpaceChar(key)||key=='\b'){ 
       if(key=='\b'){ 
        matchedString = getMatchedItems(inputField.getText()); 
        removeAllItems(); 
        for(int i=0; i<matchedString.length; i++){ 
         addItem(matchedString[i]); 
        } 
       } 


       else{ 
        matchedString = getMatchedItems(inputField.getText()+key); 
        removeAllItems(); 
         for(int i=0; i<matchedString.length; i++){ 
          addItem(matchedString[i]); 
         } 
       } 
      } 

     } 

     private int getMatchedCount(String currentWord) { 
      int n = getItemCount(),count=0; 
      for(int i=0; i<n; i++){ 
       if(((String)getItemAt(i)).toLowerCase().startsWith(currentWord.toLowerCase())){ 
        count++; 
       } 
      } 
      return count; 
     } 

     private String[] getMatchedItems(String currentWord){ 
      int n = getItemCount(),k=0; 
      String[] matchedString = new String[getMatchedCount(currentWord)]; 
      for(int i=0;i<n;i++){ 
       if(((String)getItemAt(i)).toLowerCase().startsWith(currentWord.toLowerCase())){ 
        matchedString[k++] = (String)getItemAt(i); 
       } 
      } 
      return matchedString; 
     } 
    }); 
    } 
} 

public static void main(String[] args) { 
    JFrame fr=new JFrame(); 
    fr.setLayout(null); 
    /*List <String> list = new ArrayList<String>(); 
    list.add("Shahroz"); 
    list.add("Wasif"); 
    list.add("Akram"); 
    */ 
    String str[] = {"Shahroz","saleem","Khan","Wasif","Dutta","Piyush","Rajat","Rehan","Rajesh"}; 
    fr.add(new AutoCombo(str)); 
    fr.setSize(400, 800); 
    fr.setVisible(true); 
} 

}

+1

Aber was ist die Frage? – Pshemo

+2

Ich stimme, diese Frage als off-topic zu schließen, weil es Code-Schreiben-Anfrage ohne jede Beschreibung des Problems ist, die OP davon abhält, es selbst zu schreiben. – Pshemo

Antwort

2

Dies unterscheidet sich von AutoCompleteComboBox.

Vielleicht, aber das Konzept ist das gleiche.

Jedes Mal, wenn ein Zeichen in das Kombinationsfeld eingegeben wird, tun Sie etwas. In diesem Fall durchsucht Sie die Liste der Einträge und fügt nur die gültigen Einträge zum Modell des Kombinationsfelds hinzu.

Sie müssen also einen DocumentListener zum Editor der Kombinationsfeld hinzufügen. Wenn ein DocumentEvent ausgelöst wird, erhalten Sie den aktuellen Wert aus dem Editor des Kombinationsfelds. Dann löschen Sie alle Elemente in der Combobox. Schließlich suchen Sie die Liste der Elemente und fügen Sie die passenden Elemente zum Kombinationsfeld hinzu.

Edit:

Textfeld als Editor verwenden Sie nur für den Zugriff auf:

ComboBoxEditor editor = combobox.getEditor(); 
JTextField textField = (JTextField)editor.getEditorComponent(); 
// add the DocumentListener to the Document 
+0

Bitte siehe obigen Code ... Kann ich keyListener nicht in das Feld von comboBox (hier inputField) einfügen? –

+0

@ShahrozSaleem Der Vorschlag war, einen 'DocumentListener' zu verwenden, keinen KeyListener. Sie müssen das Kombinationsfeld nicht erweitern, um direkt auf das Textfeld zugreifen zu können. Siehe Bearbeiten. – camickr