Criando um TextField em CustomItem

Olá meus amigos do GUJ, ultimamente estive me deparando com muitos problemas no desenvolvimento jme, percebi também q o matéria na internet para esse tipo de desenvolvimento, está muito pobre e são poucos materiais para estudo de quem está começando…
Me deparando com o problema de COMO DESENVOLVER UM TEXTFIELD, em CustomItem, eu aprendi sozinho uma maneira pratica de desenvolver um textfield e rápida, eu gostaria de estar repassando isso para todos os meus companheiros que estão aprendendo, e estão com dificuldades no desenvolvimento de suas próprias ferramentas…

Então vamos ao que interessa!
Primeiro criamos uma classe que estende customItem,

E nesta classe utilizaremos o seguinte código:

package br.com.worldinformatica;

import javax.microedition.lcdui.CustomItem;
import javax.microedition.lcdui.Graphics;

public class RtextField extends CustomItem {

	private String nomeDoTextField; // o valor que faz a identificaçao do textfield, aquele nome que fica encima do campo
	private int largura; // largura do textfield na tela do celular
	private String texto; //Campo utilizado dentro do DrawString que mostra o valor ao usuario

	public String getTexto() {
		return texto;
	}

	public void setTexto(String texto) {
		this.texto = texto;
	}

	protected RtextField(String nomeDoTextField, int largura) {
		super("");
		this.nomeDoTextField = nomeDoTextField; // obtendo os valores repassados pelo construtor dentro do MIDlet
		this.largura = largura; //Largura do item Repassado pelo MIDlet

	}

	protected int getMinContentHeight() {
		
		return 30;
	}

	protected int getMinContentWidth() {
		
		return largura;
	}

	protected int getPrefContentHeight(int width) {
	
		return 30;
	}

	protected int getPrefContentWidth(int height) {
		
		return largura;
	}

	protected void paint(Graphics g, int w, int h) {
		//desenhando o campo de texto com Graphics
		g.setColor(0, 0, 255);
		g.drawString(nomeDoTextField, 0, -4, Graphics.LEFT | Graphics.TOP);

		g.drawRoundRect(0, 10, g.getClipWidth() - 1, 16, 6, 6);
		g.setColor(225, 252, 155);
		g.fillRoundRect(1, 11, g.getClipWidth() - 2, 14, 6, 6);
		g.setColor(0, 0, 139);
		//desenhando a String que fica dentro do campo de texto ( Somente se ela não estiver null )
		if (getTexto() != null) {
			g.drawString(this.getTexto(), 3, 20, Graphics.LEFT
					| Graphics.BASELINE);
		}
		repaint(); //refazendo a tela

	}

}

a segunda classe, herda a primeira e implementa os metodo CommandListener e Sobrescreve os metodos pointerPressed, e keypressed, para a interação com aparelhos Touch e sem Touch…

segue a classe abaixo:

package br.com.worldinformatica;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.midlet.MIDlet;

public class TextField extends RtextField implements CommandListener {

	private Display tela;
	private TextBox textbox = null;
	private Command ok;
	private Form form;

	// o construtor captura o valor do nome do campo e repassa para classe mae,
	// e depois captura o form
	// que está sendo utilizado atualmente pelo midlet, e captura o nome do
	// midlet atual.
	protected TextField(String nomeDoTextField, int largura, MIDlet midlet,
			Form form) {
		super(nomeDoTextField, largura);// repassa para a classe mae os valores
										// capturados

		tela = Display.getDisplay(midlet);// coloca o midlet atual dentro do
											// display, para que nao fuja de
											// tela.
		this.form = form; // pega o form informado pelo midlet e joga dentro da
							// classe
		// cria um textBox para que o usuario digite as informaçoes desejadas
		textbox = new TextBox(nomeDoTextField, "", 50,
				javax.microedition.lcdui.TextField.ANY);

		// cria o botao que aparecerá juntamente com o textbox para o usuario
		// concluir e enviar a informaçao digitada
		// para a String dentro da classe herdada..
		ok = new Command("Ok", Command.OK, 1);
		textbox.addCommand(ok);
		textbox.setCommandListener(this);
	}

	public void abreTextBox() {
		// mostra o textbox para o usuario inserir seus caracteres de digitação.
		tela.setCurrent(textbox);
	}

	public void commandAction(Command c, Displayable d) {
		if (c == ok) {
			tela.setCurrent(form); // volta novamente para o form anterior que
									// estava sendo exibido na tela.
			super.setTexto(textbox.getString()); /*
												 * define dentro da classe mae o
												 * DrawString que esta dentro do
												 * campo de texto
												 */
		}

	}

	protected void pointerPressed(int x, int y) {
		// verifica as ações touch
		super.pointerPressed(x, y);
		if (x > 0 & y > 10) {
			abreTextBox();
		}
	}

	// verifica a ação de pressionar a tecla FIRE
	public void keyPressed(int tecla) {
		int acao = getGameAction(tecla);
		if (acao == GameCanvas.FIRE) {
			abreTextBox();
		}
	}

}

PRONTO!

para se utilizar o textfield basta vc fazer o seguinte em seu midlet:

[code]package br.com.worldinformatica;

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MidletParaTeste extends MIDlet {

private Form f;
private TextField textField;
private Display tela;
private TextField cidade;

public MidletParaTeste() {
	tela = Display.getDisplay(this);
	f = new Form("Teste");
	textField = new TextField("Sobrenome: ", 190, this, f);
	cidade = new TextField("Cidade: ", 190, this, f);
	f.append(textField);
	f.append(cidade);
	
	
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {


}

protected void pauseApp() {
	

}

protected void startApp() throws MIDletStateChangeException {
	tela.setCurrent(f);

}

}
[/code]

Pessoal, sou novo no GUJ e espero contribuir muito mais com vcs, Espero ter ajudado a alguém que esteja com dificuldades nesta área! :thumbup: