下拉ComboBox

时间:2016-06-10 20:03:22

标签: java swing

我的ComboBox有很多字符串对象可以说是一个实例(" David"," John"," Mary"," Gabriel"," Anderson"," Henry"," Johnson"," Halstead"," Annie", "春雷&#34)。 ComboBox是可编辑的。 所以,无论我在comboBox中编写什么,在下拉选项中,我应该只获得与在comboBox中键入的字符串匹配的字符串对象。 让我们说,如果我输入了" An"在Combobox领域,我应该只有安妮和安德森参加ComboBox名单。

这与AutoCompleteComboBox不同。所以,请不要欢迎这样的答案。

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 个答案:

答案 0 :(得分:2)

  

这与AutoCompleteComboBox不同。

也许,但概念是一样的。

每次在组合框中输入字符时,您都会执行某些操作。在这种情况下,你要做的就是搜索条目列表,只将有效的条目添加到组合框的模型中。

因此您需要将DocumentListener添加到组合框的编辑器中。然后,每当触发DocumentEvent时,您将从组合框的编辑器中获取当前值。然后清除组合框中的所有项目。最后,搜索项目列表并将匹配的项目添加到组合框中。

编辑:

要访问用作编辑器的文本字段,只需使用:

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