swing scala design-patterns model-view-controller mvp

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 ):