我想从数据库ID添加组合框索引。
public static void selectCompany(javax.swing.JComboBox cmbCategory ){
cmbCategory.removeAllItems();
String sql="SELECT * FROM company_details";
try{
Connection conn=dbConnection();
PreparedStatement pstmt=conn.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery(sql);
while(rs.next()){
int id=rs.getInt("company_id");
String category=rs.getString("company_name");
cmbCategory.addItem(id);
cmbCategory.addItem(category);
}
}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
}
cmbCategory是组合框对象。我想将组合框索引和组合框列表显示为类别名称。数据库是mysql。
答案 0 :(得分:6)
您可以将对象添加到ComboBox,而不仅仅是字符串,所以这样的事情可以解决这个问题:
while(rs.next()){
int id=rs.getInt("company_id");
String category=rs.getString("company_name");
Object[] itemData = new Object[] {id, category};
cmbCategory.addItem(itemData);
}
正如Harry Joy指出的那样,你可以通过使用ListCellRenderer告诉我们应该如何渲染这个元素:
class MyListRenderer extends JLabel implements ListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Object[] itemData = (Object[])value;
setText((String)itemData[1]);
return this;
}
}
稍后您可以将其分配给JComboBox:
cmbCategory.setRenderer(new MyListRenderer());
通过这样做,您可以在一个对象中同时拥有ID和类别名称,因此当用户选择组合框中的项目时,您可以访问此对象的所有属性(ID和名称! )。
答案 1 :(得分:1)
如果要将company_id设置为combobox
项目索引,那么我的答案是您无法设置项目索引。如果要同时显示ID和类别,请连接ID和公司名称。
cmbCategory.addItem(id + " " + category);
答案 2 :(得分:1)
使用自定义渲染器时,通过使用键盘输入项目的第一个字符,您将无法访问组合框项目。这是因为组合框模型的搜索使用每个项目的toString()方法来首先获取所请求的项目。在这种情况下,数组的toString()实现并不意义。
另一种解决方案是创建自定义对象并覆盖对象的toString()方法,如下例所示:How to use Map element as text of a JComboBox