我制作了一个正在填充数据库条目的组合框。我目前面临的问题是,当我写" H"列表中填写了以" H"开头的所有名称。根据需要,但列表中的第一个名称会自动被选中。如何避免这个问题?
String ch = text.getText();
if (ch.equals("")) {
combo.setVisible(false);
} else {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/userlogin", "root","12345");
Statement st = connect.createStatement();
ResultSet rs = st.executeQuery("SELECT author_name FROM scrpd_authors WHERE author_name LIKE '"+ ch + "%'");
while (rs.next()) {
String name = rs.getString("author_name");
if (name.equals("")) {
searchitems.addItem("");
} else {
searchitems.addItem(rs.getString("author_name"));
searchitems.setVisible(true);
}
}
connect.close();
} catch (Exception ex) {
}
}
请注意,基于mysql查询,组合框中填充了所有我想要的条目,问题只在于选择第一个条目。
答案 0 :(得分:2)
答案 1 :(得分:2)
这是添加到空盒子时不可编辑的JComboBox的怪癖:
addItem(item)
将选择该项insertItemAt(item, 0)
将不会选择该项这个怪癖与填充是在模型上还是在视图上无关 -
因此,如果在填充模型后取消选择(由Rob建议)不是一个选项,则可以使用insert方法(在视图或模型上):
// model
model.addElementAt(item, model.getSizes();
// alternatively view
combo.insertItemAt(item, combo.getItemCount());
通常,建议对模型进行模型操作(与视图上的封面方法相比) - 这样您就可以独立于视图实现和测试模型处理。