2012-09-09 4 views
1

나는 카드 게임을 만들려고합니다.카드 게임에서 mvc 디자인

내가 가지고있는 몇 가지 클래스는 다음과 같습니다. CardModel, CardView; DeckModel, DeckView.

데크 모델에는 카드 모델 목록이 있습니다. MVC에 따르면 카드를 데크에 보내려면 카드 모델을 데크 모델에 추가하면 카드보기가 데크에 추가됩니다 이벤트 처리기로보기.

DeckModel 클래스에 addCard (CardModel m)가 있지만 데크보기에 해당 모델의 카드보기를 추가하는 이벤트를 보내려는 경우 모델에보기 참조 만 허용됩니다. .

질문 : 카드 모델 및 데크 모델에보기 클래스에 대한 참조가 있어야한다면 어떻게해야합니까? 그렇지 않다면 어떻게하는 것이 좋습니까?

업데이트 코드 : 좋은 MVC 모델에서

public class DeckModel { 
private ArrayList<CardModel> cards; 

private ArrayList<EventHandler> actionEventHandlerList; 

public void addCard(CardModel card){ 
    cards.add(card); 

    //processEvent(event x); 
    //must I pass a event that contain card view here? 
} 

CardModel getCards(int index){ 
    return cards.get(index); 

} 

public synchronized void addEventHandler(EventHandler l){ 
    if(actionEventHandlerList == null) 
     actionEventHandlerList = new ArrayList<EventHandler>(); 

    if(!actionEventHandlerList.contains(l)) 
     actionEventHandlerList.add(l); 
} 

public synchronized void removeEventHandler(EventHandler l){ 
    if(actionEventHandlerList!= null && actionEventHandlerList.contains(l)) 
     actionEventHandlerList.remove(l); 
} 

private void processEvent(Event e){ 
    ArrayList list; 

    synchronized(this){ 
     if(actionEventHandlerList!= null) 
      list = (ArrayList)actionEventHandlerList.clone(); 
     else 
      return; 
    } 
    for(int i=0; i<actionEventHandlerList.size(); ++i){ 
     actionEventHandlerList.get(i).handle(e); 
    } 
} 
} 
+0

문제를 설명하는 대신 적절한 코드 조각을 추가하십시오. – Chris

답변

1

보기에 대해 알고는 안된다. 이를 달성하기 위해 컨트롤러에 가입 할 리스너 인터페이스로 모델을 제공 할 수 있습니다. 따라서 컨트롤러는 모델 변경 후 뷰를 업데이트 할 수 있습니다.

JavaFX에서는 다음을 지원합니다 : ObservableList, 속성 및 바인딩. ListView에서 수행 된 작업을 살펴볼 수 있습니다. items 속성은 ObservableList이며 ListView 컨트롤러가 이에 따라 뷰를 업데이트합니다. 따라서 ListView의 사용자는 아무 것도 인식하지 못하고 단순히 items의 요소를 추가/제거/변경할 수 있습니다.

+0

감사합니다. 관찰 가능한 목록과 목록보기를 확인합니다 :) – Hong