我有一个JComboBox,其中的项目是查询的结果。组合显示从查询中获取的所有类别名称,对吧?好的,它有效。现在我需要给每个项目一个值,这个值就是产品的ID。
这是我到目前为止所得到的:
final JComboBox proveedorCombo = new JComboBox();
contentPanel.add(proveedorCombo);
ProveedorDAO dao = new ProveedorDAO();
List<Proveedor> proveedor = dao.getAll();
Object[][] elementos = new Object[proveedor.size()][2];
for (int i = 0; i < proveedor.size(); i++) {
Proveedor p = proveedor.get(i);
elementos[i][0] = p.getId();
elementos[i][1] = p.getNombre();
proveedorCombo.addItem(elementos[i][1]);
}
正如您在代码中看到的,每个项目的“标签”都是它的名称。现在,我如何设置每个项目的ID,以便我可以操作?
谢谢,并尝试轻松回答,我正在努力获取这个Java的最难的事情!哈!
答案 0 :(得分:2)
JComboBox
使用使用toString()
方法显示对象数据的渲染器。因此,您可以创建自己的渲染类来自定义视图。
这是它的设计方式。
proveedorCombo.setRenderer( new DefaultListCellRenderer(){
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus)
{
super.getListCellRendererComponent(list, value, index,
isSelected, cellHasFocus);
if(value != null){
Proveedor proveedor = (Proveedor)value;
setText( proveedor.getName());
}
return this;
}
});
另一种hacky方法是从toString()
覆盖Proveedor
或使您的适配器类使用toString()
,但此解决方案不像另一个那样灵活。
public class Proveedor {
//in some part
@Override
public String toString(){
return this.nombre;
}
}
在组合框中,如果你想从零填充。
proveedorCombo.setModel(new DefaultComboBox(new Vector<Proveedor>(dao.getAll())));
或者,如果您有以前的数据,并且想要维护。
for(Proveedor p : dao.getAll){
proveedorCombo.addItem(p);
}