5

ID、Name、Lastnameの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));

このコードを使用して、さまざまなオブジェクトをコンボボックスに追加します。できます。しかし、ここで、showonlyName属性のtoStringメソッドをオーバーライドしたいと思います。これで、コンボボックスに名前クラス(Proveedores)とIDが表示されます。

entidades.Proveedores[idProveedores=1]

どうすればそれをオーバーライドしてProveedores名を表示できますか?

ありがとう。

4

2 に答える 2

9

これを実現するには、カスタムListCellRendererを使用します。

複雑なオブジェクトのGUIデータを生成するようにtoString()を調整するべきではありません。これは、ユーザーではなく、開発者の目による内部データ表現を目的としています。

于 2013-02-11T18:19:57.213 に答える
8

JavaはtoString()を使用して、デフォルトでオブジェクトの文字列表現を取得し、完全修飾クラス名@とそれに続くオブジェクトのhashCodeを返します。

ListCellRendererを使用して、ComboBoxにProveedoresNameを表示します。

サンプルコード:

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);
    }
}

次に、ProveedoresRendererJComboBoxに設定します。

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 に答える