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:

Hello World Canvas

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:

Fullscreen-Mode

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.

4 Replies to “21.05.01 Low-Level Hello World”

  1. Lisa Bläser

    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

  2. Stefan Kiesel

    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

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.