Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java刷新JCombobox_Java_Swing_Jcombobox - Fatal编程技术网

Java刷新JCombobox

Java刷新JCombobox,java,swing,jcombobox,Java,Swing,Jcombobox,我从sql数据创建了一个JCombobox。在我从combobox中删除该项之后,该项仍然保留,直到我重新启动应用程序为止 我在循环中使用additem方法向combobox添加项目,我见过有人使用datamodel,但我发现这很容易 mainfarme.java中的代码 public mainFrame() { initComponents(); fillUserCombo(); } public void fillUserCombo()

我从sql数据创建了一个JCombobox。在我从combobox中删除该项之后,该项仍然保留,直到我重新启动应用程序为止

我在循环中使用additem方法向combobox添加项目,我见过有人使用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在按下delete按钮后从数据库中删除用户,但在此之后,combobox itemusername仍然存在

我尝试再次调用fillusercombo方法,认为它将重新填充combofox,但它是相同的,也尝试了重新绘制方法

如何刷新组合框? 对糟糕的编码风格感到抱歉,还在学习吗

mainFrame mf = new mainFrame();
mf.fillUserCombo();
不要创建新的大型机对象。这个对象只是放在内存中,因为你似乎没有对它做任何事情

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

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


完全没有理由仅仅为了重新加载数据而创建一个完整的新帧

我在另一个关于堆栈溢出的问题上找到了解决方案。我想你在那里搜索过吗?在我问之前反正在这里

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

        userCombo.removeAllItems();
        fillUserCombo();


}
我使用removeAllItems删除所有项,然后再次调用fillUserCombo


camickr之前也提到过这一点,但我不太确定如何做到这一点。

删除数据后是否要打开新窗口??大型机mf=新的大型机;mf.fillUserCombo??您应该调用以前的大型机实例的fillUserCombo,而不是创建大型机的新对象。fillusercombo在mainframe类中,因此..创建新的mainframe对象是个问题。请参阅camickr answerok。我删除了大型机mf=新的大型机;mf.fillUserCombo;mf.revalidate;mf.重涂;现在怎么办?