2010-02-01 3 views
1

나는 개체를 편집하고 선택해야하는 완전히 정상적인 ArrayList<MyObject>입니다."아래에 없음"중 하나를 선택하여 스윙 콤보 상자를 엽니 다.

응용 프로그램 창에서 목록에서 적절한 선택 항목을 선택하려면 JComboBox이 있습니다. 나는이 객체들과 편집기 필드들 중 JList을 포함하는이 객체들에 대한 편집기 대화창을 작성하고 있습니다. 할 수있을 정도로 쉽습니다. 나는 단지 ListModel 구현을 할 것이다. ArrayList을 스틱하고 일반적인 필드를 통해 액세스하십시오. GUI 목록의 내용은 실제 목록에있는 물건의 1 : 1 표현입니다. 쉬운.

하지만 특수한 값이 필요하기 때문에 주 응용 프로그램 창의 콤보 상자에 약간의 두통이 있습니다. 이상적으로 목록의 첫 번째 항목은 "(없음)"이어야하고 null을 반환해야합니다.

이상한 일을 쓰기 위해서 ComboBoxModel을 구현해야하나요, 아니면 이미 구현 된 방법이 더 쉽습니다. 나는 이런 종류의 상황이 전에는 잘랐을 것이라고 상상한다.

+1

해당 객체의 toString()을 사용하여 콤보에 적절한 내용을 표시 하시겠습니까? – Bozho

답변

2

고객님의 ComboBoxModel 구현은 매우 쉽습니다.

이 솔루션이 JComboBoxArrayList, Vector을 만든 후 yourArrayList 변경이되지 않습니다 볼에서 새 Vector을 생성하기 때문에

. 이 기능이 필요한 경우 ComboBoxModel을 직접 구현해야합니다 ( DefaultComboBoxModel 구현 참조).

DefaultComboBoxModel 생성자가 없기 때문에 어쨌든이 작업을 수행해야합니다. List이 필요합니다.

class SpecialComboBoxModel extends DefaultComboBoxModel { 
    public final static String NULL_ELEMENT = "<None>"; 

    public SpecialComboBoxModel(Vector v) { 
     super(v); 
    } 

    @Override 
    public int getSize() { 
     return super.getSize() + 1; 
    } 

    @Override 
    public Object getElementAt(int index) { 
     if(index == 0) { 
      return NULL_ELEMENT; 
     } 
     return super.getElementAt(index - 1); 
    } 
} 


    ArrayList<String> yourArrayList = new ArrayList<String>(); 
    yourArrayList.add("Value1"); 
    yourArrayList.add("Value2"); 
    Vector<String> v = new Vector<String>(yourArrayList); 
    dropdown.setModel(new SpecialComboBoxModel(v)); 
+0

정말 느린 회신을 드려 죄송합니다. 감사합니다. ArrayList/Vector의 차이점을 없애기 위해이 코드에 대한 더 많은 작업이 필요할 것입니다. 그러나 솔루션은 기본적으로 제가 찾고 있었고 지금 당장 작동하는 것 같습니다. – wwwwolf

0

null 개체를 사용하고자 할 수 있습니다. 예를

public class MyObject { 
    public static final MyObject NULL_OBJECT = new MyObject(); 

    .. 
} 

하고 들어 다음에 ArrayList 단지 전화 :

arrayList.add(0, MyObject.NULL_OBJECT); 

을 당신 널 객체 null로 설정 속성 (또는 합리적인 기본값), 그리고 toString() 방법을 모두해야한다 (사용중인 경우) 모든 필드가 null이면 "(없음)"을 반환해야합니다.

+0

ArrayList가 저장 될 때 두통을 일으킬지라도, 그 방법 중 하나입니다. 나는 이것을 위해 평범한 JAXB 호출을 사용하고있다. 또한, arraylist가 첫 번째 항목으로 null 객체를 갖고있는 경우 목록 편집기에도 표시됩니다. 이것은 아마도 많은 수작업을 추가하고 작업 할 null 객체를 제거해야 할 것입니다 ... – wwwwolf

+0

아, JAXB가 그림으로 들어갑니다. 적절한 답을 줄 수 있도록 코드의 일부를 제공하십시오. – Bozho

관련 문제