xboot.de
Java-Games Kontakt

MIDlets selbst erstellen > 2 3 4 5

Ausbau des Beispiel-MIDlets mit einem Textfeld
Auslesen des Textfeldes


Ausbau des Beispiel-MIDlets

Nun wollen wir das Midlet ein wenig ausbauen. Wie gesagt hat unser Midlet ein Formular mit dem Titel Hello am Display des Handys angezeigt. Nun möchten wir eine einfache Möglichkeit zur Eingabe des Namens einbauen. Auch hierfür finden wir in der Dokumentation des WTK eine fertige Klasse: TextField. Wir müssen jetzt nur noch nachlesen, welche Parameter der Konstruktor dieser Klasse erwartet.
Das sind folgende Parameter:
  1. Ein String für die Bezeichnung des Labels
  2. Ein String mit dem Inhalt des Textfeldes
  3. Ein int mit der maximalen Länge des Textfeldes
  4. Ein int mit der Eingabe-Beschränkung des Textfeldes (oder auch Art des Inhalts)

Als Label nehmen wir "Name:", der Inhalt des Textfeldes soll leer sein (wird ja vom Nutzer gefüllt), die maximale Länge legen wir mit 12 Zeichen fest. Das Textfeld soll dem Nutzer die Eingabe von allen Zeichen erlauben. Also müssten wir laut der Dokumentation den int-Wert 0 übergeben. Es gibt in dieser Klasse jedoch vorgefertigte statische Werte (wieder nachlesen). Der int-Wert 0 entspricht dem Feld ANY. Wenn wir dem Nutzer die Eingabe einer E-Mail-Adresse ermöglichen wollen, verwenden wir das Feld EMAILADDR, dass dem Wert 2 entspricht.
Als Bezeichner unseres Textfeldes wählen wir "mTextField". Das sieht dann so aus:
TextField mTextField = new TextField("Name:", "", 12, TextField.ANY);
Nun müssen wir unser Textfeld nur noch auf dem Formular angezeigt bekommen. In der Dokumentation des WTK finden wir dafür eine passende Methode: append(Item item);
Die anderen beiden gleichnamigen Methoden sind ja schließlich zum Einfügen von Bildern bzw. String-Werten.
Wie wir sehen verlangt diese Methode als Übergabeparameter ein Item-Objekt. Nun das haben wir doch gar nicht oder? Wenn wir allerdings die Dokumentation (schon wieder) zu Rate ziehen lüftet sich das Geheimnis. Die Klasse TextField ist von der Klasse Item abgeleitet. Sie hat somit die Eigenschaften und Methoden von Item geerbt. Genauso wie unser Objekt mit dem Bezeichner mForm die Eigenschaften und Methoden von Form geerbt hat. Rufen wir daher die Methode auf und übergeben wir ihr unser TextField-Objekt:
mForm.append(mTextField);
Der komplette Quelltext sieht dann so aus (Die Änderungen sind fett markiert):
01 import javax.microedition.lcdui.*;
02 import javax.microedition.midlet.*;
03
04 public class Hello extends MIDlet implements CommandListener {
05     private Form mForm;
06
07     public Hello() {
08         mForm = new Form("Hello");
09         TextField mTextField = new TextField("Name:", "", 12, TextField.ANY);
10         mForm.append(mTextField);
11         Command okCommand = new Command("OK", Command.OK, 1);
12         mForm.addCommand(okCommand);
13         mForm.setCommandListener(this);
14     }
15
16     public void commandAction(Command c, Displayable d) {
17         destroyApp(true);
18     }
19
20     public void startApp() {
21         Display.getDisplay(this).setCurrent(mForm);
22     }
23
24     public void pauseApp() {}
25
26     public void destroyApp(boolean unconditional) {
27         this.notifyDestroyed();
28     }
29 }
Und schon besteht unser Formular aus einem Textfeld in dem der Benutzer seinen Namen eingeben kann. Das war einfach.


Auslesen des Textfeldes

Nehmen wir mal an der User hat nun seinen Namen in dem Textfeld erfaßt. Jetzt wollen wir den Namen auslesen und auf dem Display ausgeben. Wir möchten das Ganze aber nicht in dem Formular anzeigen, sondern wollen frei das Display nutzen.
Das MIDP stellt für solche Anforderungen eine Klasse Namens Canvas zur Verfügung. Besonders für Spiele ist diese "Leinwand" unverzichtbar.
Aber erst mal der Reihe nach. Zuerst lesen wir das Textfeld aus. Die Klasse TextField bietet dazu unter anderem die Methode getString() an, die wie am Namen schon zu erkennen einen String-Wert zurück gibt. Wir deklarieren also erst einmal einen String in unserer Klasse:
private String Name;
Die Methode zum Auslesen des Namens bauen wir in unserer commandAction-Methode ein, da diese aufgerufen wird wenn das Kommando ausgelöst wird. Da wir nur ein Kommando haben, brauchen wir keine Abfrage einzubauen. Der Methodenaufruf destroyApp(true); muss nun natürlich verschwinden, sonst wird das Midlet nach auslesen des Namens beendet.
Name = mTextField.getString();
Dann stellt sich noch ein anderes Problem. Das Objekt mTextField haben wir innerhalb des Konstruktors deklariert und definiert. Außerhalb des Konstruktors ist somit das Objekt nicht bekannt. Wir verlegen daher die Deklaration in die Klasse. Wie wir sehen sollte man sich vor der Erstellung eines Java-Programms bereits genaue Gedanken machen welche Variablen und Objekte man benötigt und wann und wo man auf sie zurgreifen möchte.
Die Hauptaufgabe vor dem Erstellen eines Midlets sollte also sein, die genauen Anforderungen aufzustellen (am besten anhand eines Pflichtenheftes) und bei größeren Projekten sogar einen Ablaufplan zu erstellen.
Natürlich kommt es trotz alledem häufig vor, dass man im Nachhinein einiges doch anders macht.


Nach Oben     Weiter >





© 2002 Steffen Bott
powered by iqbo