Como usar um TextBox dentro de um Pop-up, com Java ME
Dados do artigo
Exemplo de código
Artigo
Contents |
Introdução
Um dos Displayables na API LCDUI é o TextBox (estende a classe Screen), que permite ao usuário inserir e editar texto. É comumente utilizada para inserir textos relativamente curtos, até mesmo palavras isoladas. Em qualquer caso, o componente TextBox utiliza toda a tela. Entretanto, na S60 5a edição o novo modo de TextBox via Pop-up é introduzido. Ao utilizar um atributo JAD "Nokia-UI-Realce" com valor "PopUpTextBox" todas as telas TextBox são mostrados como diálogos menores, sem obscurecer a tela subjacente.
Nokia-UI-Enhancement: PopUpTextBox
Pop-up TextBox não possui algumas propriedades da "tradicional" TextBox:
- Ticker não pode ser visualizado
- Não existe suporte para delimitar o número máximo de caracteres de entrada
Este TextBox vazio tem uma linha, mas se for necessário, seu tamanho irá crescer. O número máximo de linhas visíveis depende do tamanho da tela. Nas telas nHD (640x360 pixels) são 5 linhas de texto. Introduzir e editar texto é possível digitando no TextBox.
A imagem abaixo mostra um TextBox vazio na parte superior da tela (no modo normal) e um TextBox com 5 linhas de texto:
Pode-se observar abaixo uma MIDlet que demonstra as características deste novo pop-up.
Código-fonte: PopUpTextBoxMIDlet.java
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
public class PopUpTextBoxMIDlet extends MIDlet {
private PopUpTextBoxCanvas canvas;
protected String canvasText = "Texto do TextBox";
public void startApp() {
canvas = new PopUpTextBoxCanvas(this);
Display.getDisplay(this).setCurrent(canvas);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
protected void closeTextBox(boolean update) {
if (update) canvasText = canvas.textbox.getString();
if (canvas.textbox != null) canvas.textbox = null;
Display.getDisplay(this).setCurrent(canvas);
}
protected void showError(String title, String text) {
Alert alert = new Alert(title, text, null, AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
alert.getType().playSound(Display.getDisplay(this));
Displayable current = Display.getDisplay(this).getCurrent();
if (current instanceof Alert) {}
else Display.getDisplay(this).setCurrent(alert);
}
}
Código-fonte: PopUpTextBox.java
import javax.microedition.lcdui.*;
public class PopUpTextBox extends TextBox implements CommandListener {
private Command okCommand;
private Command cancelCommand;
private PopUpTextBoxMIDlet midlet;
public PopUpTextBox(String title, String text, int maxsize, int constraints, PopUpTextBoxMIDlet midlet) {
super(title, text, maxsize, constraints);
this.midlet = midlet;
okCommand = new Command("Ok", Command.OK, 1);
cancelCommand = new Command("Cancel", Command.CANCEL, 1);
this.addCommand(okCommand);
this.addCommand(cancelCommand);
this.setCommandListener(this);
}
public void commandAction(Command c, Displayable d) {
if (c == okCommand) {
midlet.closeTextBox(true);
}
if (c == cancelCommand) {
midlet.closeTextBox(false);
}
}
}
Código-fonte: PopUpTextBoxCanvas.java
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.TextField;
public class PopUpTextBoxCanvas extends Canvas implements CommandListener {
private PopUpTextBoxMIDlet midlet;
private Command enterCommand;
private Command exitCommand;
protected PopUpTextBox textbox;
private int width;
private int height;
public PopUpTextBoxCanvas(PopUpTextBoxMIDlet midlet) {
this.midlet = midlet;
enterCommand = new Command("Digite o Texto", Command.SCREEN, 1);
exitCommand = new Command("Sair", Command.EXIT, 1);
this.addCommand(enterCommand);
this.addCommand(exitCommand);
this.setCommandListener(this);
}
public void paint(Graphics g) {
g.setColor(255, 255,255);
g.fillRect(0, 0, width, height);
g.setColor(0, 0, 0);
g.drawString(midlet.canvasText, 0, 0, Graphics.TOP|Graphics.LEFT);
}
protected void keyPressed(int keyCode) { }
protected void keyReleased(int keyCode) { }
protected void keyRepeated(int keyCode) { }
protected void pointerDragged(int x, int y) { }
protected void pointerPressed(int x, int y) { }
protected void pointerReleased(int x, int y) { }
protected void sizeChanged(int w, int h) {
width = w;
height = h;
repaint();
}
public void commandAction(Command c, Displayable d) {
if (c == enterCommand) {
textbox = new PopUpTextBox("Digite o Texto", midlet.canvasText, 1000, TextField.ANY, midlet);
Display.getDisplay(midlet).setCurrent(textbox);
}
if (c == exitCommand) {
midlet.notifyDestroyed();
}
}
}
Aplicação Exemplo
- PopUpTextBoxMIDlet.zip possuindo PopUpTextBoxMIDlet.jad, PopUpTextBoxMIDlet.jar e o código-fonte.



(no comments yet)