2011-08-11 4 views
46

Java 7의 JCombobox가 제네릭을 사용하도록 업데이트되었습니다. 저는 항상이 변경 사항을보고 기뻤습니다. 이 방법으로 JComboBox에를 사용하려고 할 때 왜 JComboBox의 getSelectedItem()이 일반적이지 않습니까?

그러나, 나는 방법 나는이 일반적인 유형이 땅에서 still just return Object.

왜이 사용할 것으로 예상 실현? 나에게 바보 같은 디자인 결정 인 것 같습니다. 기본 ListModel에는 일반 getElementAt() 메서드가 있으므로 대신 사용하겠습니다.하지만 JComboBox 자체에서 변경 될 수있는 것처럼 보이는 무언가를하는 원형 교차로입니다.

+2

어쩌면 http://forums.oracle.com/forums/thread.jspa?threadID=2266782&tstart=0 Java7 – mKorbel

+0

@mKorbel +1 아마도 내가 ': 여기 – berry120

+0

(API 포함) http://download.oracle.com/javase/7/docs/api/javax/swing/JComboBox.html#setSelectedItem%28java.lang.Object%29에 대한 Java6과 Java7 간의 변경 사항을 볼 수 없습니다. http://download.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode%28%29 – mKorbel

답변

55

getSelectedItem()을 참조할까요?

콤보 상자를 편집 할 수있는 경우 선택한 항목이 반드시 뒷받침 모델에 포함되지 않고 제네릭 형식으로 제한되지 않기 때문입니다. 예 : JComboBox<Integer> 모델이 [1, 2, 3] 인 경우 구성 요소에 "foo"를 입력 할 수 있으며 getSelectedItem()은 Integer 유형의 객체가 아니라 "foo"문자열을 반환합니다.

콤보 상자를 편집 할 수없는 경우 항상 cb.getItemAt(cb.getSelectedIndex())을 연기하여 유형 안전을 확보 할 수 있습니다. 아무 것도 선택하지 않으면 null을 반환하며 이는 getSelectedItem()과 동일한 동작입니다.

public static <T> T getSelectedItem(JComboBox<T> comboBox) 
{ 
    int index = comboBox.getSelectedIndex(); 
    return comboBox.getItemAt(index); 
} 
+0

아, 그 말은 많은 의미가 있습니다. 기억 상실 후 잊었습니다. JComboBoxes의 편집 가능한면에 대해. 아마 그 중 하나도 내 응용 프로그램에서 편집 할 수 없기 때문에 아마도! 당신이 설명하는 방법은 제가 대신 사용했던 것입니다 - 그것은 그것을하는 둥근 방식처럼 보였습니다. 그러나 지금 나는 왜 그것을 보았습니다. – berry120

+0

항목을 선택하지 않아도됩니다. 'getItemAt'에 무효 인 값 (-1 등)이 지정되면 (자), null를 돌려줍니다. 아무것도 선택되어 있지 않은 경우는, getSelectedItem()와 같은 동작입니다. –

+0

@DuncanJones : 당신 말이 맞아요. 확인하지 않고, getItemAt가 잘못된 인덱스로 호출 된 경우 IllegalArgumentException, IndexArrayOutOfBoundsException 또는 이와 유사한 것을 throw한다고 가정했습니다. – jarnbjo

0

는 형태 보증 된 버전입니다 m 뭔가를 놓친지만, 스레드의 어떤 부분이 그것을 설명합니까?
관련 문제