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

  • 第二个额外的问题:您认为,不使用公共(public) getter 将 GUI 小部件从 View 公开给演示者是正确的:
    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 不同),ListView 也没有, Button等。仅限 Table有模型,但不是 Scala'fied,所以没有类型。

    所以如果你想使用现有的Java模型,你需要进入peer Scala 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)
    

    This is一个在 Scala 中创建模型的小型库。

    关于swing - Scala-Swing 中的 MVP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17631080/

    相关文章:

    macos - 如何配置 Swing JFrame 以在 Cmd-W 上关闭?

    Java - 如何制作 JButton "Deselected"

    java - 如何在JAVA Swing中实现如下屏幕/布局

    scala - 具有隐式转换的类型类中的堆栈溢出

    Java Architecture - 是否应该在构造函数中传递常用的类?

    Scala - 如何避免对象工厂的 if/else 条件

    java - 如何查看用户从 JList 中选择了什么?

    json - Play 2.1-RC2 : Converting JsValue to Scala Value

    java - 使用 Spring、Scala 和 Jackson 将 JSON 反序列化为 Map[String, SomeJavaObject]

    grails - Grails:可以对命令对象使用创建/保存吗?