2016-06-10 6 views
1

약간의 문제가 있습니다. ListModel 및/또는 ListSelectionModel의 목적을 이해하지 못합니다. 자바 스윙에서 MVC 패턴/UI 위임 원칙이 중요하다고 생각합니다.Java Swing에서 모델/MVC의 목적

예 : 나는 간단한 JList를 갖고 있으며 선택된 값을 가져오고 싶습니다. 그래서 난 그냥 ValueChanged Methode 함께 ListSelectionListener 추가 할 수 있습니다.

하지만 (기본) 모델 또는 (기본) SelectionModel을 사용하면 무엇을 할 수 있습니까? 모델이 장면 뒤에서 작동 할 가능성이 있습니까? 난 당신이 선택한 데이터를 모델을 통해 얻고이 모델을 사용하여 데이터 값을 변경한다고 생각합니다. 그래서 모델이 필요하지만 실제로 사용자 정의 모델을 구현하지 않습니까?

String[] shoppingCart = {"Pen", "Paper", "Smartphone", "Cheese"}; 

    JList list = new JList(shoppingCart); 

    c.add(list, BorderLayout.CENTER); 

    ListSelectionModel lsm = list.getSelectionModel(); 

    ListModel lm = list.getModel(); 

    System.out.println("lm: " + lm); 

    System.out.println("lsm: " + lsm); 

    list.addListSelectionListener(new ListSelectionListener() { 
    @Override 
    public void valueChanged(ListSelectionEvent e) { 
     //System.out.println(list.getSelectionModel().getValueIsAdjusting()); 
     System.out.println("value changed " + list.getSelectedValue()); 

    } 
}); 

그래서 getSelectionModel 나에게 내 선택된 값을 제공합니다

여기 내 코드입니다. 그러나 모델에서 호출되지만 장면 뒤에있는 메서드일까요?

답변

1

MVC를 사용하면 코드를 쉽게 읽고 마이그레이션 할 수 있다고 가정합니다. 그래서 양식에서 MVC를 사용하여 프로그램을 작성하면 향후 웹 버전을 만들 때 코드를 쉽게 마이그레이션 할 수 있습니다.

2

기본값 (ListModel)은 모델 데이터를 추가하기위한 것입니다. 데이터가 모델에 추가되면 자동으로 Jlist가 새로 고쳐집니다. 선택 모델은 목록에서 이루어진 선택을 추적하는 것입니다.

이제는 ListSelectionListener입니다. 선택 이벤트에 대한 알림이 필요할 때 구현할 수 있습니다. 알림이 필요 없다면 사용하지 않아도됩니다.

모델이있는 Jlist가 있다고 가정 해 보겠습니다. 그리고이 모델은 양식 데이터에 해당합니다. 따라서 모델 데이터를 폼에로드하려는 목록을 클릭 할 때 UI를 디자인하려면 ListSelectionListener를 추가하면됩니다.

list.getSelectedValue(); 

은 리스너와 상관없이 선택한 값 (목록에 선택 항목이있는 경우)을 제공합니다.