UIDemo: Die Hauptklasse
Um die Anwendung übersichtlich und leicht erweiterbar zu halten, wird sie in vier einzelne Klassen aufgeteilt: Die Hauptklasse UIDemo (für die Initialisierung), die innere Klasse UIDemo$MainMenu (sorgt für das Hauptmenü), sowie die beiden inneren Klassen UIDemo$ExamplesMenu und UIDemo$SystemMenu (für die Untermenüs). Übrigens werden bei der Programmiersprache Java innere Klasse immer durch ein "$"-Zeichen im Namen gekennzeichnet.
In diesem Abschnitt wollen wir nun die Hauptklasse unserer Anwendung implementieren. Betrachten Sie dazu das nachfolgende Listing der Klasse UIDemo. Es enthält zum einen den Konstruktor der Klasse und zum anderen eine Methode init(), die einmal bei der Instantiierung eines Objektes aufgerufen wird. Dabei werden die Objekte für die Ansteuerung des LC-Displays (jcontrol.io.Display), der Tastatur (jcontrol.io.Keyboard) sowie des Buzzers (jcontrol.io.Buzzer) angelegt. Außerdem wird hier ein Begrüßungsbildschirm splashscreen.jcif für die Dauer einer Sekunde angezeigt.
Die eigentliche "Logik" für die menügesteuerte Benutzerführung ist im Konstruktor implementiert: Eine Endlosschleife (eingeleitet durch die Befehlssequenz for (;;)) ruft fortwährend die Methode choose aus der Klasse UIDemo$MainMenu auf, um danach anhand des Rückgabewertes zu entscheiden, in welches Untermenü verzweigt werden soll (switch-Anweisung). Die Methode choose arbeitet übrigens blockierend, was bedeutet, daß ihr Aufruf die Programmausführung solange anhält, bis ein genz bestimmtes Ereignis eingetreten ist: Ein Tastendruck.
| 1 | import java.io.IOException; |
| 2 | |
| 3 | import jcontrol.io.Buzzer; |
| 4 | import jcontrol.io.Display; |
| 5 | import jcontrol.io.Keyboard; |
| 6 | import jcontrol.io.Resource; |
| 7 | import jcontrol.lang.ThreadExt; |
| 8 | |
| 9 | /** |
| 10 | * UIDemo shows how to create a graphical user interface |
| 11 | * with JControl. |
| 12 | * |
| 13 | * <p>(C) DOMOLOGIC Home Automation GmbH 2003-2004</p> |
| 14 | */ |
| 15 | public class UIDemo { |
| 16 | static Keyboard keys; |
| 17 | static Display lcd; |
| 18 | static Buzzer buzzer; |
| 19 | |
| 20 | /** |
| 21 | * Inits the UIDemo user interface. Calls UIDemo$MainMenu |
| 22 | * to draw the main menu and calls the submenu classes |
| 23 | * on user's command. |
| 24 | */ |
| 25 | public UIDemo() { |
| 26 | int select = 0; |
| 27 | |
| 28 | // init |
| 29 | init(); |
| 30 | |
| 31 | UIDemo$MainMenu mm = new UIDemo$MainMenu(); |
| 32 | |
| 33 | // mainloop |
| 34 | for (;;) { |
| 35 | mm.draw(); |
| 36 | select = mm.choose(select); |
| 37 | switch (select) { |
| 38 | case 0: |
| 39 | new UIDemo$ExamplesMenu(); |
| 40 | break; |
| 41 | case 1: |
| 42 | new UIDemo$SystemMenu(); |
| 43 | break; |
| 44 | default: break; |
| 45 | } |
| 46 | } |
| 47 | } |
| 48 | |
| 49 | |
| 50 | /** |
| 51 | * Inits class variables, shows splashscreen |
| 52 | */ |
| 53 | private void init() { |
| 54 | keys = new Keyboard(); // get keyboard |
| 55 | lcd = new Display(); // get display |
| 56 | buzzer = new Buzzer(); // get buzzer |
| 57 | |
| 58 | // show splashscreen |
| 59 | try { |
| 60 | lcd.drawImage(new Resource("splashscreen.jcif"), 0,0); |
| 61 | } catch (java.io.IOException e) {} |
| 62 | |
| 63 | // wait a while |
| 64 | try { |
| 65 | ThreadExt.sleep(1000); |
| 66 | } catch (InterruptedException e) {} |
| 67 | |
| 68 | lcd.clearDisplay(); |
| 69 | } |
| 70 | |
| 71 | |
| 72 | /** |
| 73 | * Main method. Program execution starts here. |
| 74 | */ |
| 75 | public static void main(String[] args) { |
| 76 | new UIDemo(); |
| 77 | } |
Listing 1: Auszug aus UIDemo.java
Der obenstehende Quelltext ruft die Methoden draw() und choose(int) der Klasse UIDemo$MainMenu auf. Diese wird im folgenden Abschnitt implementiert.