Java Micro: Low-Level-API

Dieses Kapitel behandelt die Programmierung mit der Canvas-Methode. Diese Methode bildet die J2ME Low-Level-Programmierung und findet vor allem Einsatz in der Spiele oder Grafik Entwicklung für Mobile Endgeräte. Ein Canvas ist ein Displayable und verfügt somit wie auch die anderen Displayables über Commands und CommandListener.

Die sogenannten "Actions" der Canvas-Methode sind das Anzeigen, Verbergen, Tasten drücken und darauf reagieren und Bildschirme oder Teile davon darzustellen. Das bedeutet es ist möglich auf verschiedenen Teile des Bildschirms verschiedene Canvas anzuzeigen, separate Canvas zu verändern oder zu verbergen.

Eingabe Bearbeiten

Key Events Bearbeiten

Die Low-Level-API besitzt eine Auswahl an Key-Events. Das heißt, das die Programmierer_innen verschiedene Events abgreifen können. Im Gegensatz zur High-Level-API wo nur über Commands wie "OK" oder einer Eingabe z.B. für eine Textbox mit dem Programm kommuniziert werden kann.

Auf folgende Key-Events kann zugegriffen werden:

Event Beschreibung
KeyPressed(int keyCode) Wenn Key gedrückt
KeyReleased(int keyCode) Wenn Key losgelassen
KeyRepeated(int keyCode) Wenn Key wiederholt gedrückt, d.h. unten gehalten wird

Dazu gibt es folgende Key Codes(symbolische Konstanten für Handy-Tasten):

KEY_NUM0, KEY_NUM1, KEY_NUM2, KEY_NUM3, KEY_NUM4, KEY_NUM5, KEY_NUM6, KEY_NUM7, KEY_NUM8, KEY_NUM9, KEY_STAR, and KEY_POUND

Es ist aber auch möglich die Keys über die sogenannten "Game Action Keys" abzugreifen. Diese sehen wie folgt aus:

UP, DOWN, LEFT, RIGHT, FIRE, GAME_A, GAME_B, GAME_C, and GAME_D

Diese Keys helfen den Programmierer_innen bei der Entwicklung für verschiedene Handymodelle, da sie die jeweils "beste Taste" für verschiedene Funktionen auf dem Handy benutzt. So gibt es z.B. bei vielen Nokia Handys ein Navigationskreuz mit einer Bestätigungstaste. In diesem Fall wäre dort die Navigation und der Fire-Button gemapped, aber auch auf den Tasten 2,4,6,8 für Navigation und 5 für den Fire-Key wären diese Funktionen erreichbar.

Pointer Events Bearbeiten

Pointer Events sind für die Unterstützung von Geräten mit Touchscreen, Trackballs ect. gedacht, also für alle mobilen Geräte, wo der Nutzer über die Möglichkeit verfügt Details auf dem Screen auszuwählen. Es wird unterscheiden in drei Arten von mobilen Endgeräten. Zum einen die Art Geräte die über keine andere Eingabe als die zu verfügen gestellten Tasten verfügt und Die die z.B. eine andere Eingabequelle besitzen. Dort unterscheiden man zwischen denjenigen die nur Pointer auf dem Bildschirm(boolean hasPointerEvents()) erkennen und denjenigen die zusätzlich auch Bewegungen(boolean hasPointerMotionEvents()) erkennen können.

Sichtbarkeits Events Bearbeiten

Der J2ME-Programmmanager ruft spezielle Funktionen auf bevor ein Canvas angezeigt(showNotify()) bzw. verborgen(hideNotify()) wird. Diese bieten die Möglichkeit zusätzliche Befehl abzusetzen wie z.B. ...

Bilder Bearbeiten

Die Darstellung von Bildern beruht auf der Klasse javax.microedition.lcdui.Image. Hierbei wird eine Unterstützung für das png Bildformat angeboten. Um ein Bild in der Low-Level API einzubinden wird eine Image Instanz erzeugt und in der public void paint (final Graphics g) Methode, die javax.microedition.lcdui.Canvas.paint(Graphics g) überschreibt, gezeichnet.

  private Image source = Image.createImage (this.getClass().getResourceAsStream("0.png"));
  private int maxHeight = this.getHeight() / 2;
  private int maxWidth  = this.getWidth() / 2;

  protected void paint (Graphics g) {
    try {
      g.drawImage(source,maxWidth,maxHeight, Graphics.HCENTER|Graphics.VCENTER);
    }
    catch (IOException ex) {
      ex.printStackTrace();
    }
  }

Statt über einen InputStream zu gehen können Sie auch den direkten Pfad zum Bild angeben.

      source = Image.createImage ("/de/bastie/me/sudoku/gui/0.png");


Canvas Bearbeiten

Die Klasse "Canvas" ist wie die Klasse MiDlet eine abstracte Klasse. Es muss ein eigenes Klasse die von Canvas erbt erstellt werden um auf dem Bildschirm zu schreiben oder zu malen. In Canvas ist die Methode paint(Graphics g) verankert, welche für das zeichnen sorgt.

import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
public class CanvasBeispiel extends MIDlet {
    Canvas meinCanvas;
    public CanvasBeispiel() {
        meinCanvas = new MeinCanvas(); //erstellt das Objekt MeinCanvas
    }
    public void startApp() {
       Display display = Display.getDisplay(this);
       display.setCurrent(meinCanvas); // bringt das Canvas zur Anzeige
       meinCanvas.repaint();
   }
   public void pauseApp() {}
   public void destroyApp(boolean unconditional) {}
}
class MeinCanvas extends Canvas {   
       height = getHeight(); // liefert die höhe des Bildschirms
       width = getWidth(); // liefert die breite des Bildschirms     
   public void paint(Graphics g) {
       g.setColor(1,0,0); // setColor(int rot, int grün, int blau)  
       g.fillRect(width/2,height/2,0,0); // färbt das obere linke Vierte
   }
}

Die Klasse MeinCanvas zeigt ein gefülltes Rechteck auf dem Bildschirm. Mit dem Thema Canvas wird sich ausführlich in dem Kapitel Canvas beschäftigt.