修改toString()方法JComboBox Swing

时间:2013-02-11 18:07:01

标签: java swing jcombobox

我有一个带有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名称?

感谢。

2 个答案:

答案 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() );