MVP en Scala-Swing
design-patterns model-view-controller (2)
Desafortunadamente, Scala Swing abandona bastante el Java Swing MVC subyacente. Para dar algunos ejemplos: ComboBox
no tiene acceso directo al modelo (a diferencia de JComboBox
), tampoco lo hace ListView
, Button
, etc. Only Table
tiene el modelo, pero no Scala''fied, por lo que no está tipeado.
Por lo tanto, si desea utilizar los modelos Java existentes, debe ingresar a los campos peer
de los widgets Scala Swing. Si quieres MVC con tus propios modelos, entonces, tendrás que hacer el cableado a mano.
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)
Esta es una pequeña biblioteca para crear modelos en Scala.
¿Alguien conoce algunos proyectos de muestra bien escritos que muestran cómo lograr la arquitectura de MVP en Scala + Swing?
Solo encontré estos temas sobre MVP en Scala + Swing:
Y la segunda pregunta adicional: cómo piensas, es correcto exponer los widgets de GUI desde la vista hasta el presentador que no usa getters públicos:
def getNextButton(): Reactor // this code in view will be accessed by presenter to setup clickHandler
pero usando campos abstractos en los rasgos (como se describe en el segundo enlace proporciono - Scala model-view-presenter, traits ):
Este es un pequeño ejemplo de controladores en Scala, pero puede que no sea exactamente lo que está buscando:
https://github.com/lrytz/pacman/tree/master/src/main/scala/epfl/pacman