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 :(
 

MiMij

Bekanntes Mitglied
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?
 

ice-breaker

Top Contributor
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

Bekanntes Mitglied
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
 

ice-breaker

Top Contributor
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

Bekanntes Mitglied
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

Bekanntes Mitglied
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.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Textfeld für Dezimalzahl mit Vorzeichen Android & Cross-Platform Mobile Apps 2
L Android Text aus Textfeld speichern Android & Cross-Platform Mobile Apps 5
H AVD gibt kein Textfeld aus. Android & Cross-Platform Mobile Apps 5
L Textfeld als Zeiteingabefeld verwenden Android & Cross-Platform Mobile Apps 4
Arif Android Canvas wird nicht gezeichnet? Android & Cross-Platform Mobile Apps 0
Dechasa Android Android - Canvas NullpointException Android & Cross-Platform Mobile Apps 2
Z Canvas onDraw() Variablen muss in der Methode initialisiert werden Android & Cross-Platform Mobile Apps 1
F Mit Canvas zeichen und durch einen Timer aktualiesieren Android & Cross-Platform Mobile Apps 1
J Canvas mit dem Accelorometersensor bewegen Android & Cross-Platform Mobile Apps 0
E Android Zeichnen auf Canvas - Teilbereich als Bild speichern Android & Cross-Platform Mobile Apps 3
B onDraw Canvas jede Millisekunde aufrufen? Android & Cross-Platform Mobile Apps 12
G canvas in view anzeigen Android & Cross-Platform Mobile Apps 10
S Android Canvas - drawText - Update Text in ActionListener Android & Cross-Platform Mobile Apps 8
B Java ME Canvas Android & Cross-Platform Mobile Apps 2
J Java ME Canvas Klasse Gameloop und Funktion Android & Cross-Platform Mobile Apps 2
B Java ME Leere Canvas Seite Android & Cross-Platform Mobile Apps 21
P Java ME Texteingabe Canvas Android & Cross-Platform Mobile Apps 2
D wie geht Klassenvererbung von Canvas Klassen Android & Cross-Platform Mobile Apps 2
U Probleme mit der drawString Methode bei Canvas Android & Cross-Platform Mobile Apps 8
H Canvas kann nichts auf Graphics drawen Android & Cross-Platform Mobile Apps 3
M Text in Canvas scrollen lassen Android & Cross-Platform Mobile Apps 13
M Wie in einer anderen "nicht canvas" klasse zeichne Android & Cross-Platform Mobile Apps 5
U ein texteingabefeld auf einem Canvas . Android & Cross-Platform Mobile Apps 2
A Problem: Canvas-Grösse Motorola RAZR v3r Android & Cross-Platform Mobile Apps 8
F Canvas Stringlänge Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben