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 >
|
|