如何制作java搜索&;可编辑组合框

如何制作java搜索&;可编辑组合框,java,hibernate,netbeans,Java,Hibernate,Netbeans,我创建了一个组合框,它从另一个类加载项目。现在我想做的是,当我在组合框中键入一个字母时,应该选择与该字母相关的所有项目并将其列出。有人能告诉我如何制作吗???尝试此程序,然后根据需要进行修改 该程序显示一个文本框,匹配模式将自动填充 package com.kb; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*; import javax.swing.pl

我创建了一个组合框,它从另一个类加载项目。现在我想做的是,当我在组合框中键入一个字母时,应该选择与该字母相关的所有项目并将其列出。有人能告诉我如何制作吗???

尝试此程序,然后根据需要进行修改

该程序显示一个文本框,匹配模式将自动填充

package com.kb;



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.plaf.basic.*;


public class AutoComboBox
{
      private JComboBox_ cb = null;


    public AutoComboBox() {
        JFrame fr=new JFrame("TEST ComboBox");
    JPanel p = new JPanel();
        p.setLayout( new BorderLayout() );
        String[] ss = new String[]
        {  "112","1123","1124","1134",
           "first",
           "second",
           "third",
           "third 1 before",
           "third 2",
           "third 1 after",
           "third quarter",
           "fourth",
           "fourth and more",
           "fourth and more and more"
        };
    fr.getContentPane().add(p);
        cb = new JComboBox_(ss);

        p.add("South",cb);
        p.add("Center",new JButton("test combo box"));
        fr.pack();
        fr.show();
    }
    public static void main( String[] args ) {
        AutoComboBox test=new AutoComboBox();
    }
}

class JComboBox_ extends JComboBox {
    public int caretPos=0;
    public JTextField tf=null;
    public JComboBox_(final Object items[]) {
        super(items);
        this.setEditor(new BasicComboBoxEditor());
        this.setEditable(true);
    }

    public void setSelectedIndex(int ind) {
        super.setSelectedIndex(ind);
        tf.setText(getItemAt(ind).toString());
        tf.setSelectionEnd(caretPos+tf.getText().length());
        tf.moveCaretPosition(caretPos);
//        tf.setSelectionStart(caretPos);
    }
    public void setEditor(ComboBoxEditor anEditor) {
        super.setEditor(anEditor);
        if (anEditor.getEditorComponent() instanceof JTextField) {
            tf=(JTextField)anEditor.getEditorComponent();
            tf.addKeyListener(new KeyAdapter()
                  {
                        public void keyReleased( KeyEvent ev )
                        {
                          char key=ev.getKeyChar();
                          if (! (Character.isLetterOrDigit(key)||Character.isSpaceChar(key) )) return;
                          String s = tf.getText();
                          caretPos=tf.getCaretPosition();
                          String text="";
                          try {
                            text=tf.getText(0,caretPos);
                          }
                          catch (Exception ex) {
                            ex.printStackTrace();
                          }
                          int n=getItemCount();
                          for (int i=0; i<n; i++) {
                            int ind=((String)getItemAt(i)).indexOf(text);
                            if (ind==0) {
                              setSelectedIndex(i);
                              return;
                            }
                          }
                        }
          } );
        }
    }

}
package com.kb;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入javax.swing.tree.*;
导入javax.swing.plaf.basic.*;
公共类自动信箱
{
私有JComboBox_uCB=null;
公共自动信箱(){
JFrame fr=新JFrame(“测试组合框”);
JPanel p=新的JPanel();
p、 setLayout(新的BorderLayout());
字符串[]ss=新字符串[]
{  "112","1123","1124","1134",
“第一”,
“第二”,
“第三”,
“第三个1之前”,
“第三个2”,
“第三个1之后”,
“第三季度”,
“第四”,
“第四和更多”,
“第四,越来越多”
};
fr.getContentPane().add(p);
cb=新JComboBox_uSS;
p、 加上(“南”,cb);
p、 添加(“中心”,新的JButton(“测试组合框”);
fr.pack();
fr.show();
}
公共静态void main(字符串[]args){
AUTOCOMBOX测试=新的AUTOCOMBOX();
}
}
类JComboBox_uu扩展了JComboBox{
公共int caretPos=0;
公共JTextField tf=null;
公共JComboBox_u3;(最终对象项[]){
超级(项目);
this.setEditor(新的BasicComboxeditor());
此.setEditable(true);
}
公共无效集合选定索引(内部索引){
super.setSelectedIndex(ind);
setText(getItemAt(ind.toString());
setSelectionEnd(caretPos+tf.getText().length());
tf.移动caretposition(caretPos);
//tf.setSelectionStart(caretPos);
}
公共void集合编辑器(ComboBoxEditor anEditor){
super.setEditor(anEditor);
if(anEditor.getEditorComponent()实例的JTextField){
tf=(JTextField)anEditor.getEditorComponent();
addKeyListener(新的KeyAdapter()
{
已发布公共无效密钥(KeyEvent ev)
{
char key=ev.getKeyChar();
if(!(Character.isleterordigit(key)| | Character.isSpaceChar(key))返回;
字符串s=tf.getText();
caretPos=tf.getCaretPosition();
字符串文本=”;
试一试{
text=tf.getText(0,caretPos);
}
捕获(例外情况除外){
例如printStackTrace();
}
int n=getItemCount();

对于(int i=0;i)您想要的,称为自动完成/自动建议。