从数据库列填充组合框时,我遇到了一些问题。下面是我的代码:
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}”。 我如何阻止这种情况发生?它出现在组合框中的每个项目上。
提前致谢:)
马尔科
答案 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来正确渲染哈希表条目。