# Textfeld in Canvas, implementation der keys aendern



## MiMij (13. Nov 2007)

Also, ich bin soweit das ich Textfelder habe, einen KeyTimer und die Buchstaben zuzufuegen, und auch ein String Array

```
private static final String[] keys = { " 0+", " -.,1", "abc2", "def3",
			"ghi4", "jkl5", "mno6", "pqrs7", "tuv8", "wxyz9", " #" };
```
um die keys abzufragen.
Nun ist mein Problem das ich zb der Klasse Textfeld einen Typ mitgebe entweder *Nummern *oder *Text*
Fuer den Text kann ich das obere Array benutzen wenn ich jetzt nur nummern will koennte ich dieses benutzen

```
private static final String[] numbers = { "+0", "1", "2", "3",
		"4", "5", "6", "7", "8", "9" };
```

Nur wie benutz ich das, ueberall im Code wird immer keys benutzt.
So zb in der KeyConfirmed Methode:

```
/**
	 * handle the addKey method, and the choosen key
	 */
	public synchronized void keyConfirmed () {
		if (keyMajor != - 1) {
			String all = keys[keyMajor];
			IViewItem cur = (IViewItem) fields.elementAt(currentField);
			numberLinesAvailable = ((InputField) cur).getNumberLines();
			// is the width of the line smaller than the width of the field
			String textCurrentField = ((InputField) cur).getText(numberLines - 1);
			int textWidth = notSelected.stringWidth(textCurrentField);
			int inputFieldWidth = ((InputField) cur).getWidthField() - 15;
			boolean widthLine = textWidth < inputFieldWidth;
			// only add the choosen char if number lines is not bigger than
			// available lines
			if (numberLines < numberLinesAvailable
					|| (numberLines == numberLinesAvailable && widthLine)) {
				((InputField) fields.elementAt(currentField)).addChar(all.charAt(keyMinor), currentChar);
				moveCursor(FORWARD);
			}
			keyMajor = - 1;
			repaint();
		}
	}
```

Wie loes ich das Problem nun am schoensten?

Weil hab mal geschaut
entweder so

```
int x[] = { 1, 2, 3 };					// OK
```
oder

```
int z[] = new int[3];

z[1] = 1; z[2] = 2; z[3] = 3;	 // OK
```

und so gehts net

```
int y[] = new int[3];

y = { 1, 2, 3 }
```

Das problem ist ja, das mein array mti den keys ueberall bekannt sein muss


----------



## MiMij (13. Nov 2007)

Also ich habs nun so geloest das ich ne extra methode aufrufe, sobald eine Taste gedrueckt wird


```
/**
	 * initiate the String array with numbers or letters
	 */
	private void getKeys () {
		if ( ((IViewItem) fields.elementAt(currentField)).getType().equals("text")){
			String [] letters = { " 0+", " -.,1", "abc2", "def3",
					"ghi4", "jkl5", "mno6", "pqrs7", "tuv8", "wxyz9", " #" };
			this.keys = letters;
		} else {
			String [] numbers = { "+0", "1", "2", "3",
					"4", "5", "6", "7", "8", "9" };
			this.keys = numbers;
		}
	}
```
Gibts noch einen eleganteren Weg?


----------



## ice-breaker (13. Nov 2007)

Mal ganz nebenbei: Jeder Handy-Hersteller hat seine eigene Anordnung der Special-Tasten, wenn ein User nun ein Sony-Ericcson hat und du es auf ein Nokia aufgebaut hast, wird es ihm argh komisch vorkommen, da gar nicht die Tasten kommen, die er gerne hätte 
Und Nokia S40, Nokia S60, Motorola und Sony-Ericsson haben verschiedene Belegungen (ich denke andere Hersteller auch)

Ich bin so weit zurückgegangen, dass ich in nem Canvas nen Textfeld hinmale und man mittels Fire-Button den auswählen muss und dann die HighLevel-UI den Input übernimt


----------



## MiMij (14. Nov 2007)

Naja, mein chef fragte ja sogar nach T9. Also mit auswaehlen ist da nix. Und abc def etc ist ja immer gleich belegt. Nur mit der Leertaste wirds Probleme geben


----------



## Jockel (14. Nov 2007)

MiMij hat gesagt.:
			
		

> Und abc def etc ist ja immer gleich belegt.


Was auch nicht immer stimmt (siehe http://dialabc.com/motion/keypads.html). Und was ist mit Geräte die ein QWERTZ-Tastatur haben?


----------



## MiMij (14. Nov 2007)

Es gibt aber doch keine andere Loesung dafuer?!
Achja der Link geht net


----------



## ice-breaker (14. Nov 2007)

MiMij hat gesagt.:
			
		

> Naja, mein chef fragte ja sogar nach T9. Also mit auswaehlen ist da nix. Und abc def etc ist ja immer gleich belegt. Nur mit der Leertaste wirds Probleme geben



jup, T9 ist net und Sonderzeichen auch nicht  gerade wenn es Passwort-Eingaben sind also unbrauchbar.

Alternative? nutzte die HighLevel-GUI mit ihrem TextField, hat alles ws man braucht, ist natürlich aber ein Stilbruch


----------



## MiMij (14. Nov 2007)

Naja T9 waere schon, wenn man das selber schreibt ^^
Und wenn ich so nen standard textfeld nehmen, bringt mir das ja nix. ich kann keine farben/ schriftarten nutzen


----------



## Backwardsman (13. Dez 2007)

wenn du eine geräteunabhängige low-level texteingabe schreiben willst, bleibt dir nichts anderes übrig, als die keyCodes fest für jedes gerät einzukodieren, d.h. für jedes gerät eine eigene version zu erstellen, so machen es zumindest die spielehersteller.


----------

