swing - Scala-Swing的MVP

原文 标签 swing scala design-patterns model-view-controller mvp

是否有人知道写得很好的示例项目,这些示例项目说明了如何在Scala + Swing中实现MVP架构?

我在Scala + Swing中仅找到有关MVP的以下主题:


Improving MVP in Scala
Scala model-view-presenter, traits


还有第二个问题:您如何看待,不使用公共获取器将GUI小部件从视图公开给演示者是正确的:

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


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

最佳答案

不幸的是,Scala Swing放弃了很多底层的Java Swing MVC。举个例子:ComboBox没有直接访问模型的权限(与JComboBox不同),ListViewButton也没有,等等。只有Table拥有模型,但没有Scala认证,因此没有类型。

因此,如果要使用现有的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中创建模型。

相关文章:

java - 摇摆-像下拉菜单一样的Android

java - Apache Spark:Classloader在 jar 中找不到classDef

ruby - 处理许多if条件的更好方法?

c# - 异步模式-在上一个任务完成时运行任务

c++ - 数组中的C++ CRTP

java - 全新jframe中的图像?

java - 是否可以指向特定的JPanel

java - JPanel在setSize方法中没有大小设置

scala - 是否可以在Slick中定义动态投影?

scala - 从DataFrame到数组的不同值