我有一个带有ID,姓名,姓氏的Proveedores类,我希望将此对象添加到组合框中。
ListIterator listaNombre = listaProveedores.listIterator();
listado = new Proveedores[listaProveedores.size()];
int cont = 0;
while (listaNombre.hasNext()) {
prov = (Proveedores) listaNombre.next();
listado[cont] = prov;
cont++;
}
this.vista.cArticuloFamilia.setModel(new javax.swing.DefaultComboBoxModel(listado));
使用此代码,我将不同的对象添加到组合框中。有用。但是现在我想为show only Name属性覆盖toString方法。现在,combobox向我展示了名称类(Proveedores)和ID。
entidades.Proveedores[idProveedores=1]
如何覆盖它以显示Proveedores名称?
感谢。
答案 0 :(得分:9)
使用自定义ListCellRenderer来完成此操作。
您不应该定制toString()来为复杂对象生成GUI数据。它适用于开发人员眼睛的内部数据表示,而不是用户。
答案 1 :(得分:8)
Java使用 toString()来获取Object的String表示形式,默认情况下它将返回完全限定的classname @,后跟对象的hashCode。
使用ListCellRenderer在ComboBox中显示Proveedores Name。
示例代码:
public static class ProveedoresRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus ) {
Object item = value;
// if the item to be rendered is Proveedores then display it's Name
if( item instanceof Proveedores ) {
item = ( ( Proveedores ) item ).getName();
}
return super.getListCellRendererComponent( list, item, index, isSelected, cellHasFocus);
}
}
然后将 ProveedoresRenderer 设置为 JComboBox 。
ListIterator listaNombre = listaProveedores.listIterator();
listado = new Proveedores[listaProveedores.size()];
int cont = 0;
while (listaNombre.hasNext()) {
prov = (Proveedores) listaNombre.next();
listado[cont] = prov;
cont++;
}
this.vista.cArticuloFamilia.setModel(new javax.swing.DefaultComboBoxModel(listado));
// Set custom renderer to the combobox
this.vista.cArticuloFamilia.setRenderer( new ProveedoresRenderer() );