【问题标题】:Swing Jcombobox摇摆组合框
【发布时间】:2012-06-30 23:24:35
【问题描述】:

我正在做的是,我正在创建动态下拉列表 (jcombobox)。我面临第二个组合框的问题。每当我从 list1 中选择一个名称时,秒。列表显示其名称acc。首先列出没关系,但是当我再次从 list1 中选择不同的名称时,list2 继续显示以前的数据和新数据... 我正在使用函数 removeallitems() 仍然无法从 list2 中删除以前的数据

public void itemStateChanged(ItemEvent e) {
  if (e.getSource() == combo) {
    statename = (String)combo.getSelectedItem();
    try {
      ResultSet rs2 =s.executeQuery("select distinct district_name from district_master where state_code=(select state_code from state_master where state_name='"+statename+"') order by district_name ");
      while(rs2.next()) {  
        districtlist.add(rs2.getString(1));
      }
      list_district  = new String [districtlist.size()];
      districtlist.toArray(list_district);
    } catch(Exception f) {
      f.printStackTrace();
      System.out.println(f);
    }
    combo1.setEnabled(true);
    combo1.removeAllItems();
    for (int i = 0; i < list_district.length; i++) {
      combo1.removeItem(list_district[i]);
      combo1.addItem(list_district[i]);
    }
  }
}

我只给出了我面临问题的程序的一部分......

【问题讨论】:

  • 下次请提供格式化代码...
  • 为什么要将 List 复制到数组中?可以直接在列表for(String s: districtlist) {combo1.addItem(s);}上循环。删除循环内的 removeItem ,因为它不执行任何操作。下次遇到这样的事情时,请使用调试器。
  • 不应在事件调度线程上执行查询。长时间运行的任务应该发生在工作线程上,以确保响应式 UI。请查看 Oracle 网站上的 Concurrency in Swing 教程,了解更多关于如何使用和为什么使用的详细信息

标签: java swing jdbc jcombobox itemlistener


【解决方案1】:

在您的 while 循环之前,您应该清除您的项目列表:

districtlist.clear();
while(rs2.next()){
  //...
}

【讨论】:

  • 您正在清除错误的变量。您指向的变量是数组,根据我的回答,他应该清除的列表是区域列表。
  • @JonTaylor 糟糕,感谢您指出这一点,复制了错误的变量。你应该得到 +1
  • @both 我看到了districtlist.clear();, aaaaach not clear(), list_district = new JList (List or anything)
【解决方案2】:

您不会在每次运行查询时都清除您的地区列表。这意味着每次查询时,您都会将先前查询的项目添加到列表中。

尝试这样做。

districtlist.clear();
while(rs2.next())
{
    districtlist.add(rs2.getString(1));

}

【讨论】:

  • 没问题,我不得不承认它与类似命名的变量有点混淆。
猜你喜欢
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多