2013-07-13 67 views
4

有誰知道一些精心編寫的示例項目,展示如何在Scala + Swing中實現MVP體系結構?Scala Swing中的MVP

,我發現只有約MVP這個話題在斯卡拉+搖擺:

其次額外的問題:你是怎麼想的,這是正確的暴露從視圖中的GUI控件主持人不使用公共獲得者:

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

,但在特徵中使用抽象字段(如我提供的第二個鏈接中所述 - Scala model-view-presenter, traits):

回答

4

不幸的是,Scala Swing放棄了相當多的底層Java Swing MVC。舉一些例子:ComboBox沒有直接訪問模型(不像JComboBox),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一個小庫Scala中創建模型。