Scala Swing中的MVP
有人知道一些写得很好的示例项目,展示了如何在Scala+Swing中实现MVP架构吗 我在Scala+Swing中只找到了以下关于MVP的主题:Scala Swing中的MVP,swing,scala,design-patterns,model-view-controller,mvp,Swing,Scala,Design Patterns,Model View Controller,Mvp,有人知道一些写得很好的示例项目,展示了如何在Scala+Swing中实现MVP架构吗 我在Scala+Swing中只找到了以下关于MVP的主题: 还有第二个额外的问题:您认为,不使用公共getter将GUI小部件从视图公开给演示者是正确的: def getNextButton(): Reactor // this code in view will be accessed by presenter to setup clickHandler 但是在traits中使用抽象字段(如我提供
def getNextButton(): Reactor // this code in view will be accessed by presenter to setup clickHandler
但是在traits中使用抽象字段(如我提供的第二个链接-)很不幸,Scala Swing放弃了很多底层Java Swing MVC。举一些例子:
ComboBox
无法直接访问模型(与JComboBox
不同),ListView
、按钮
,等等。只有表
有模型,但没有缩放,所以没有类型
因此,如果要使用现有的Java模型,需要进入Scala Swing小部件的peer
字段。如果你想在自己的模型中使用MVC,那么你就必须手工布线
用于在Scala中创建模型的小型库。这是Scala中控制器的一个小示例,但可能不是您想要的:
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)