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.