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.
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")
}
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()
}
}
class Model {
var noClicks : Int = 0
}
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
}
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
}
}
Das Programm erzeugt ein Fenster mit einem Button und einem Label,
wie im nachfolgenden Bild dargestellt.
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.