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