4

有谁知道一些写得很好的示例项目,展示了如何在 Scala+Swing 中实现 MVP 架构?

我在 Scala + Swing 中只找到了关于 MVP 的这些主题:

第二个额外的问题:您认为,不使用公共 getter 将 GUI 小部件从视图公开给演示者是正确的:

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

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

4

2 回答 2

4

不幸的是,Scala Swing 放弃了相当多的底层 Java Swing MVC。举一些例子:ComboBox没有直接访问模型(不像JComboBox),也没有ListViewButton等等。只有Table模型,但没有Scala'fied,所以没有类型。

因此,如果您想使用现有的 Java 模型,您需要进入peerScala Swing 小部件的领域。如果您希望 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)

这是一个在 Scala 中创建模型的小型库。

于 2013-07-13T20:21:57.760 回答
1

这是 Scala 中控制器的一小部分示例,但可能不是您要查找的内容:

https://github.com/lrytz/pacman/tree/master/src/main/scala/epfl/pacman

于 2013-07-19T17:47:37.573 回答