2013-02-11 15 views
5

Kimlik, Ad, Soyadı olan bir Proveedores sınıfım var ve bu nesneyi açılan kutuya eklemek istiyorum.Modify toString() yöntemi 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)); 

Bu kodla, farklı nesneleri combobox'a ekliyorum. İşe yarıyor. Ancak şimdi sadece gösterilecek Name özniteliği için toString yöntemini geçersiz kılmak istiyorum. Şimdi açılan kutu bana isim sınıfını (Proveedores) ve kimliğini gösterir.

entidades.Proveedores[idProveedores=1] 

Kanıtlanmış İsimleri Göstermek için bunu nasıl geçersiz kılabilirim?

Teşekkürler.

+0

Neden yöntemi geçersiz kılmak için Proveedores alt sınıfını seçmiyorsunuz? – Mirco

+0

Teşekkürler. Seni seviyorum – Filowk

+7

Daha da iyisi - 'toString()' ye bağlı kalmayın, bunun yerine özel bir oluşturucu kullanın. 'ToString()' yöntemi geçersiz kılma, kullanıcıya görüntülemek yerine program hata ayıklama için kullanılmalıdır. –

cevap

9

Bunu yapmak için özel bir ListCellRenderer kullanın.

Karmaşık nesneler için GUI verilerini üretmek için toString() öğesini uyarlamamalısınız. Kullanıcılara değil geliştiricilerin gözlerine yönelik bir iç veri temsili içindir.

+0

Couldn 'dir. Kendimi daha iyi söyle. 1+ –

+0

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

+1

burada aynı - toString yanlış kullanımının bu günlerde nasıl yayıldığı inanılmaz ... – kleopatra

6

Java, Object'in String temsilini varsayılan olarak almak için toString() kullanır, tam olarak classname @ öğesini ve ardından nesnenin hashCode öğesini döndürür.

ComboBox'ta Proveedores Ad'ı görüntülemek için ListCellRenderer kullanın.

Örnek Kod:

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

sonra JComboBox için ProveedoresRenderer ayarlayın.

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