2012-02-02 21 views
0

我创建了一个类comboauto,用于从组合框中的mysql数据库中获取项目名称。我在默认情况下在jcombobox中分配了jtextfield的自动建议,以便在jtextfield中获取文本。当我在jcombobox中输入一个文本U(它应该自动提示并给出小写字母和大写u值)。在输入文本时,我没有同时看到这种情况。请帮助我,我应该在这里使用什么方法。如何接受jcombo中的小写和大写字母使用jtextfield的自动建议

This is the code i used 
public class comboauto extends javax.swing.JFrame{ 
      Vector Tmpv1=new Vector(); 
      Statement TmpSqlStmnt; 
      ResultSet TmpSqlRs; 
      Connection Tmpcon; 
      String TmpCateId; 
      JTextField Txt01; 
      TreeMap TmpMap=new TreeMap(); 

     public comboauto() { 
       initComponents(); 
     } 

     public void FRM_CBX_AUTOSUGGEST() { 
       Txt01=(JTextField)Cbx01.getEditor().getEditorComponent(); 
       Txt01.addKeyListener(new KeyAdapter() { 
       public void keyTyped(KeyEvent e) 
       { 
         EventQueue.invokeLater(new Runnable() 
        { 
          public void run(){ 
            String Tmptext =Txt01.getText(); 
            if(Tmptext.length()==0) 
            { 
             Cbx01.hidePopup(); 
             setModel(new DefaultComboBoxModel(Tmpv1), ""); 
            } 
            else{ 
             DefaultComboBoxModel m = getSuggestedModel(Tmpv1, Tmptext); 
             if(m.getSize()==0) { 
             Cbx01.hidePopup(); 
             } 
             else{ 
                setModel(m, Tmptext); 
               Cbx01.showPopup(); 

              } 
             } 
           } 
          }); 
        }       
      }); 
      try{ 
        Class.forName("com.mysql.jdbc.Driver"); 
        Tmpcon =DriverManager.getConnection("jdbc:mysql://localhost:3306/project","root","root"); 
        TmpSqlStmnt=Tmpcon.createStatement(); 
        TmpSqlRs=TmpSqlStmnt.executeQuery ("SELECT CateId,CateName FROM Cust_Masterrecord ORDER BY CateName"); 
        System.out.println("DB Connected"); 
        TmpSqlRs.first(); 
        do { 
          String TmpName=TmpSqlRs.getString("CateName"); 
          Cbx01.setSelectedIndex(-1); 
          Cbx01.addItem(TmpName); 
          int TmpCateId=TmpSqlRs.getInt("CateId"); 
          Tmpv1.addElement(TmpSqlRs.getString("CateName")); 
          TmpMap.put(TmpName, TmpCateId); 

          Cbx01.addItemListener(new ItemListener() 
          { 
          public void itemStateChanged(ItemEvent e) { 
            if (e.getStateChange() == e.SELECTED) { 

             Lbl01.setText(TmpMap.get(Cbx01.getSelectedItem()).toString()); 
            } 
           } 
          }); 
        }while(TmpSqlRs.next()); 
    }catch(Exception e){ 
    System.out.println(e); 
    } 
    } 
private boolean hide_flag = false; 
     private void setModel(DefaultComboBoxModel mdl, String str) 
     { 
     Cbx01.setModel(mdl); 
     Cbx01.setSelectedIndex(-1); 
     Txt01.setText(str); 
     } 
private static DefaultComboBoxModel getSuggestedModel(java.util.List<String> list, String text) { 
     DefaultComboBoxModel m = new DefaultComboBoxModel(); 

     for(String s: list) { 
      if(s.startsWith(text)) m.addElement(s); 
     } 
     return m; 
    } 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       comboauto Tmpobj1= new comboauto(); 
       Tmpobj1.FRM_CBX_AUTOSUGGEST(); 
       Tmpobj1.setVisible(true); 


      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JComboBox Cbx01; 
    private javax.swing.JLabel Lbl01; 
    // End of variables declaration     

} 
+0

您确定KeyListener已被触发?@javasi – Alanmars 2012-02-02 08:50:10

+0

请学习java命名约定并坚持使用它们 - _now_ – kleopatra 2012-02-02 10:21:57

回答

1

在你的getSuggestedModel方法中使用String.toUpperCase。 (大写两个字符串小写也有效。)

+0

它工作的很好。我在两个地方使用了String.toUpperCase(),第一次获取结果集字符串值,第二次获取文本。谢谢。 – javasi 2012-02-02 09:58:54

1

也许你可以比较使用

布尔equalsIgnoreCase(字符串anotherString) - 该字符串比较另一个字符串,不考虑大小写。

+0

经过第二次思考,这是不好的。你无法比较整个字符串。 – zeller 2012-02-02 09:00:16

+0

是的,你可以比较string.substring(0,currentIndex) – tartak 2012-02-02 09:07:40

+0

是的,但你的回答并不意味着这一点。 – zeller 2012-02-02 09:29:26

相关问题