2

我有一个 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东西!哈!

4

1 回答 1

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

toString()另一种 hacky 方法是覆盖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);
}
于 2013-08-02T19:25:16.573 回答