Textfeld in Canvas, implementation der keys aendern

Status
Nicht offen für weitere Antworten.

MiMij

Bekanntes Mitglied
Also, ich bin soweit das ich Textfelder habe, einen KeyTimer und die Buchstaben zuzufuegen, und auch ein String Array
Code:
	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
Code:
	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:
Code:
	/**
	 * 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
Code:
int x[] = { 1, 2, 3 };					// OK
oder
Code:
int z[] = new int[3];

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

und so gehts net
Code:
int y[] = new int[3];

y = { 1, 2, 3 }

Das problem ist ja, das mein array mti den keys ueberall bekannt sein muss 🙁
 
Also ich habs nun so geloest das ich ne extra methode aufrufe, sobald eine Taste gedrueckt wird

Code:
	/**
	 * 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?
 
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
 
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
 
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
 
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
 
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.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben