2011-05-06 2 views
2

JList와 JComboBox를 서로 다른 위치에서 사용합니다. 둘 다의 내용은 동적으로 변합니다.JComboBox 모델을 변경해, ListModel를 unsigned합니다. 그것은 숨겨진 봉헌 생활을 했습니까?

comboBox를 만든 후에는 comboBox.setModel (String [])이라고 말하면됩니다. 새 모델을 만든 다음 comboBox로 설정해야합니다.

같은 일이 JList에서 발생합니다.

.setNewModel (String [])이라는 새 메서드를 추가하기 위해 내 Jlist 및 ComboBox를 만드는 대신 String []을 받고 ListModel을 반환하는 "유틸리티"클래스에서 정적 메서드를 만들었습니다.

그래서 나는이 작업을 수행 할 수 있습니다

someComboBox.setModel((ComboBoxModel)UtilityClass.convetToListModel(aStringArray)); 

나는 JList의 동일한를 사용합니다.

someList.setModel(UtilityClass.convetToListModel(anotherStringArray)); 

내 질문은 :

가의 ComboBoxModel로의 ListModel의 주조가 예상 밖의 결과를 가져올 수 있을까요? 그렇다면 ArrayString을 모델로 변환하지 않고도 comboBox의 전체 내용을 변경해야합니까? 여기

는 메소드의 코드입니다 :

public static ListModel convertToListModel(String[] nList) 
{ 
    return (new JComboBox(nList).getModel()); 
} 

이 프로그램은 컴파일과 잘 실행하지만 항상 캐스팅 나를 의심, 특별히 복잡한 객체를 생성합니다. 예 저는 JComboBox와 JList를 확장하여 작업을 수행하는 메서드를 추가 할 수 있지만 많은 추가 작업이 필요하다는 것을 알고 있습니다. 왜 ComboBox와 Jlist는 간단한 문자열 배열을 허용하는 것보다 모델을 수정하거나 수정하지 못합니까?

답변

4

어떻게

someComboBox.setModel(new DefaultComboBoxModel(aStringArray)) 

보다 추가 한 모든 유틸리티 방법의 형태로 화이트 노이즈는 어떤/어떤 방식으로 간단/쓰기 쉽게

someComboBox.setModel((ComboBoxModel)UtilityClass.convetToListModel(aStringArray)); 

입니다.

  • 당신이 구현을 이용해야 ... 당신은 단지 내부적으로 그 콤보에 의해 만들어지는 모델에 접근을 위해 대한 JComboBox에을 만듭니다 플러스

    • 메소드의 구현은 ... 단순히 미친 짓이야 하는 ... 진짜 콤보의 사용을 위해 입력 캐스트

    같은 목표를 달성하는 간단한 간단한 방법으로있을 때, 심지어 어떤 우회가는 생각하지 않는다, 그런 낭비/불필요한 물건을하지 마십시오

  • +0

    +1 간단하고 바퀴를 다시 발명하지 않기 위해서. – camickr

    +0

    감사합니다. 이 defaultComboBoxModel을 완전히 간과하고 있습니다. 내가 시도한 첫 번째 일은 거의 정확히하지만 ComboBoxModel을 사용하면 추상이고 모든 (지금) 미친 해결 방법으로 오류가 발생했습니다. 지금 코드 정리하기. – rciafardone

    0

    보통 DefaultComboBoxModel에서 상속 된 새 클래스를 구현하는 것이 좋습니다 (따라서 ListModelComboBoxModel이기도 함). 이 새로운 클래스는 가능한 상황 요구 사항으로 모델을 업데이트하는 메서드로 풍부해질 것입니다. 업데이트 메서드에서는 fireContentsChanged을 호출하여 포함 된 구성 요소에 내용이 변경되었으며 구성 요소가 모든 내용을 다시 그려야한다고 알릴 수 있습니다.

    희망이 있습니다.

    +0

    여분의 기능을 필요로하지 않기 때문에 내가 피하고 싶었던 것, 모든 문제는 단일 단계에서 모델에 내 arrayString을 설정하는 직접적인 방법이 없기 때문에 어려움을 겪었습니다. defaultComboBoxModel가 그것을 해결합니다. 무지가 나를 먹어. – rciafardone

    3

    목록/콤보 상자의 내용을 동적으로 변경해야하는 경우 모델 자체를 직접 관리해야합니다. 매번 새로운 모델을 생성하고 이전 모델을 교체해서는 안됩니다. 모델을 가지고 있다는 요지는 당신이 포함하고있는 데이터를 업데이트 할 수 있다는 것입니다.

    자신 만의 DefaultListModel 또는 DefaultComboBoxModel을 만들고 JList/JComboBox에 전달하기 만하면됩니다. 그런 다음 필요에 따라 모델의 추가/제거 메소드를 사용하여 내용이 변경 될 때 업데이트하십시오.

    private DefaultComboBoxModel model = new DefaultComboBoxModel(); 
    private JComboBox combo = new JComboBox(model); 
    ... 
    
    model.addElement(somethingForMyList); 
    ... 
    model.removeAllElements(); 
    ... 
    model.removeElement(elementToRemove); 
    
    +0

    고마워,하지만 그건 한 번에 루프를 사용하여 배열을 읽는 한 번에 하나의 요소를 추가하는 것을 의미 할 것이다. 마녀는 그러고 싶지 않았다. 내가 왜 질문을 게시했는지, 나는 쉬운 방법이 존재해야하지만 올바른 검색을하지 못한다는 것을 알았습니다. 다시 한번 감사드립니다. – rciafardone

    +0

    모델을 설정하면 모델이 DefaultComboBoxModel의 인스턴스처럼되지만,'combo.getModel()'을 실행하면'ComboBoxModel'의 인스턴스가되고'addElement (e)'만 할 수 없습니다. 보호 된 것 같아? – FaithReaper