A Frame Application

In den meisten Fällen einer Swing - GUI Anwendung reicht es nicht aus, die GUI von SimpleSwingApplication abzuleiten. Auch wenn die Klasse SimpleSwingApplication einen guten Einstieg in die Swing Welt bietet, kommt schnell der Wunsch auf das Fenster selber zu erzeugen. Das nächste Beispiel zeigt ein Fenster mit einem Label, wobei das Fenster durch Ableitung der Klasse scala.swing.Frame erzeugt wird.

Frame
import scala.swing._

object MyFrame{
  def main(args : Array[String]) {
    val myFrame = new MyFrame()
    myFrame.visible = true
  }
}

class MyFrame extends Frame{
  title = "MyFrame"
  contents = new Label("MyLabel")
}
itmapa.de - X2H V 0.5

MVC

Im Bereich der GUI - Anwendungen hat sich herausgestellt, dass das MVC-Pattern (engl. Model View Control) einen guten Ansatz zum Entwickeln anspruchsvoller Anwendungen bietet. Die nachfolgenden Quelltexte zeigen die Anwendung des MVC-Patterns mit Scala. Die Klasse Starter gehört nicht zum MVC-Pattern, sondern dient lediglich zum Starten der Anwendung.

object Starter {
  def main(args: Array[String]) {
    new Control()
  }
}
itmapa.de - X2H V 0.7

class Model {
  var noClicks : Int = 0
}
itmapa.de - X2H V 0.7

import scala.swing._

class View extends Frame{
  val panel = new FlowPanel()
  val button = new Button("Click me")
  val label = new Label()
    
  panel.contents += button
  panel.contents += label
  
  contents = panel
    
  visible = true
}
itmapa.de - X2H V 0.7

import scala.swing.event._

class Control {
  val view = new View
  val model = new Model  
  
  setData()
  
  view.listenTo(view.button)
  view.reactions += {
    case ButtonClicked(b) => model.noClicks += 1
                             setData()
  }
  
  def setData() : Unit = {
    view.label.text = model.noClicks.toString
  }
}
itmapa.de - X2H V 0.7

Das Programm erzeugt ein Fenster mit einem Button und einem Label, wie im nachfolgenden Bild dargestellt.

Fenster mit Button und Label

Das Label zeigt die Anzahl der "Clicks" auf dem Button an. Bei jedem "Click" wird die dargestellte Zahl um eins erhöht.

Wie die Namen der Klassen bereits vermuten lassen, haben die einzelnen Klassen folgende Aufgaben:

Starter

Wie bereits oben erwähnt gehört die Klasse Starter nicht zum MVC-Pattern. Diese Klasse dient lediglich zum Starten der Anwendung.

Model

Die Klasse Model verwaltet die darzustellenden Daten. In diesem Beispiel wird hier lediglich die Anzahl vorgenommener "Clicks" gespeichert.

View

Die Klasse View stellt die Benutzeroberfläche (das Fenster mit Button und Label) zur Verfügung. Das View hat keine Verbindung zum Model.

Control

Das Control übernimmt die Verwaltung der darzustellenden Daten sowie die Reaktion auf Benutzeraktionen. Das Control ist dafür verantwortlich, dass das Label im View die richtige Anzahl "Clicks" darstellt und die Anzahl im Model, bei einem "Click" auf den Button, erhöht wird.