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.