Estou fazendo uns testes com J2ME no Palm e segui um tutorial disponível no site da SUN para J2ME. Só que daí resolvi inventar moda e coloquei muitos elementos numa tela só. Fiz isso pq uso PocketStudio para desenvolver e lá não consigo incluir elementos na tela em tempo de execução.
Peguei o exemplo do tutorial e fiz um for até 200 para incluir texto na tela, só que daí dá pau: IndexOutOfBoundsException (q consultei pelo output do Java HQ). Se tentar incluir 120 elementos, dá certo, mas 150 dá o erro. Na verdade o Palm trava, mas depois de reiniciado, dá para ver o log.
O interessante que nos emuladores de celulares dá certo, mas no emulador do Palm e no próprio Palm dá pau...
Alguém sabe se existe alguma limitação para a quantidade de elementos incluidos???
Abaixo, segue o código q eu usei para testar: o q eu incluí está no método testForm().
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class GuiTests extends MIDlet
implements CommandListener {
// display manager
Display display = null;
// a menu with items
List menu = null; // main menu
// list of choices
List choose = null;
// textbox
TextBox input = null;
// ticker
Ticker ticker = new Ticker("Test GUI Components");
// alerts
final Alert soundAlert =
new Alert("sound Alert");
// date
DateField date = new DateField("Today's date: ", DateField.DATE);
// form
Form form = new Form("Form for Stuff");
// gauge
Gauge gauge = new Gauge("Progress Bar", false, 20, 9);
// text field
TextField textfield = new TextField("TextField Label", "abc", 50, 0);
// command
static final Command backCommand = new Command("Back", Command.BACK, 0);
static final Command mainMenuCommand = new Command("Main", Command.SCREEN, 1);
static final Command exitCommand = new Command("Exit", Command.STOP, 2);
String currentMenu = null;
// constructor.
public GuiTests() {
}
/**
* Start the MIDlet by creating a list of
items and associating the
* exit command with it.
*/
public void startApp() throws
MIDletStateChangeException {
display = Display.getDisplay(this);
// open a db stock file
menu = new List(
"Test Components", Choice.IMPLICIT);
menu.append("Test TextBox", null);
menu.append("Test List", null);
menu.append("Test Alert", null);
menu.append("Test Date", null);
menu.append("Test Form", null);
menu.addCommand(exitCommand);
menu.setCommandListener(this);
menu.setTicker(ticker);
mainMenu();
}
public void pauseApp() {
display = null;
choose = null;
menu = null;
ticker = null;
form = null;
input = null;
gauge = null;
textfield = null;
}
public void destroyApp(boolean unconditional) {
notifyDestroyed();
}
// main menu
void mainMenu() {
display.setCurrent(menu);
currentMenu = "Main";
}
/**
* Test the TextBox component.
*/
public void testTextBox() {
input = new TextBox
("Enter Some Text:", "", 10, TextField.ANY);
input.setTicker(new Ticker(
"Testing TextBox"));
input.addCommand(backCommand);
input.setCommandListener(this);
input.setString("");
display.setCurrent(input);
currentMenu = "input";
}
/**
* Test the List component.
*/
public void testList() {
choose = new List("Choose Items",
Choice.MULTIPLE);
choose.setTicker(new Ticker(
"Testing List"));
choose.addCommand(backCommand);
choose.setCommandListener(this);
choose.append("Item 1", null);
choose.append("Item 2", null);
choose.append("Item 3", null);
display.setCurrent(choose);
currentMenu = "list";
}
/**
* Test the Alert component.
*/
public void testAlert() {
soundAlert.setType(AlertType.ERROR);
//soundAlert.setTimeout(20);
soundAlert.setString("** ERROR **");
display.setCurrent(soundAlert);
}
/**
* Test the DateField component.
*/
public void testDate() {
java.util.Date now = new java.util.Date();
date.setDate(now);
Form f = new Form("Today's date");
f.append(date);
f.addCommand(backCommand);
f.setCommandListener(this);
display.setCurrent(f);
currentMenu = "date";
}
/**
* Test the Form component.
*/
public void testForm() {
form.append(gauge);
form.append(textfield);
for (int i = 0; i < 150; i++) {
form.append(new StringItem(null, i+"\n"));
}
form.addCommand(backCommand);
form.setCommandListener(this);
display.setCurrent(form);
currentMenu = "form";
}
/**
* Handle events.
*/
public void commandAction(Command c,
Displayable d) {
String label = c.getLabel();
if (label.equals("Exit")) {
destroyApp(true);
} else if (label.equals("Back")) {
if(currentMenu.equals("list")
|| currentMenu.equals("input") ||
currentMenu.equals("date")
|| currentMenu.equals("form")) {
// go back to menu
mainMenu();
}
} else {
List down = (List)display.getCurrent();
switch(down.getSelectedIndex()) {
case 0: testTextBox();break;
case 1: testList();break;
case 2: testAlert();break;
case 3: testDate();break;
case 4: testForm();break;
}
}
}
}
[color="red"]
Editado para conter BBCode Code por JuJo[/color]