将值和标签设置为JComboBox

时间:2013-08-02 18:58:21

标签: java swing label jcombobox

我有一个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的最难的事情!哈!

1 个答案:

答案 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);
}