Java Micro: Form

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Die Klasse Form ist eine Sammlung von Items die auf diesem abgebildet werden können. Diese Items unterscheiden sich Teilweise nur minimal von anderen High-Level-API Elementen. So gibt es in Forms auch eine CoiceGroup, die wie List funktioniert, oder ein TextField, welches faktisch das selbe ist wie eine TextBox. Das Form bildet die Unterlage auf der die verschiedenen Itemelemente gelegt werden können. Mit der Methode append(Item item) kann ein Item an ein Form angehängt oder durch set(int Index, Item Item) an einen bestimmten Index gesetzt werden.

Die Item-Typen[Bearbeiten]

Es existieren acht verschiedene Item-Typen, welche für verschiedene Aufgaben eingesetzt werden können. Sie können zur einfachen Ausgabe von Strings, Bildern, Fortschrittsbalken, ect. Es können darüber hinaus einfache Eingabemethoden von Daten, String oder auch Auswahlmenüs für die Nutzer_innen erstellt werden. Zusätzlich ist es möglich mit dem CustomItem eigene Items zu erstellen, die sich in Funktionen und/oder auch Aussehen von dennen durch die von der javax.microedition.lcdui bereitgestellten unterscheiden können.

StringItem[Bearbeiten]

Dieses Item wird dazu verwendet Titel oder Text auf dem Bildschirm anzuzeigen. Ein StringItem kann von den User_innen nicht verändert werden. Die meistgenutzte variante Formitems, also auch StringItems zu erstellen, ist die Nutzung des Konstruktors. Welche wie folgt aussieht:

StringItem(String label, String text, int appearanceMode) 

Hierbei wird zwischen drei "appearanceModes" unterschieden. Es besteht aus "PLAIN", "HYPERLINK" und BUTTON. Wobei "PLAIN" das Standartaussehen, "HYPERLINK" den Text als hyperlink erscheinen lässt und "BUTTON zeigt den Text als Button auf dem Bildschirm. Darüber hinaus verfügt das StringItem nur über eine kleine Anzahl von set/get-Funktionen.

DateField[Bearbeiten]

Das DateField bietet den Nutzer_innen die Möglichkeit das Datum und/oder die Uhrzeit einzugeben. Hier wird in folgende drei Modies unterschieden: DATE, TIME, DATE/TIME. Der Konstruktor sieht wie folgt aus:

DateField(String label, int mode) 

TextField[Bearbeiten]

Zur Eingabe von Text in ein Feld. Siehe Kapitel "Die Klasse TextBox"

ChoiceGroup[Bearbeiten]

Dieses Item gibt den Nutzer_innen die Möglichkeit zwischen verschiedenen Elementen zu wählen. Siehe Kapitel "Die Klasse List"

Spacer[Bearbeiten]

Der Spacer is ein leeres nicht interaktives Item, des zwischen andere Items gepackt werden kann. Es verfügt im wesentlichen nur über eine Methode zur Veränderung der Größe, wobei der Konstruktor:

Spacer(int minWidth, int minHeight) 

hierfür in den meisten Fällen genügen sollte. Darüber hinaus kann mit der Funktion:

setMinimumSize(int minWidth, int minHeight) 

die minimale Größe des Items gesetzt werden.

Gauge[Bearbeiten]

Ein Gauge kann als Interaktives Bild verstanden werden. Häufig wird es zur Darstellung von Fortschrittsbalken oder als Lautstärkeregler eingesetzt.

Gauge(String label, boolean interactive, int maxValue, int initialValue) 
Interaktive Mode Beschreibung
CONTINUOUS_IDLE Ruhezustand, nicht Interaktiv, undefinierte Reichweite
CONTINUOUS_RUNNING laufender Betrieb, nicht Interaktiv, undefinierte Reichweite
INCREMENTAL_IDLE The value representing the incremental-idle state , nicht Interaktiv, undefinierte Reichweite
INCREMENTAL_UPDATING The value representing the incremental-updating state of a non-interactive Gauge with indefinite range
INDEFINITE A special value used for the maximum value in order to indicate that the Gauge has indefinite range

Mit der Übergabe der Werte int maxValue() und int initialValue() können der maximale Wert und der momentane Wert des Gauge angegeben werden.

aussehen der Implementierung eines Gauge
form1 = new Form("Adressbuch Teil 1");
gauge = new Gauge("Seite 1 von 3", false, 3, 1);
form1.append(gauge);


ImageItem[Bearbeiten]

Dieses Item liefert eine Referenz auf Bildobjekt. Auch ein ImageItem ist meist allein über den Konstruktor implementierbar.

ImageItem(String label, Image img, int layout, String altText) 

Erstellt ein neues ImageItem mit einem Label, einem Bild, ein gewünschtes Layout(siehe Layout) und einem Text, welcher angezeigt wird falls es zu Problemen mit der Anzeige kommt. Zum Beispiel wenn das Device nicht genügend Speicher zur Verfügung steht um dieses Bild anzuzeigen. Wichtig ist das, das von J2ME unterstützte Dateiformat für Bilder .png ist.

CustomItem[Bearbeiten]

Mit CustomItem ist es Programmierer_Innen möglich eine eigene Subklasse mit selbstdefiniertem Aussehen, Interaktivität und Benachrichtigungsmechanismus zu erstellen.

nähere Erläuterung und Beispiel folgen

Layout[Bearbeiten]

Zusätzlich besteht die Wahl zwischen einer Reihe von Layouts, die dabei helfen sollen die Darstellung attraktiver zu gestalten. Die Layouts können beliebig Kombiniert werden um zu noch besseren Ergebnissen zu gelangen. Das setzen des Layouts wird mit der Funktion setLayout(int) und das Zusammenfassen durch den Operator "OR" bzw. "|" gelöst. Es wird unter den folgenden Layouts Unterschieden:


  • LAYOUT_DEFAULT

Dies ist das Standart-Layout mit dem Wert null. Dies bedeutet auch in Kombination mit anderen Layouts wird der Effekt nicht vom Default abweichen.

  • LAYOUT_LEFT
  • LAYOUT_RIGHT
  • LAYOUT_CENTER

LEFT,RIGHT und CENTER beeinflussen die Anordnung der Items auf der horizontalen Ebene.

  • LAYOUT_TOP
  • LAYOUT_BOTTOM
  • LAYOUT_VCENTER

Beeinflussen die Anordnung auf der vertikaler Ebene.

  • LAYOUT_NEWLINE_BEFORE
  • LAYOUT_NEWLINE_AFTER

Setzt davor bzw. danach eine leere Zeile("\n").

  • LAYOUT_SHRINK
  • LAYOUT_VSHRINK

Verkleinern des Items in horizontaler bzw. vertikaler Richtung.

  • LAYOUT_EXPAND
  • LAYOUT_VEXPAND

Vergrößern des Items in horizontaler bzw. vertikaler Richtung.

  • LAYOUT_2

erlaubt neue MIDP2.0 Effekte für dieses Item

Size[Bearbeiten]

Die Klasse Form und die dazugehörigen Items können auch in ihrer größer verändert werden. Im Default ist es so das die Items in der kleinstmöglichen Größe angezeigt werden und sich mit dem Inhalt erweitern. Es ist aber auch von vornherein konfigurierbar. Dafür wird die Funktion setPreferredSize(int width,int height). Somit kann auch nur eine Richtung als erweiterbar definiert werden.

setPreferredSize(-1,50)

Dieses Beispiel würde das gewählte Item, durch den Wert -1, in horizontaler Richtung veränderbar machen und in der Vertikalen auf 50 Pixel beschränken.

Code Beispiel[Bearbeiten]

Hier ein Beispielform mit allen Elementen außer dem CustomItem:

import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
public class BeispielForm extends MIDlet {
	private Form form;
	private Gauge gauge;
	private Spacer spacer;
	private ImageItem imageItem;
	private TextField txtField;
 	private DateField dateField;
 	private StringItem stringItem;
 	private ChoiceGroup choiceGroup;
 	public BeispielForm() {
 		form = new Form("Kundendaten");
		// StringItem sind nicht editierbar
		stringItem = new StringItem("Bitte geben sie hier ihre Daten  an",null);
		form.append(stringItem);
		// dataField zur Datumsangabe
		dateField = new DateField("Ihr Geburtstag: ", DateField.DATE);
		form.append(dateField);
 		// wie eine TextBox
		txtField = new TextField(
			"Ihr Name: ", "", 50, TextField.ANY);
		form.append(txtField);
		// wie eine Liste
		choiceGroup = new ChoiceGroup(
			"Geschlecht wählen",
			Choice.EXCLUSIVE,
			new String[] {"M", "W"},
			null);
		form.append(choiceGroup);
		// um Fortschritt zu zeigen
		gauge = new Gauge("Seite 1 von 3", false, 3, 1);
		form.append(gauge); 
		// ein Platzhalter zur Übersichtlichkeit einfügen
   		spacer = new Spacer(20, 20);
     	 	form.append(spacer);
		// um den Fehler abzufangen, das eventuell
		// das Bild nicht gefunden wird, wird
               // eine Exception genutzt
		try {
			imageItem = new ImageItem(
				"Im Auftrag von: ",
				Image.createImage("/OO.gif"),
				ImageItem.LAYOUT_DEFAULT,
				"OO");
			form.append(imageItem);
		} catch(Exception e) {}
	}
	public void startApp() {
	 	Display display = Display.getDisplay(this);
	 	display.setCurrent(form);
       }
	public void pauseApp() {}
	public void destroyApp(boolean unconditional) {}
}