21.05.01 Low-Level Hello World
In den letzten Kapiteln haben Sie Java Mobile Programme mit einer High-Level GUI entwickelt. In diesem und den nachfolgenden Kapiteln lernen Sie die Programmierung von Low-Level GUIs kennen. Sie werden also alles manuell auf den Bildschirm zeichnen und auf vorgefertigte Komponenten verzichten.
Canvas anstatt Screen
In der High-Level Entwicklung verwenden Sie zur Darstellung Ihrer Anwendungen Screens
bzw. deren Kindklassen wie Form
oder List
. Programmieren Sie hingegen auf Low-Level Ebene, kommt ein javax.microedition.lcdui.Canvas
zum Einsatz.
Im Canvas
wird die Methode protected void paint(Graphics g)
überschrieben. Dort können Sie dann nach Lust und Laune auf Ihr Canvas
(deutsch: Leinwand) über die Methoden des javax.microedition.lcdui.Graphics
-Objekts zeichnen.
Sie können bspw. mit dem Aufruf g.fillRect(int x, int y, int width, int height)
ein komplette ausgefülltes Rechteck an der Position x, y
(0,0 wäre oben links) mit der Breite width
und der Höhe height
zeichnen. Mit g.setColor(int red, int green, int blue)
bestimmen Sie den RGB-Farbwert der nächsten Zeichenoperationen (bspw. für das Rechteck) und einen Text str
zeichnen Sie via g.drawString(String str, int x, int y, int anchor)
an die Position x, y
. Mit dem anchor
können Sie den Text (oder auch Bilder) auf der x, y
-Koordinate vertikal und horizontal positionieren. Die hierfür nötigen Konstanten befinden sich in der Graphics
-Klasse.
- Graphics.TOP – Die y-Koordinate ist der höchste Punkt, der Text wird also unterhalb der y-Koordinate gezeichnet.
- Graphics.VCENTER – Die y-Koordinate befindet sich im Mittelpunkte des Bildes (diese Ausrichtung ist für Text nicht möglich).
- Graphics.BASELINE – Die y-Koordinate liegt relativ zur Grundlinie der Schriftart.
- Graphics.BOTTOM – Die y-Koordinate ist der tiefste Punkt, der Text wird also oberhalb der y-Koordinate gezeichnet.
- Graphics.LEFT – Der Text befindet sich komplett rechts von der x-Koordinate. Die x-Koordinate ist folglich der Punkt, der sich am Weitesten links befindet.
- Graphics.HCENTER – Der Text befindet sich horizontal zentriert auf der x-Koordinate.
- Graphics.RIGHT – Der Text befindet sich komplett links von der x-Koordinate. Die x-Koordinate ist folglich der Punkt, der sich am Weitesten rechts befindet.
Horizontale und Vertikale Ausrichtungen können hierbei durch ein oder (|
) miteinander verknüpft werden.
Der Quellcode des Hello World Canvas
könnte so aussehen:
package de.jbb.j2me.ll; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Graphics; public class HelloCanvas extends Canvas { protected void paint(Graphics g) { g.setColor(0, 0, 0); // Farbe auf schwarz setzen g.fillRect(0, 0, getWidth(), getHeight()); // Den kompletten Hintergrund schwarz zeichnen g.setColor(255, 255, 255); // Farbe auf weiß setzen g.drawString("Hello World", 10, 50, Graphics.LEFT|Graphics.BOTTOM); // Hello World schreiben } }
Einbindung des Canvas in ein MIDlet
Sie können das Canvas
wie jede andere Displayable
-Klasse (bspw. einer Form
) auf dem Handydisplay anzeigen lassen:
package de.jbb.j2me.ll; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.MIDlet; public class LowLevelMIDlet extends MIDlet implements CommandListener { private boolean first = true; private Command exit; private Display display; private HelloCanvas canvas; public void commandAction(Command c, Displayable d) { if (exit.equals(c)) { destroyApp(false); } } protected void startApp() { if (first) { canvas = new HelloCanvas(); exit = new Command("Beenden", Command.EXIT, 0); display = Display.getDisplay(this); canvas.setTitle("Hello World Canvas"); canvas.addCommand(exit); canvas.setCommandListener(this); } display.setCurrent(canvas); } protected void destroyApp(boolean unconditional) { notifyDestroyed(); } protected void pauseApp() {} }
Ein Canvas im Fullscreen-Modus
Wenn Sie Spiele entwickeln, werden diese meistens im Vollbild/Fullscreen-Modus angezeigt. Sprich das komplette Handydisplay wird vom Canvas ausgefüllt. Dies würde bei obigem Beispiel so aussehen:
Um diesen Zustand zu erreichen, muss lediglich die Methode canvas.setFullScreenMode(true)
aufgerufen werden. Hierbei ist allerdings zu beachten, dass Sie nun auf Commands
verzichten sollten/müssen, da die meisten Geräte im Vollbildmodus keine Commands
anzeigen bzw. sogar eine Fehlermeldung werfen.
hallo ich bin der dario..
ich hab eure siete hier gelsen
aber ich raff NIX
Ja hallo, mein name ist lisa bläser..
ich hab mir eben eure seite mal angeguckt und ich raff noch viel weniger.. anscheinend bin ich stroh doof
maaan is das öde
Hallo lieber Schüler aus Mühlheim-Klärlich.
Ich möchte euch bitten, diese sinnlosen und kontraproduktiven Kommentare zu unterlassen. Ich behalte es mir vor, diese Kommentare erst dann zu löschen, wenn ich eure Schulleitung darüber informiert habe, dass die Schüler im Informatikunterricht nicht aufpassen. Zudem werde ich euren Deutschlehrer ans Herz legen, ein Auge auf euch zu werfen und besonders zu fördern.
Einen schönen Tag noch und Grüße
Stefan