Dieser Abschnitt befasst sich mit der Implementierung des ersten Untermenüs "SystemMenu". Dazu wird im Wesentlichen das Bild des jeweiligen Untermenüs auf das LCD gezeichnet. Der vom Benutzer ausgewählte Untermenüpunkt soll durch eine Invertierung kenntlich gemacht werden. Der folgende Quelltext zeigt die Implementierung dieser Funktionalität anhand der Klasse UIDemo$SystemMenu
. An den markierten Stellen können Befehle eingefügt werden, die nach Auswahl eines Menüpunkts ausgeführt werden sollen. Unser Beispiel zeigt den ausgewählten Menüpunkt für 1 Sekunde als String auf dem Display an.
260 | /** |
261 | * Subclass that draws the system settings submenu. |
262 | */ |
263 | class UIDemo$SystemMenu { |
264 | public UIDemo$SystemMenu() { |
265 | int select = 0; |
266 | |
267 | loop:for (;;) { |
268 | |
269 | UIDemo.lcd.clearRect(0,10,90,7); |
270 | UIDemo.lcd.clearRect(1,18,126,45); |
271 | UIDemo.lcd.drawString("System Settings", 0, 10); |
272 | |
273 | select = choose(select); |
274 | switch (select) { |
275 | case 0: // insert code for menu item 1 here |
276 | case 1: // insert code for menu item 2 here |
277 | case 2: // insert code for menu item 3 here |
278 | case 3: // insert code for menu item 4 here |
279 | case 4: // insert code for menu item 5 here |
280 | UIDemo.lcd.clearRect(1,18,126,45); |
281 | UIDemo.lcd.drawString("Selected menu item: ".concat( |
282 | String.valueOf(select+1)), 10,20); |
283 | try { |
284 | ThreadExt.sleep(1000); |
285 | } catch (InterruptedException e) {} |
286 | case 5: return; |
287 | default: break; |
288 | } |
289 | } |
290 | } |
291 | |
292 | /** |
293 | * Draws system settings menu and highlights user's choice. |
294 | * @param select preselection |
295 | * @return int selected menu item |
296 | */ |
297 | int choose(int select) { |
298 | int oldselect = -1; |
299 | final int images = 5; |
300 | Display lcd = UIDemo.lcd; |
301 | |
302 | // draw menu |
303 | try { |
304 | lcd.drawImage(new Resource("syssettingschooser.jcif"), |
305 | 14, 23); |
306 | } catch (java.io.IOException e) {} |
307 | // left arrow |
308 | try { |
309 | lcd.drawImage(new Resource("left.jcif"), 1, 31); |
310 | } catch (IOException e) {} |
311 | |
312 | mainloop:for (;;) { |
313 | if (select!=oldselect) { |
314 | // set selection |
315 | lcd.setDrawMode(Display.XOR); |
316 | if (oldselect!=-1) |
317 | lcd.fillRect(14+oldselect*20, 23, 20, 22); |
318 | lcd.fillRect(14+select*20, 23, 20, 22); |
319 | oldselect = select; |
320 | lcd.setDrawMode(Display.NORMAL); |
321 | } |
322 | |
323 | switch (UIDemo.keys.read()) { |
324 | case 'u': |
325 | case 'U': |
326 | case 'L': |
327 | if (select == 0) { |
328 | select = images; |
329 | break mainloop; |
330 | } |
331 | else select--; |
332 | break; |
333 | case 'd': |
334 | case 'D': |
335 | case 'R': |
336 | if (select<images-1) select++; |
337 | break; |
338 | case 'S': |
339 | break mainloop; |
340 | } |
341 | } |
342 | return select; |
343 | } |
344 | } |
Für die Vollständigkeit dieser Demo-Applikation fehlt nun lediglich noch das Untermenu ExamplesMenu, welches im nächsten Abschnitt implementiert wird.