UIDemo: Die interne Klasse 'MainMenu'
Im letzten Abschnitt haben wir gesehen, dass die Klasse UIDemo
die Methoden draw()
und choose(int)
aus der Klasse UIDemo$MainMenu
aufruft, die nun implementiert werden soll.
Die Aufgabe von draw()
ist, das Hintergrundbild zu zeichnen. Eigentlich ist diese Aufgabe so trivial, dass sie gar nicht in eine eigene Methode gekapselt werden müsste. Allerdings wäre es denkbar, die Methode in einem späteren Entwicklungsstadium der Software zu erweitern.
Die Methode choose(int)
besteht aus einer Schleife, in der das Piktogramm des jeweils angezeigten Hauptmenüs gezeichnet und dann auf eine Tastatureingabe gewartet wird. Durch Drücken eines Tasters wird die Schleife verlassen (Befehl break mainloop;
) und die Nummer des ausgewählten Menüpunktes zurückgegeben. Das folgende Listing zeigt die genaue Implementierung der beiden Methoden:
1 | /** |
2 | * Subclass that draws the main menu. |
3 | */ |
4 | class UIDemo$MainMenu { |
5 | /** |
6 | * Draws the background image |
7 | */ |
8 | public void draw() { |
9 | try { |
10 | UIDemo.lcd.drawImage(new Resource("background.jcif"), 0,0); |
11 | UIDemo.lcd.drawString("Main menu", 0, 10); |
12 | } catch (IOException e) {} |
13 | } |
14 | |
15 | /** |
16 | * Draws the main menu items and lets the user choose. |
17 | * @param select Item to draw |
18 | * @return int Selected item |
19 | */ |
20 | public int choose(int select) { |
21 | boolean selected = false; |
22 | int entryCount = 2; // number of menu entries |
23 | |
24 | // trace user choices |
25 | menuloop:for (;;) { |
26 | |
27 | switch (select) { |
28 | case 0: // examples |
29 | try { |
30 | UIDemo.lcd.clearRect(54,18,15,5); |
31 | UIDemo.lcd.drawImage(new Resource("examples.jcif"), |
32 | 14, 24); |
33 | UIDemo.lcd.drawImage(new Resource("big_right.jcif"), |
34 | 122, 32); |
35 | UIDemo.lcd.drawImage(new Resource("down.jcif"), |
36 | 54, 58); |
37 | } catch (IOException e) {} |
38 | break; |
39 | case 1: // system settings |
40 | try { |
41 | UIDemo.lcd.clearRect(54,58,15,5); |
42 | UIDemo.lcd.drawImage(new Resource("syssettings.jcif"), |
43 | 14, 24); |
44 | UIDemo.lcd.drawImage(new Resource("big_right.jcif"), |
45 | 122, 32); |
46 | UIDemo.lcd.drawImage(new Resource("up.jcif"), |
47 | 54, 18); |
48 | } catch (IOException e) {} |
49 | break; |
50 | } |
51 | |
52 | // wait for keypress |
53 | switch (UIDemo.keys.read()) { |
54 | case 'R': selected = true; break; |
55 | case 'U': |
56 | case 'u': if (select > 0) select--; break; |
57 | case 'L': break; |
58 | case 'D': |
59 | case 'd': if (select < entryCount-1) select++; break; |
60 | case 'S': selected = true; break; |
61 | } |
62 | |
63 | if (selected) |
64 | break menuloop; |
65 | } |
66 | return select; |
67 | } |
68 | } |
Listing 2: Die interne Klasse MainMenu
aus UIDemo.java
Damit wäre das Hauptmenu fertig. Was noch bleibt ist die Umsetzung der beiden Untermenüs (SystemMenu und ExamplesMenu), womit wir uns in den folgenden beiden Abschnitten beschäftigen wollen.