2013-02-11 1 views
5

ID、名前、姓のProveedoresクラスがあり、このオブジェクトをコンボボックスに追加します。toString()メソッドを変更するJComboBox Swing

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

このコードでは、differentsオブジェクトをコンボボックスに追加します。できます。しかし、今は、Show only Name属性のtoStringメソッドをオーバーライドしたいと思います。今度はコンボボックスに名前クラス(Proveedores)とIDが表示されます。

entidades.Proveedores[idProveedores=1] 

Proveedoresの名前を表示するにはどうすればよいですか?

ありがとうございました。

+0

なぜ、Proveedoresをサブクラス化してメソッドをオーバーライドしないのですか? – Mirco

+0

ありがとうございます。私はあなたを愛しています – Filowk

+7

まだ良いです - 'toString()'に依存せず、その代わりにカスタムレンダラーを使用してください。 'toString()'メソッドのオーバーライドは、ユーザに表示するのではなく、プログラムのデバッグに使うべきです。 –

答えて

9

これを行うには、カスタムListCellRendererを使用します。

複雑なオブジェクトのGUIデータを生成するためにtoString()を調整しないでください。開発者の目ではなく、ユーザーの内部データ表現を意味します。

+0

Couldn 'それは自分自身をより良く言う。 1 + –

+0

+1 amen ....... – MadProgrammer

+1

ここに - 信じられないほど最近のtoStringミスユースが広がっている... – kleopatra

6

Javaは、デフォルトでObjectのString表現を取得するためにtoString()を使用します。完全修飾クラス名@の後にオブジェクトのhashCodeが続きます。

ListCellRendererを使用して、Proveedoresの名前をComboBoxに表示します。

サンプルコード:

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

は、JComboBoxのProveedoresRendererを設定します。

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()); 
関連する問題