2011-02-04 65 views
0

我有一個編輯的JComboBox,如果你進入裏面的東西它會搜索所選用戶和點擊進入,這是我的代碼我的JComboBox沒有反應正常

jComboBoxReceiver.getEditor().getEditorComponent().addKeyListener(new java.awt.event.KeyAdapter() { 
      public void keyPressed(java.awt.event.KeyEvent e) { 
       if(e.getKeyCode() == KeyEvent.VK_ENTER)    { 
        sr = new Search(((String) jComboBoxReceiver.getSelectedItem()));  
        usrList = sr.searchUser(); 
        String[] userList = new String[usrList.size()] ; 
        for(int i=0;i<usrList.size();i++){ 
         userList[i]= usrList.get(i).getUserName(); 
        } 
        DefaultComboBoxModel modelList = new DefaultComboBoxModel(userList);  
        jComboBoxReceiver.setModel(modelList);    
        }   
       } 
     });   

然後,例如,如果你鍵入f,它應該返回弗雷德和炸雞,但是在它找到結果後,它會再次搜索弗雷德,這是自己的第一個項目......誰能告訴我爲什麼?

+2

爲了更快提供更好的幫助,請發佈SSCCE(http://pscode.org/sscce.html)。 – 2011-02-04 20:18:03

回答

0

而不是更換組合框模型,請嘗試更新模型。

jComboBoxReceiver.getEditor().getEditorComponent().addKeyListener(new 
    java.awt.event.KeyAdapter() { 
     public void keyPressed(java.awt.event.KeyEvent e) { 
      if(e.getKeyCode() == KeyEvent.VK_ENTER)    { 
       sr = new Search(((String) jComboBoxReceiver.getSelectedItem()));  
       usrList = sr.searchUser(); 
       DefaultComboBoxModel model = jComboBoxReceiver.getModel(); 
       model.removeAllElements(); 
       for(int i=0;i<usrList.size();i++){ 
        model.addElement(usrList.get(i).getUserName()); 
       } 
      } 
     }   
    }; 

當您設置模型時,您將重置JComboBox的世界視圖。特別是,當模型被替換時,選擇被設置爲模型的選定項目。這是默認情況下的第一項。在你的情況「弗雷德」。這將取代用戶在組合框編輯器中鍵入的內容。