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.