xboot.de
Java-Games Kontakt

MIDlets selbst erstellen > 2 3 4 5

Der letzte Schliff an der Canvas-Klasse
Die fertige Hello-Klasse
Ausgabe des fertigen MIDlets


Der letzte Schliff an der Canvas-Klasse

In ihrem aktuellen Zustand würde die HelloCanvas-Klasse nicht viel machen. Es fehlt ein entscheidendes Merkmal: Wir benötigen eine Referenz des Geräte-Displays. Diese bekommen wir, indem wir die MIDlet-Referenz an die statische Methode getDisplay() übergeben.
             dsp = Display.getDisplay(midlet);
Man wird dazu verleitet diese Methode im Konstruktor des MIDlets einzubauen. Es ist jedoch zu beachten, dass laut der Dokumentation getDisplay() erst nach dem Start der startApp()-Methode erfolgen darf.
Nun können wir den Inhalt der HelloCanvas auf dem Display ausgeben:
             dsp.setCurrent(this);
Wir erinnern uns an unsere Hello-Klasse. Auch dort haben wir diese Methode benutzt um Ausgaben auf dem Display zu erzeugen. Das ist ein Merkmal von MIDlets. Ich erzeuge etwas zum Anzeigen und mit der setCurrent()-Methode mache ich es "aktuell", sprich ich lasse es anzeigen. Wir erinnern uns: In der Hello-Klasse haben wir uns in einer Zeile die Display-Referenz geholt und sie zum Anzeigen gebracht.
             Display.getDisplay(this).setCurrent(mForm);
Nun wieder zu der HelloCanvas-Klasse. Um eine Referenz des Displays zu erhalten, benötigen wir eine Referenz von MIDlet. Wir "holen" sie uns einfach über den Konstruktor.
Eigentlich brauchen wir keine Referenz des MIDlets. Uns würde die "bestehende" Display-Referenz aus der Hello-Klasse ausreichen. Aber wir machen es einfach doppelt und merken uns zudem, dass auch in der J2ME™-Programmierung gilt: Viele Wege führen nach Rom.
Wem das alles zu verwirrend ist, hier die fertige Klasse (Download):
import javax.microedition.lcdui.*;

class HelloCanvas extends Canvas {

    private String name;
    private Display dsp;
    private Hello midlet;

    public HelloCanvas(Hello m, String n) {
        midlet = m;
        name = n;
        dsp = Display.getDisplay(midlet);
        dsp.setCurrent(this);
    }

    public void paint(Graphics g) {
        g.setGrayScale(255);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setGrayScale(0);
        g.drawString("Hello", getWidth() / 2, 2, Graphics.TOP|Graphics.HCENTER);
        g.drawString(name, getWidth() / 2, getHeight() / 2, Graphics.BASELINE|Graphics.HCENTER);
    }

    protected void keyPressed(int keyCode) {
        midlet.destroyApp(true);
    }
}
Wer aufmerksam das Beispiel gemustert hat, dem wird eine neue Methode aufgefallen sein: keyPressed(); Diese Methode wird automatisch aufgerufen, wenn der Benutzer eine Taste gedrückt hat. Und praktischerweise wird dieser Methode der Code der gedrückten Taste (mehr dazu in der API-Referenz) gleich mitgeliefert. Uns ist der keyCode jedoch egal. Unabhängig von der gedrückten Taste beenden wir das MIDlet.


Die fertige Hello-Klasse

Auch die Hello-Klasse muss noch angepasst werden. Schließlich wollen wir von ihr aus unsere HelloCanvas-Klasse aufrufen. Hier die fertige Klasse im Überblick (Download):
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class Hello extends MIDlet implements CommandListener {
    private Form mForm;
    private TextField mTextField;
    private String Name;

    public Hello() {
        mForm = new Form("Hello");
        mTextField = new TextField("Name:", "", 12, TextField.ANY);
        mForm.append(mTextField);
        Command okCommand = new Command("OK", Command.OK, 1);
        mForm.addCommand(okCommand);
        mForm.setCommandListener(this);
    }

    public void commandAction(Command c, Displayable d) {
        Name = mTextField.getString();
        HelloCanvas hc = new HelloCanvas(this, Name);
    }

    public void startApp() {
        Display.getDisplay(this).setCurrent(mForm);
    }

    public void pauseApp() {}

    public void destroyApp(boolean unconditional) {
        this.notifyDestroyed();
    }
}

Ausgabe des fertigen MIDlets

Wir kopieren nun die beiden .java-Dateien in den src-Ordner des WTK und starten den "BUILD"-Vorgang. Starten wir nun mit "RUN" das MIDlet, so sollten wir folgende Ausgaben erhalten:


Nun sind wir schon am Ende unseres kleinen Beispiels angelangt. Starten wir im WTK unter "Project", "Package", "Create Package" den Erstellungsvorgang, so erhalten wir im Unterordner "bin" eine fertige jar- und jad-Datei.


Nach Oben     Weiter >





© 2002 Steffen Bott
powered by iqbo