Java Refresh JCombobox

时间:2014-12-22 16:12:45

标签: java swing jcombobox

我从sql数据创建了一个JCombobox。在我从组合框中删除项目后,该项目仍然存在,直到我再次重新启动应用程序?

我在循环中使用additem方法将项目添加到组合框中,我看到人们使用了数据模型,但我发现这很容易。'

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。抱歉编码风格很差,还在学习吗?)

2 个答案:

答案 0 :(得分:4)

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

不要创建新的mainframe()对象。这个对象只是坐在记忆中,因为你似乎没有用它做任何事情。

  

我见过人们使用过数据模型,但我发现这很容易。

您已经看过这段代码,因为它是解决问题的正确方法。您只需要参考模型。然后删除所有项目并将新项目添加到模型中。或者您创建一个新模型并将模型添加到组合框中。

为了重新加载数据,完全没有理由创建一个完整的新框架!

答案 1 :(得分: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之前也提到过,但我不确定该怎么做。