5

我有一个带有 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));

使用此代码,我将不同的对象添加到组合框中。有用。但现在我想重写 toString 方法以仅显示 Name 属性。现在组合框向我显示了名称类 (Proveedores) 和 ID。

entidades.Proveedores[idProveedores=1]

如何覆盖它以显示 Proveedores 名称?

谢谢。

4

2 回答 2

9

使用自定义ListCellRenderer来完成此操作。

您不应该定制 toString() 来为复杂对象生成 GUI 数据。它旨在为开发人员而不是用户提供内部数据表示。

于 2013-02-11T18:19:57.213 回答
8

Java 使用toString()来获取对象的字符串表示,默认情况下它将返回完全限定的类名@,后跟对象的 hashCode。

使用ListCellRenderer在 ComboBox 中显示 Proveedores 名称。

示例代码:

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() );
于 2013-02-12T05:56:39.953 回答