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:
- Ein String für die Bezeichnung des Labels
- Ein String mit dem Inhalt des Textfeldes
- Ein int mit der maximalen Länge des Textfeldes
- 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 >
|
|