小编典典

将值和标签设置为JComboBox

java

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


阅读 213

收藏
2020-11-26

共1个答案

小编典典

JComboBox默认情况下使用渲染器,该toString()方法使用using 方法显示对象数据。因此,您可以创建自己的渲染类以自定义视图。

这就是它的设计方式。

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()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);
}
2020-11-26