2013-02-11 41 views
5

我有一個ID,名稱一Proveedores類,姓氏,我想添加這個對象到組合框。修改toString()方法的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)); 

使用此代碼,我將不同的對象添加到組合框中。有用。但是現在我想重寫toString方法來僅顯示Name屬性。現在,組合框向我展示了名稱類(Proveedores)和ID。

entidades.Proveedores[idProveedores=1] 

如何覆蓋它以顯示Proveedores名稱?

謝謝。

+0

你爲什麼不繼承Proveedores來覆蓋該方法? – Mirco 2013-02-11 18:10:52

+0

謝謝。我愛你 – Filowk 2013-02-11 18:14:07

+7

更好 - 不要依賴'toString()',而是使用自定義渲染器。 'toString()'方法覆蓋應該用於程序調試,而不是用於顯示給用戶。 – 2013-02-11 18:16:42

回答

9

使用自定義ListCellRenderer來完成此操作。

您不應該定製toString()來爲複雜對象生成GUI數據。它是爲了開發人員眼睛而不是用戶的內部數據表示。

+0

Couldn」我自己說得更好。 1+ – 2013-02-11 18:20:33

+0

+1阿門....... – MadProgrammer 2013-02-11 19:41:28

+1

同樣在這裏 - 令人難以置信的是怎麼的toString誤用正在蔓延,這些天...... – kleopatra 2013-02-12 10:45:16

6

Java使用toString()默認情況下獲取對象的字符串表示形式,它將返回完全限定的classname @,接着是對象的hashCode。

使用ListCellRenderer在組合框顯示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); 
    } 
} 

然後設置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());