我有一个 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()
方法来显示对象数据。因此您可以创建自己的渲染类来自定义 View 。
这就是它的设计方式。
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())));
或者,如果您有以前的数据并且想要维护。
for(Proveedor p : dao.getAll){
proveedorCombo.addItem(p);
}
关于java - 将值和标签设置为 JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18024246/