2013-02-11 3 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] 

어떻게하면 문제 해결 도구 이름을 표시 할 수 있습니까?

감사합니다.

+0

Proveedores를 하위 메서드로 재정의하지 않는 이유는 무엇입니까? – Mirco

+0

감사합니다. 나는 당신을 사랑한다. – Filowk

+7

더 나은 여전히 ​​- toString()'에 의존하지 말고 대신 커스텀 렌더러를 사용하라. 'toString()'메소드 오버라이드는 사용자에게 보여주기보다는 프로그램 디버깅을 위해 사용되어야합니다. –

답변

9

이 작업을 수행하려면 사용자 지정 ListCellRenderer을 사용하십시오.

복잡한 객체에 대한 GUI 데이터를 생성하려면 toString()을 조정하지 않아야합니다. 이는 사용자가 아닌 개발자의 눈에 대한 내부 데이터 표현을 의미합니다.

+0

Couldn ' 나 자신을 더 잘 말한다. 1 + –

+0

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

+1

여기에 - 믿을 수없는 toString 잘못된 사용 요즘 확산되고있다 ... – kleopatra

6

자바는 toString()을 사용하여 Object의 String 표현을 기본적으로 가져오고, 객체의 hashCode를 따르는 정규화 된 classname @을 반환합니다.

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