2012-01-21 17 views
0

次のプログラムを使用してmy SQLデータベースの値をcombobox.ifに取得します.JComboBoxの最初の項目をResultSetを使用してmysqlデータベースから選択します。名。私がコンボボックス(結果セット) の2番目の項目を選択した場合、2番目に選択された項目名のid値が表示されます。最初のアイテムをクリックすると、ラベルボックスに最初のアイテムID値が表示されます。私の問題は、最初の項目名は、ID値をラベルボックスに表示されていない、つまり、私の最初のレコードセットの値がID値を表示していないことを意味ですか?データベースからの値をコンボボックスに取得

あなたは while -loop内の二つのことをやっているデータベースからレコードをロード
package javacmbx; 

import java.sql.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 


public class comboautosuggest extends javax.swing.JFrame { 
Vector v=new Vector(); 
     Vector v1=new Vector(); 
     Statement TmpSqlStmnt; 
     ResultSet TmpSqlRs; 
     Connection con; 
     int CateId; 
     JTextField Txt01; 
     TreeMap Map=new TreeMap(); 


    public comboautosuggest() { 
     initComponents(); 
    } 
public void AutoSuggest() { 
       Txt01=(JTextField)Cbx01.getEditor().getEditorComponent(); 
       Txt01.addKeyListener(new KeyAdapter() { 
       public void keyTyped(KeyEvent e) 
       { 
       EventQueue.invokeLater(new Runnable() 
       { 
        public void run(){ 
        String text =Txt01.getText();//.toUpperCase(); 
        if(text.length()==0) 
          { 
           Cbx01.hidePopup(); 
           setModel(new DefaultComboBoxModel(v1), ""); 
          } 
          else{ 
           DefaultComboBoxModel m = getSuggestedModel(v1, text); 
           if(m.getSize()==0) { 
           Cbx01.hidePopup(); 
           } 
           else{ 
              setModel(m, text); 
             Cbx01.showPopup(); 
            } 
           } 
          } 
          }); 

        } 

       /*public void keyPressed(KeyEvent e) 
       { 

        String text = Txt01.getText(); 
        int code = e.getKeyCode(); 
        if(code==KeyEvent.VK_ENTER) { 
        if(!v1.contains(text)) { 
        v1.addElement(text); 
       } 
        hide_flag = true; 
     }else if(code==KeyEvent.VK_ESCAPE) { 
     hide_flag = true; 
     }else if(code==KeyEvent.VK_RIGHT) { 
      for(int i=0;i<v1.size();i++) { 
       String str = (String) v1.elementAt(i); 
       if(str.startsWith(text)) 
       { 
        Txt01.setText(str); 
        return; 
       } 
      } 
     } 
      }*/ 
     }); 
try{ 
     Class.forName("com.mysql.jdbc.Driver"); 
     con =DriverManager.getConnection("jdbc:mysql://localhost:3306/project","root","root"); 
     TmpSqlStmnt=con.createStatement(); 
     TmpSqlRs=TmpSqlStmnt.executeQuery ("SELECT location,pincode FROM combovalue ORDER BY location"); 
     System.out.println("DB Connected"); 
     TmpSqlRs.first(); 

      do 
       { 
       String s= TmpSqlRs.getString("location"); 
       Cbx01.addItem(s); 
       CateId=TmpSqlRs.getInt("pincode"); 
       v1.addElement(s); 
       v.addElement(CateId); 
       Map.put(s, CateId); 
       Cbx01.addItemListener(new ItemListener() 
       { 
        public void itemStateChanged(ItemEvent e) { 
            if (e.getStateChange() == ItemEvent.SELECTED) { 
            Lbl01.setText(Map.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); 
     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; 
    } 

    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     Cbx01 = new javax.swing.JComboBox(); 
     Lbl01 = new javax.swing.JLabel(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     Cbx01.setEditable(true); 
     Cbx01.addKeyListener(new java.awt.event.KeyAdapter() { 
      public void keyPressed(java.awt.event.KeyEvent evt) { 
       Cbx01KeyPressed(evt); 
      } 
      public void keyTyped(java.awt.event.KeyEvent evt) { 
       Cbx01KeyTyped(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(57, 57, 57) 
       .addComponent(Cbx01, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(50, 50, 50) 
       .addComponent(Lbl01, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(77, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(88, 88, 88) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(Lbl01, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(Cbx01, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addContainerGap(190, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold> 

    private void Cbx01KeyPressed(java.awt.event.KeyEvent evt) { 
     //Txt01=(JTextField)Cbx01.getEditor().getEditorComponent(); 
    } 

    private void Cbx01KeyTyped(java.awt.event.KeyEvent evt) { 
     // TODO add your handling code here: 
    } 


    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       comboautosuggest Tmpcas=new comboautosuggest(); 
       Tmpcas.AutoSuggest(); 
       Tmpcas.setVisible(true); 
      } 
     }); 
    } 

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

} 

答えて

2

  1. JComboBoxにアイテムを追加します。
  2. にはItemListenerを追加してください。

これには2つの意味があります。最初に、複数のアイテムリスナーを追加します。つまり、レコードごとに1つです。選択した値を変更するたびに、それらのすべてがトリガーされます。彼らはすべて同じアクションを実行するので、複数を宣言する必要はありません。 Cbx01.addItemListener(new ItemListener() { ... });をループ外に移動します。

次に、最初の項目自体の後に項目リスナーを追加します。したがって、最初の値を追加するとリスナーはまったくトリガーできないため、IDは表示されません(マウスを使用して最初の項目を再度選択すると表示されます)。

ループの前にaddItemListenerを移動することをお勧めします。良い場所は、JComboBox自体をインスタンス化する場所です。

+0

私はループの前にaddItemListnerを移動します。それは同じ問題を示しています。他の解決策があります。この問題から親切に私を助けてください。 – fernandas

関連する問題