2014-02-28 4 views
1

C# ASP.net 및 PHP CodeGreat + Laravel의 웹 응용 프로그램에서 MVC 패턴을 광범위하게 사용했지만 지금은 Java Swing 응용 프로그램 용으로 구현해야합니다. 실제로 JPanel과 같은 요소를 이벤트에서 뷰에 동적으로 추가합니다. 모든 웹 MVC 프레임 워크에서 부분 뷰를 반환하고 div에 삽입하면됩니다. 더 많은 설명 :Java Swing MVC 동적 구성 요소

MainController가 수신하는 버튼이 하나 뿐인보기가 있습니다. 버튼을 클릭하면 뷰가 컨트롤러에 "buttonClicked()"메서드를 호출하도록 지시합니다. 그 결과 JPanel이 생성되어 뷰에 추가되지만 Java Swing MVC에서는 어떻게 수행해야합니까? 내가 말했듯이 웹 MVC 프레임 워크에서 "return new partialView (model)"과 같은 작업을 수행 할 것입니다.

Swing 프레임 워크에 의존해야하는 유일한 클래스는 Views이므로 JPanel은 거기에 생성되지만 컨트롤러 (또는 모델)는 뷰를 배치 할 위치를 지정해야한다는 것을 이해합니다. ? 어떻게 작동합니까?

감사합니다. 내가 생각하기에 충분히 명확하고, 나는 단지 자바로 시작하고 싶다.

+0

감사 패널을 추가 할이 경우

buttonClicked(){ mModel.addPanel(); } Model.addPanel(){ amountPanels++; setChanged(); notifyObservers(); } 

,하지만 난 추측 : 다음 당신은 buttonClicked()는 다음과 같습니다 내가 원하는 것을 분명히 전달하지 못했습니다. 그래서, 난 이미보기에서 BoxLayout에서는이 가지고 있지만, 내가 궁금하네요 것은 : 창에 새로운 JPanel을 추가하는 과정에서 컨트롤러의 역할은 무엇인가? 뷰가 JPanel을 만들고 해당 모델을 사용하여 필드를 채우는 동안 JPanel 데이터 (이름, 텍스트 등)를 전달하기 만합니까? 그리고 실제 "은 buttonClicked()"메소드에있을 때, 내가보기에 말을 어떻게 "새로운 JPanel을 추가"? 모델에서 일종의 "update()"메서드를 호출합니까? 감사합니다. – user3363635

답변

0

원칙적으로 모델은 출력의 모든 논리 및 처리 물리에 관심을 가져야합니다. 이 경우 사용자 입력에 의해 야기되는 메인 뷰의 JPanel의 상태 변화입니다. 따라서 모델과 모델 만의 비즈니스입니다. 그러나 컨트롤러의 역할은 해당 변경 사항을보기에 전달하는 것이고보기는 여전히 변경 사항을 표시해야합니다. 이렇게하면 MVC 모델의 단일 책임 원칙이 유지됩니다.

다음은이 작업을 수행 할 수있는 하나의 방법입니다

보기 :

  • 는 JPanel과 인수에 소요되는 뷰 클래스의 메소드를 구현 그것에게보기 객체의 패널을 동일시와의 UI를 업데이트 패널 (예 : newPanelUpdate(JPanel panel){...}).

모델 :. (예 : newPanel)

  • 새로운 JPanel 필드는 '세터와 게터'의과를 추가합니다.

컨트롤러 :

  • 모델에서 새로운 JPanel의 값을 얻고 newPanelUpdate() 메소드의 인수로 전달 것, 한 번 버튼을 클릭하는 actionListener를 구현합니다.

메인 프로그램 : 여기

  • 당신이 버튼을 클릭하면 표시하고 그것 모델에 JPanel의 필드를 설정하려는 새 인 JPanel를 작성합니다.

이 메서드는 모델, 뷰 및 컨트롤러를 나타내는 데 3 개의 클래스 만 사용한다고 가정합니다. 실제로 모델 구현은 편리하지는 않지만 동일한 원리로 작동합니다.

0

귀하의 경우에는 모델이 필요하지 않습니다. 컨트롤러 내의 뷰에 패널을 추가하기 만하면됩니다.모델에서 JPanels 또는 Gui 구성 요소를 사용하면 MVC를 처음 사용하는 이유를 위반하게됩니다. 당신이보기에 얼마나 많은 패널의 int를 저장하는, 즉 싶은 경우

buttonClicked() { 
    mView.add(new JPanel()); 
} 

는, 다음 함수 addPanel과 함께 그 정수를 갖는 모델을 구현할 수 있습니다(). 당신의보기 관찰자하고 빠른 응답을 자사의 갱신()에

@Override 
update() { 
    add.(new JPanel()); 
} 
관련 문제