0

从数据库的列填充组合框时,我遇到了一个小问题。下面是我的代码:

protected void initComboBoxModel(final ComboBox cmp) {

    try {
        String sql = "SELECT * FROM stockinfo";
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();

        Vector vec = new Vector();
        while (rs.next()) {
            String item = rs.getString("Parts");
            Hashtable h = new Hashtable();
            h.put("cmp", item);
            vec.addElement(h);
            cmp.setModel(new DefaultListModel(vec));
        }

    } catch (Exception ex) {
        Dialog.show("Error", "initComboBoxModel count not populate the combo box.", "OK", null);
    }
    }

组合框已填充,但组合框中的每个选项中都有不必要的文本,例如:

应该说“Hello”的选项说“{cmp = Hello}”。我如何阻止这种情况发生?它发生在组合框中的每个项目上。

提前致谢:)

马尔科

4

2 回答 2

2

您面临的问题是您正在创建一个Vector<HashTable>,因此当您填充组合框时,默认渲染器会toString()从每个哈希表中获取方法。

我不知道你为什么需要一个哈希表,但这就是你被卡住的问题。

我对 codeNameOne 不熟悉,但JComboBox默认情况下摇摆使用渲染器,该渲染器使用toString()方法来显示对象数据。因此,您可以制作自己的渲染器类来自定义视图。

更新

我修改了您的代码和注释代码,假设您使用的是 java 1.5 或更高版本。

protected void initComboBoxModel(final ComboBox cmp) {

    try {
        String sql = "SELECT * FROM stockinfo";
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();

        Vector<String> vec = new Vector<String>(); // use generics 
        while (rs.next()) {
            String item = rs.getString("Parts");
            vec.addElement(item);            
        }

        cmp.setModel(new DefaultListModel(vec)); // here you set the model

    } catch (Exception ex) {
        Dialog.show("Error", "initComboBoxModel count not populate the combo box.", "OK", null);
    }
 }

现在它可以工作了,你不必使用任何渲染器,因为你添加了字符串,所以toString在这种情况下方法很好。

于 2013-09-11T15:26:21.447 回答
0

它在设备上对您不起作用,您更改了类路径以添加您不应该拥有的 JDBC。

您应该使用渲染器或 MultiList 来正确渲染散列表条目。

于 2013-09-11T20:21:46.513 回答