我有一个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东西!哈!
JComboBox默认情况下使用渲染器,该toString()方法使用using 方法显示对象数据。因此,您可以创建自己的渲染类以自定义视图。
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()从Proveedor使用您的适配器类覆盖或使适配器类成为您的适配器类,toString()但此解决方案不如其他解决方案灵活。
Proveedor
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); }