2012-01-29 2 views
2

Ive는 JComboBox에이 솔루션을 사용하여 키/값 쌍의 효과를 가져 와서 텍스트를 표시하지만 ID = 2와 같이 ID를 검색하지만 텍스트는 "Banana"입니다.Java Swing 용 키 값 쌍 JList

이제 이것을 대신 JList에 구현해야하지만 값을 다시 얻을 수 있도록 반환 된 JList에서 Object를 가져 오는 데 문제가 있습니다.

public class ComboItem { 

    private String value; 
    private String label; 

    public ComboItem(String value, String label) { 
     this.value = value; 
     this.label = label; 
    } 

    public String getValue() { 
     return this.value; 
    } 

    public String getLabel() { 
     return this.label; 
    } 

    @Override 
    public String toString() { 
     return label; 
    } 
} 


DefaultListModel listmodel = new DefaultListModel(); 
JList cAktkod = new JList(listmodel); 
int pos = cAktkod.getModel().getSize(); 

listmodel.add(pos, new ComboItem(resultSet.getString("MMCFI5"),resultSet.getString("CTTX40"))); 

하지만 그것은 개체를 반환

cAktkod.getSelectedValue(); 

할, 나는 그것이 나에게 내 ComboItem 객체를 제공하는 얻는 방법을 잘 모릅니다 경우이 단계 내가 getValue을 할 수 있도록()에서 대신

+3

왜 반환 된 객체를 캐스트 할 수 없습니까? – mre

답변

6

기본적으로 JList는 Object의 어떤 유형 (즉, 서브 클래스)이 목록에 있는지 알지 못합니다. 그러나 목록에 넣은 모든 것이 ComboItem 인 경우 가져 오는 Object는 ComboItem이됩니다. 컴파일러에게 어떤 타입인지 알려주기 위해 그냥 캐스팅해야합니다.

Object selectedObj = cAktkod.getSelectedValue(); 
if (selectedObj instanceof ComboItem) { 
    ComboItem selectedItem = (ComboItem) selectedObj; 
} 
else { 
    // something has gone wrong! 
} 
+0

클래스를 혼합하여 DefaultListModel에 삽입 할 수 있으므로 유형을 확인하는 것이 타당합니다. 물론 제공된 예제에서는 ComboItems 만 추가되므로 ComboItems 만 반환됩니다. – brain

5

하나의 간단한 해결책이 설명되어 있습니다. 객체를 다시 기본 유형으로 캐스팅하지 않으려면 다른 방법이 있습니다.

  • ComboItem일반적인Vector 만듭니다.
  • Vector
  • 의 각 항목은 Vector
  • 선택에 사용 JList 만들기 추가, 선택된 지수는 다음 해당 개체를 가져 Vector.elementAt(index) 전화를받을.
+0

JList가 Java 7에서 "genericized"되지 않았습니까? –

+0

@HovercraftFullOfEels 가능합니다. 얼마 전에 1.7 번 시도해보고 DukeBox 소프트웨어를 실행하지 않고 혐오감을 없앴습니다. 오라클이 1.7 JRE 자동 업데이트 (아마도 대부분의 버그는 다림질 될 것입니다)를 내리면 다시 살펴볼 것입니다. –

4

당신은 당신의 목록과 모델의 일반 버전을 사용할 수 있어야합니다, 그래서 당신이 JList의 <ComboItem> 및 DefaultListModel <ComboItem>을 사용하십시오. 이렇게하면 추가하고 가져 오는 객체는 모두 ComboItem 유형입니다.