使用表值填充组合框

时间:2012-04-03 00:42:07

标签: java mysql swing netbeans combobox

编辑(新):

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

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

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

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

无论我用来处理人口的事件是什么,我总是得到NullPointerException我想要使用的控件/事件。

OLD:

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

我想要做的是当我点击组合框,然后展开它时,用id表中找到的所有cats只猫填充它。

SLOVED。 Asnwer在下面。 不幸的是,我从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);
    }

OLD ANSWER:

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

1 个答案:

答案 0 :(得分:2)

使用cat的名称而不是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);
   }

正如您所看到的,我没有使用预备语句,但您可以轻松更改它。