Java 将值和标签设置为JComboBox

Java 将值和标签设置为JComboBox,java,swing,label,jcombobox,Java,Swing,Label,Jcombobox,我有一个JComboBox,其中的项是查询的结果。组合框显示从查询中获取的所有类别名称,对吗?好的,它起作用了。现在我需要给每一项赋予一个值,即产品的ID 到目前为止,我得到的是: final JComboBox proveedorCombo = new JComboBox(); contentPanel.add(proveedorCombo); ProveedorDAO dao = new ProveedorDAO(); List<Proveedor

我有一个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]);
    }
final JComboBox proveedorCombo=new JComboBox();
contentPanel.add(proveedorCombo);
ProveedorDAO=new ProveedorDAO();
List proveder=dao.getAll();
Object[][]elementos=新对象[proveedor.size()][2];
对于(int i=0;i
正如您在代码中看到的,每个项目的“标签”都是它的名称。现在,我如何设置每个项目的ID,以便可以在之后进行操作


谢谢,请尽量简单地回答,我正经历着最艰难的时刻,试图得到这个Java的东西!哈!

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;
        }
});
另一种黑客方法是重写
Proveedor
中的
toString()
,或使适配器类使用
toString()
,但此解决方案没有其他解决方案灵活

public class Proveedor {

//in some part
@Override
public String toString(){
    return this.nombre;
}

}
在组合框中,如果要从零开始填充

proveedorCombo.setModel(new DefaultComboBox(new Vector<Proveedor>(dao.getAll())));

-1由于视图原因覆盖toString,方法是自定义渲染器。是的,你做对了。。。我采用简单的方法将适配器类作为呈现,但从未尝试过一个示例-当我在探索肮脏的方法时,这还不够好-两个选项意味着两者的推荐性水平大致相同(huch…这是一个词吗?懒得问Leo)-这里肯定不是这样,一个是它的设计方式,另一个是一个快速而肮脏的黑客,这是一个死胡同,但在任何最琐碎的contexts@kleopatra你好吗?请阅读此文,据我所知,他并不反对使用
toString()
据我所知,您认为如何?
for(Proveedor p : dao.getAll){
    proveedorCombo.addItem(p);
}