Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Swing中的MVP_Swing_Scala_Design Patterns_Model View Controller_Mvp - Fatal编程技术网

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中使用抽象字段(如我提供

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

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

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

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)