gpt4 book ai didi

java - 在 CodeNameOne 中填充组合框

转载 作者:行者123 更新时间:2023-12-02 06:44:59 26 4
gpt4 key购买 nike

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

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}”。我该如何阻止这种情况发生?它发生在组合框中的每个项目上。

提前致谢:)

马可

最佳答案

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

我不知道你为什么需要哈希表,但这就是你陷入困境的问题。

我不熟悉 codeNameOne,但正在 Swing JComboBox默认情况下使用渲染器,它使用 toString()显示对象数据的方法。因此您可以创建自己的渲染器类来自定义 View 。

更新

假设您使用的是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在这种情况下方法就很好。

关于java - 在 CodeNameOne 中填充组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18745148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com