2014-12-22 51 views
2

我從sql數據創建JCombobox。而我從組合框刪除項目後,該項目仍然保持,直到我再次重新啓動應用程序?Java刷新JCombobox

我在循環中使用additem方法來添加項目到組合框,我看過人們使用datamodel,但我覺得這很容易。

在mainfarme.java代碼

public mainFrame() 
    { 
     initComponents(); 
     fillUserCombo();  
    } 

public void fillUserCombo() 
    { 



    try { 
     st=con.createStatement(); 
     rs=st.executeQuery("SELECT `username` FROM `users` WHERE 1"); 
     while(rs.next()) 
     { 
     username=rs.getString(1); 
     userCombo.addItem(username); 
     } 

    } 
    catch (SQLException ex) 
    { 
    } 
} 



private void delUesrBtnActionPerformed(java.awt.event.ActionEvent evt) {           
      user u = new user(); 
      String user =userCombo.getSelectedItem().toString(); 
      u.delUser(user); 
    } 

代碼user.java

public void delUser(String user) 
    { 
     try 
     { 
      this.con=db.getCon(); 
      // System.out.println(user); 
      String sql="DELETE FROM `users` where (username=?)"; 
      ps=(PreparedStatement)con.prepareStatement(sql); 
      ps.setString(1,user); 
      ps.execute(); 

      JOptionPane.showMessageDialog(null,"User Deleted"); 

      mainFrame mf = new mainFrame(); 
      mf.fillUserCombo(); 

      mf.revalidate(); 
      mf.repaint(); 
     } 
     catch (SQLException ex) 
     { 
      Logger.getLogger(user.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

這裏按下刪除按鈕後deluser從數據庫中刪除用戶,但在此之後,組合框項目(用戶名)仍然在那裏。

我嘗試再次調用fillusercombo方法,認爲它會重新填充combofox但其相同,也嘗試了repaint()方法。

如何刷新組合框? (PS。對不起編碼不佳的風格,還在學習?)

+0

要刪除數據後打開新窗口? 'mainFrame mf = new mainFrame(); mf.fillUserCombo();'??相反,創建mainFrame的新對象,你應該調用前面的'mainFrame'實例的'fillUserCombo()' –

+0

no。 fillusercombo()在大型機類中是這樣的。 – mhrzn

+0

創建mainFrame的新對象是問題。請參閱camickr回答 –

回答

4
mainFrame mf = new mainFrame(); 
mf.fillUserCombo(); 

不要創建一個新的mainframe()對象。這個對象只是坐在記憶裏,因爲你似乎沒有對它做任何事情。

我已經看到人們使用datamodel,但我覺得這很簡單。

您已經看過這段代碼,因爲它是解決問題的正確方法。所有你需要的是對模型的參考。然後刪除所有項目並將新項目添加到模型中。或者您創建一個新模型並將該模型添加到組合框。

完全沒有理由創建一個全新的框架來重新加載數據!

0

我在堆棧溢出的另一個問題上找到了解決方案。我想在那裏搜索?之前我問反正這裏是

private void delUesrBtnActionPerformed(java.awt.event.ActionEvent evt) {           
     user u = new user(); 
     String user =userCombo.getSelectedItem().toString(); 
     u.delUser(user); 

     userCombo.removeAllItems(); 
     fillUserCombo(); 


} 

The link to the solution

我使用removeAllItems()刪除所有項目,並再次調用fillUserCombo()。

camickr也提到過,但我不知道該怎麼做。