【问题标题】:Populate combo box with table values使用表值填充组合框
【发布时间】:2012-04-03 00:42:06
【问题描述】:

编辑(新):

仍然没有弄清楚如何填充cboxCustomers。过去一两天我一直在努力,但没有运气。

如果有人可以提供帮助:http://pastebin.com/e5wibRYw

我从cats 转到customers,顺便说一句。

我尝试了Mr. Xymon's 方法,但没有正确实施,因为它不起作用。

无论我用来处理人口的任何事件,对于我尝试使用的任何控制/事件,我总是得到NullPointerException

旧:

有一个JForm。在它上面,有一个组合框。还有一张带猫的桌子 - cats。每只猫都有idcatName

我想要做的是,当我单击组合框时,将其展开,并用在 cats 表中找到的所有猫 id 填充它。

很喜欢。在下面回答。 不幸的是,我从> 指示的行中收到了许多unreported exception java.sql.SQLException

private void cboxCatsMouseClicked(java.awt.event.MouseEvent evt) {
        // TODO add your handling code here:
        // create an array list to be filled with cat's ids
        ArrayList<String> cats = new ArrayList<String>();
        String query = "SELECT id FROM cats ORDER BY id";
        >java.sql.PreparedStatement stm = connection.prepareStatement(query);

        >ResultSet rs = stm.executeQuery(query);

        >while(rs.next()){
            >String cat = rs.getString("id");
            // add cat's ids tp the array list
            cats.add(cat);
        }

        >rs.close();

        // populate the combo box
        DefaultComboBoxModel model = new DefaultComboBoxModel(cats.toArray());
        cboxCats.setModel(model);
    }

旧答案:

我想我修好了。我只需要将所有突出显示的代码行打包成一个大的try-catch 语句,该语句将捕获SQLException。问题是 - 当我展开组合框时,组合框没有填充 id 值。这是为什么?我是否使用了错误的事件?

【问题讨论】:

  • 请发布完整的异常文本。此外,您还需要在后台线程中进行任何数据库查询,例如 SwingWorker 对象提供的。
  • 关于您的编辑:同样,您应该在后台线程中进行所有数据库查询。你为什么要在 mouseClick 上填充组合框,因为这没有任何意义。查询数据库需要时间,并且可能会影响 Swing 打开组合框的能力。为什么不提前填写组合框?
  • 是的。这更有意义。谢谢。
  • 回答您的编辑,在构造函数中插入您的代码或创建一个方法来执行任务,然后从您的构造函数中调用它。

标签: java mysql swing netbeans combobox


【解决方案1】:

用猫的名字而不是 id 填充组合框不是更好吗?我想出了一个不同的解决方案,直接将字段值添加到模型中,而不是使用 ArrayList。您必须在构造函数中执行它以在加载表单时填充组合框。

DefaultComboBoxModel list = new DefaultComboBoxModel();
JComboBox cbo_cats = new JComboBox(list);


// at constructor or a user-defined method that's called from constructor
   try{     
      // assume that all objects were all properly defined
      s = con.createStatement();
      s.executeQuery("SELECT * FROM cats ORDER BY catName");
      rs = s.getResultSet();
      while(rs.next()){
         //int id = rs.getInt("id");
         //list.addElement(id);

         String c = rs.getString("catName");
         list.addElement(c);
      }
   }catch(Exception err){
      System.out.println(err);
   }

如您所见,我没有使用准备好的语句,但您可以轻松更改它。

【讨论】:

  • 嗯。我看到的唯一问题是组合框仅在表单加载时填充。事情是我的程序有标签。因此,第一个选项卡允许用户查看有关每只猫的数据、更新特定猫、删除和添加新猫。第二个选项卡包含组合框。因此,假设已加载表单,并使用您的方式用现有的猫填充组合框。现在,如果我在应用程序的第一个选项卡上创建一只新猫、更新现有的或删除一只猫,该怎么办。这将更改数据库中的表,这意味着组合框将包含过时的信息。我该怎么办?
  • 对此有补救措施。创建一个方法,比如说 fetchCategory(),它包含用于填充组合框的代码。这与您将从构造函数中调用的方法相同。您需要在开头添加一个代码,该代码使用 DefaultComboBoxModel 对象从组合框中删除所有元素,在我的示例中,我将其命名为列表。所以它会是这样,list.removeAllElements();最后,只需调用方法 fetchCategory();在执行每个类别操作(如更新、删除、插入)之后。这应该会更新组合框的内容。
  • 对于fetchCategoty(),你的意思是不是像这样-pastebin.com/JHH0yLhD忽略catscustomers之间的混淆
  • 没错。这样会在重新加载更新后的猫之前清空组合框。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
相关资源
最近更新 更多