在CodeNameOne中填充组合框

时间:2013-09-11 15:20:45

标签: java netbeans combobox codenameone

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

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);
    }
    }

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

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

提前致谢:)

马尔科

2 个答案:

答案 0 :(得分:2)

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

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

我不熟悉codeNameOne但是在swing 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方法在这种情况下很好。

答案 1 :(得分:0)

它在设备上不起作用,你改变了类路径来添加你不应该拥有的JDBC。

您应该使用渲染器或MultiList来正​​确渲染哈希表条目。