有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java即时搜索/在JTable单元格中自动完成

我试图在一个具有即时搜索功能的JTable单元格中使用搜索功能,以便在单元格中输入的字符串在下面的下拉列表中返回匹配选项,用户可以从中选择一个值

我在单元格中使用了可编辑的JCombobox,但没有得到想要的结果。我必须点击单元格来显示选项,这也会显示所有的值

如果有人知道如何做到这一点,我将感谢任何形式的帮助或指导

public class AutocompleteInternal extends javax.swing.JInternalFrame {
public static JComboBox combo = new JComboBox();

LoginConnection login = new LoginConnection();
/**
 * Creates new form AutocompleteInternal
 */
public AutocompleteInternal() {
    initComponents();
    combo.setEditable(true);
  combo.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
      @Override
        public void keyReleased(KeyEvent event) {
            System.out.println("hello"+event.getKeyChar());
            System.out.println("hello"+event.getKeyCode());
            String comboName = combo.getEditor().getItem().toString();
            if(event.getKeyCode()>=65 && event.getKeyCode()<=90 || event.getKeyCode()>=95 && event.getKeyCode()<=105 || event.getKeyCode()==8){
             combo.setModel(fatchData(comboName));
              if(combo.getItemCount()>0)
              {

                  combo.showPopup();
                  if(event.getKeyCode()!=8)
                   {
                       ((JTextComponent)combo.getEditor().getEditorComponent()).select(comboName.length(), combo.getEditor().getItem().toString().length());
                       combo.requestFocusInWindow();

                   }
                else{
                      combo.requestFocusInWindow();
                     combo.getEditor().setItem(comboName);

                   }
              }
             else
                {
                    combo.requestFocusInWindow();
                    combo.addItem(comboName);

                }

            }  
        }
  });
}

public DefaultComboBoxModel fatchData(String ComboName)
{
  DefaultComboBoxModel modulo = new DefaultComboBoxModel();
  try
 {
  System.out.println("hello");
  ResultSet rs=null;
  Connection con=null;
 con=LoginConnection.getConnection();
 if(con!=null)
 {
  System.out.println("select name from product where name Like '%"+ComboName+"'");
 //String sql ="select code,name from product where id < 100"; 

      //Object obj = combo.getEditor().getItem().toString();  
     // System.err.println("objectName"+obj);
  PreparedStatement pst= con.prepareStatement("select name from product where  name Like '"+ComboName+"%'",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
     System.out.println("hello");
  rs = pst.executeQuery();

  while(rs.next()){String pName= rs.getString("name");

     modulo.addElement(pName);

 }
 }
 else
 {
     System.out.println("con not found");
 }
 }

 catch(SQLException e)
 {
     System.err.println("Exception "+e);         
 }
  catch(Exception ee)
 {
     System.err.println("Exception:: "+ee);         
 }


return modulo;

}

当输入的字符串与数据库表中的可用选项不匹配时,celleditor(JcomboBox)会失去焦点,并且不会执行任何操作,即它变得无用


共 (0) 个答案