2012-06-25 3 views
4

저는 현재 프로그래밍 기초 및 기본 자바 프로그래밍에 대한 자체 도움말 가이드로 이클립스의 Java 애플리케이션을 제작하고 있습니다.이 교육은 순전히 교육적이며 주제를 쉽게 참조하고 프로그래밍을 연습 할 수있는 유일한 목적입니다. 이 자습서 응용 프로그램으로 프로그래밍하십시오.JComboBox를 채우는 올바른 방법은 무엇입니까?

프로그래밍의 더 많은 구성 요소를 배우면서 시간이 지남에 따라 응용 프로그램의 내용이 확장됩니다.

그래서 내 첫 번째 질문은 양식을 수정하는 것입니다.

GUI에서 특정 항목을 선택하기 위해 드롭 다운 상자 (JComboBox)를 사용하고 있습니다. 목록을 채우고 프로그램을 깨끗하고 깔끔하게 유지하고 싶습니다. 그래서 내 질문에 어떻게 사람이 JComboBox 채울 코드를 제한하려면 채울 것이라고 것입니다. 아마도 별도로 주제를 추가하고보다 효율적으로 편집 할 수있는 텍스트 파일일까요? 나는 그것을 할 수있는 모든 방법과 반대되는 올바른 프로그래밍 절차를 밟았습니다. 나는 ArrayList을 사용할 수 있다는 것을 알고 있지만, 나는 아주 적은 양의 내용을 사용하여 많은 양의 내용을 사용할 때 선택 사항을 이해하고 싶어합니다.

감사합니다,

사이먼

답변

3

내가 가장 깨끗한 방법은 사용자 정의 ComboBoxModel을 정의하는 것입니다 생각합니다.

이렇게하면 콤보 상자가 만들어지는 부분을 데이터 관리 자체에서 분리하여 콤보 상자에 대한 데이터 모델을 정의 할 수 있습니다.

아마도 새로운 항목을 삽입 할 때 코드를 수정할 필요가 없으므로 텍스트 파일을 사용하는 것이 좋습니다. ComboBoxModel 생성자에서 읽기 파일 프로 시저를 정의 할 수 있습니다. 이렇게하면 프로그램을 실행할 때마다 업데이트 된 콤보 박스의 내용을 찾을 수 있습니다.

응용 프로그램 자체에서 내용을 업데이트 할 수없는 경우 ArrayList는 좋은 선택이 아닙니다. arraylist의 내용을 하드 코딩하는 경우 새 항목을 추가해야 할 때마다 코드를 수정해야합니다.

약간의 예 :

class YourModel implements ComboBoxModel{ 

//implements all interface methods required... 
@override 
public YourModel(String filename) 
{ 
    comboBoxItemList = new ArrayList<String>(); 
    // open your file 
    // add every entry to the the list 
} 
@override 
public Object getElementAt(int index) 
{ 
    return comboBoxItemList.get(index); 
} 
List<String> comboBoxItemList; 
} 

일단 당신이 더 이상 코드를 수정하지 않습니다 필요한 기록. 그리고 여러 다른 JComboBox에도 동일한 모델을 사용할 수 있습니다.

YourModel model = new YourModel("path_to_a_file"); 
JComboBox box1 = new JComboBox(); 
box1.setModel(model); 
JComboBox box2 = new JComboBox(); 
box2.setModel(model); 
+0

감사합니다. 정말로 감사합니다. –

+0

이미 유용한 메소드를 구현 한'DefaultComboBoxModel'을 사용해보십시오. – naXa

1

콤보 상자를 채우는 가장 쉬운 방법은 (Java documentation 상태로)입니다 :

String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; 
//Create the combo box, select item at index 4. 
//Indices start at 0, so 4 specifies the pig. 
JComboBox petList = new JComboBox(petStrings); 

이것은, 그러나, 당신이 갈 수없는 최선의 선택. 콤보 상자에 문자열 배열을 채우는 것은 유연성과 모델/UI 분리를 제공하는 최상의 옵션이 아닙니다. 이것은 MVC 모델이 작동하는 곳입니다. MVC 모델은 기본적으로 Model (경우에 따라 ComboBoxModel)을 사용하여 데이터를 백업하도록 지시합니다. 모델을 사용하면 파일, 소켓, 웹 서비스 등 원하는 곳에서 데이터를 가져올 수있는 가능성과 유연성을 얻을 수 있습니다.

0

사용자 정의 ComboBoxModel을 사용하는 또 다른 방법은 JGoodies Binding을 사용하여 뷰를 뷰 모델. 뷰 모델에보기 특정 코드가 포함되어 있지 않지만 표준 자바 빈 메커니즘 (예 :속성 변경 지원)을 사용하여 필요시 뷰를 업데이트하고 모든 뷰 업데이트를 Bean 속성을 통해 자동으로받습니다. 실제로 표시되는 데이터가 (이 예에서는 Java 열거 형에서 직접 가져 오는) 위치는 뷰 구현과 관련이 없습니다. 다음은 예입니다.

class View { 
    private JComboBox chatPresenceCombo = new JComboBox(); 

    public bind(ViewModel viewModel) { 
     BeanAdapter<ViewModel> beanAdapter = new BeanAdapter<ViewModel>(viewModel, true); 
     Bindings.bind(chatPresenceCombo, new SelectionInList<ChatPresence>(viewModel.getChatPresenceValues(), 
       beanAdapter.getValueModel(ViewModel.PROPERTY_CHAT_PRESENCE))); 
    } 
} 

class ViewModel 
{ 
    private ChatPresence chatPresence; 

    private final PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); 

    public static final String PROPERTY_CHAT_PRESENCE = "chatPresence"; 

    public ChatPresence getChatPresence() { 
     return chatPresence; 
    } 

    public void setChatPresence(ChatPresence chatPresence) { 
     ChatPresence old = this.chatPresence; 
     this.chatPresence = chatPresence; 
     changeSupport.firePropertyChange(PROPERTY_CHAT_PRESENCE, old, chatPresence); 
    } 

    public void addPropertyChangeListener(PropertyChangeListener listener) { 
     changeSupport.addPropertyChangeListener(listener); 
    } 

    public void removePropertyChangeListener(PropertyChangeListener listener) { 
     changeSupport.removePropertyChangeListener(listener); 
    } 

    public ChatPresence[] getChatPresenceValues() { 
     return ChatPresence.values(); 
    } 
} 

public enum ChatPresence { 
    //.... 
} 
관련 문제