2013-07-13 3 views
4

스칼라 + 스윙에서 MVP 아키텍처를 달성하는 방법을 보여주는 잘 작성된 샘플 프로젝트를 아는 사람이 있습니까?스칼라 스윙의 MVP

그리고 두 번째 추가 질문 :

나는 단지이 스칼라 + 스윙에서 MVP에 대한 항목을 발견 당신이 생각하는 방법, 그것은보기에서 GUI 위젯을 노출 맞아 발표자에게 공개 게터를 사용하지 않음 :

def getNextButton(): Reactor // this code in view will be accessed by presenter to setup clickHandler 

하지만 특성의 추상 필드를 사용합니다 (두 번째 링크에서 설명한대로 - Scala model-view-presenter, traits) :

답변

4

불행히도 스칼라 스윙은 기본 Java Swing MVC를 상당히 버립니다. 몇 가지 예를 들면 다음과 같습니다. ComboBoxJComboBox과 달리 모델에 직접 액세스 할 수 없으므로 ListView, Button 등이 없습니다. Table에만 모델이 있지만 Scala'fied가 아니기 때문에 유형이 지정되지 않습니다.

기존 Java 모델을 사용하려면 Scala Swing 위젯의 peer 필드로 이동해야합니다. MVC를 자신의 모델과 함께 사용하려면 손으로 배선해야합니다.


import scala.swing._ 
import Swing._ 

val m = new javax.swing.DefaultButtonModel 
val cb = new CheckBox ("Check") { peer.setModel(m) } 
val tb = new ToggleButton("Toggle") { peer.setModel(m) } 
val f = new Frame { 
    contents = new FlowPanel(cb, tb) 
    pack().centerOnScreen() 
    open() 
} 

m addChangeListener ChangeListener { _ => 
    println(s"Selected? ${m.isSelected}") 
} 

m.setSelected(true) 

This is

작은 도서관은 스칼라에서 모델을 만들 수 있습니다.