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: