2014-12-22 119 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也提到过,但我不知道该怎么做。