2013-07-13 41 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中创建模型。