2012-08-07 8 views
0

UI 구성 요소를 분리하는 방법을 다음과 같이 여기자바 스윙 - 나는 두 UI 구성 요소가

class UIPanel extends JPanel{ ... } 

class MainPanel { Model m; 
    //instantiates UIPanel } 

문제가 UIPanel 클래스에서 나는 방법에 대한 결정을 내릴 모델을 사용하는 ActionListener를 추가 할 것입니다 사용자 조치를 처리합니다. 불행히도 두 클래스를 분리하기로 결정했고 모델에 직접 액세스 할 수 없습니다. 분명한 해결책은 단순히 UIPanel 클래스를 MainPanel에 집어 넣는 것입니다.하지만 분할을 유지할 수있는 방법이 있는지 생각하고있었습니다.

답변

3

당신은 단순히 Model에 대한 참조 UIPanel을 줄 수 :

class UIPanel { 
    UIPanel(Model m) { 
     m.addActionListener(listener); 
    } 
} 

class MainPanel { 
    ... 
    MainPanel() { 
     ... 
     UIPanel uiPanel = new UIPanel(m); // Constructor, a separate setter would be possible also 
     ... 
    } 
} 

이것은 분명히 매우 강한 결합이다. 어쩌면 MainPanelModel에 대한 참조를 전혀 필요로하지 않을 수 있습니까?

0

MVC와 같이 만들기 위해 컨트롤러 클래스를 추가해야하는 것처럼 들립니다. 뷰 조작은 모델을 조작 할 컨트롤러에 의해 들릴 것입니다. 그런 다음 모델은 변경된 이벤트를 실행하고 뷰는 수신 대기합니다. 통지를 수신하면보기가 갱신됩니다.

컨트롤러에서 UI의 사용자 이벤트를 수신하고이를 어떻게 처리할지 결정합니다.

그러면 모델이 둘 이상의보기로 실행될 수 있습니다. 동일한 모델 (각보기에 하나씩)에서 작동하는 둘 이상의 컨트롤러가 있거나 각보기에서 이벤트를 수신하는 컨트롤러에 있어야 할 수 있습니다. 개인적으로 나는 하나의보기를 위해 하나의 컨트롤러를 가졌습니다.

관련 문제