Java Tutorial/J2ME/Form
Содержание
Add controls to form
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
public class FormExampleMIDlet extends MIDlet {
protected Display display;
protected boolean started;
protected void startApp() {
if (!started) {
display = Display.getDisplay(this);
Form form = new Form("Item Layout");
form.append("line");
form.append(new TextField("Name", "J. Doe", 32, TextField.ANY));
form.append("Address");
form.append(new TextField(null, null, 32, TextField.ANY));
display.setCurrent(form);
started = true;
}
}
protected void pauseApp() {
}
protected void destroyApp(boolean unconditional) {
}
}
Add or remove controls from a form
import java.io.IOException;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.rumand;
import javax.microedition.lcdui.rumandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.TextField;
import javax.microedition.lcdui.Ticker;
import javax.microedition.midlet.MIDlet;
public class MIDPApplication extends MIDlet implements CommandListener {
Ticker newsTicker = new Ticker("Java J2ME");
private List menuList = new List(null, List.IMPLICIT, menuItem, menuImage);
private List luckyList;
private List commList;
private Command exitCommand = new Command("Exit", Command.EXIT, 1);
private Command execCommand = new Command("Exe", Command.OK, 1);
private Command menuCommand = new Command("Main", Command.SCREEN, 1);
private Command commCommand = new Command("Contact", Command.SCREEN, 1);
private Command luckyCommand = new Command("Plan", Command.SCREEN, 1);
private Command saveCommand;
String[] menuItem = { "Contact", "Plan" };
String[] commItem = { "Add", "Search", "Edit", "Delete" };
String[] luckyItem = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L" };
Image[] menuImage = { createImage("/S.png"), createImage("/T.png") };
private Display display = Display.getDisplay(this);
private String currentScreen = "";
public void startApp() {
menuList.setTicker(newsTicker);
menuList.addCommand(exitCommand);
menuList.setCommandListener(this);
display.setCurrent(menuList);
currentScreen = "Main";
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable s) {
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
if (c == List.SELECT_COMMAND) {
if (currentScreen == "Main") {
int itemIndex = menuList.getSelectedIndex();
switch (itemIndex) {
case 0: {
doCommunication();
break;
}
case 1:
doLucky();
}
} else if (currentScreen == "Contact") {
int itemIndex = commList.getSelectedIndex();
switch (itemIndex) {
case 0: {
doAppend();
break;
}
case 1: {
doQuery();
break;
}
case 2: {
doModification();
break;
}
case 3: {
doDelete();
break;
}
}
} else {
}
}
if (c == menuCommand) {
display.setCurrent(menuList);
currentScreen = "Main";
}
if (c == commCommand) {
doCommunication();
}
if (c == luckyCommand) {
doLucky();
}
if (c == menuCommand) {
doMenu();
}
if (c == execCommand) {
if (currentScreen == "Plan") {
showLucky();
}
}
}
private Image createImage(String name) {
Image aImage = null;
try {
aImage = Image.createImage(name);
} catch (IOException e) {
}
return aImage;
}
private void doMenu() {
currentScreen = "Main";
display.setCurrent(menuList);
}
private void doCommunication() {
Image[] commIcon = { createImage("/S.png"), createImage("/Sk.png"),
createImage("/M.png"), createImage("/T.png") };
commList = new List("Contact", List.IMPLICIT, commItem, commIcon);
commList.addCommand(luckyCommand);
commList.addCommand(menuCommand);
commList.setCommandListener(this);
currentScreen = "Contact";
display.setCurrent(commList);
}
private void doLucky() {
luckyList = new List("Plan", List.EXCLUSIVE, luckyItem, null);
luckyList.addCommand(commCommand);
luckyList.addCommand(menuCommand);
luckyList.addCommand(execCommand);
luckyList.setCommandListener(this);
currentScreen = "Plan";
display.setCurrent(luckyList);
}
private void showLucky() {
int selectedItem = luckyList.getSelectedIndex();
Alert alert;
String information = "";
switch (selectedItem) {
case 0: {
information = "A";
break;
}
case 1: {
information = "B";
break;
}
case 2: {
information = "C";
break;
}
case 3: {
information = "D";
break;
}
case 4: {
information = "E";
break;
}
case 5: {
information = "F";
break;
}
case 6: {
information = "G";
break;
}
case 7: {
information = "H";
break;
}
case 8: {
information = "I";
break;
}
case 9: {
information = "J";
break;
}
case 10: {
information = "K";
break;
}
case 11: {
information = "L";
break;
}
}
alert = new Alert("Info", information, null, AlertType.INFO);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
private void doAppend() {
Form appendForm = new Form("Add");
saveCommand = new Command("Save", Command.SCREEN, 1);
TextField nameField = new TextField("Name", null, 10, TextField.ANY);
TextField EMailField = new TextField("E Mail", null, 10, TextField.EMAILADDR);
TextField ageField = new TextField("Age", null, 10, TextField.NUMERIC);
appendForm.append(nameField);
appendForm.append(EMailField);
appendForm.append(ageField);
appendForm.addCommand(saveCommand);
appendForm.addCommand(commCommand);
appendForm.addCommand(luckyCommand);
appendForm.setCommandListener(this);
currentScreen = "ContactAdd";
display.setCurrent(appendForm);
}
private void doModification() {
Form modificationForm = new Form("Edit");
TextField nameField = new TextField("Name", null, 10, TextField.ANY);
modificationForm.append(nameField);
modificationForm.addCommand(execCommand);
modificationForm.addCommand(commCommand);
modificationForm.addCommand(luckyCommand);
modificationForm.setCommandListener(this);
currentScreen = "ContactEdit";
display.setCurrent(modificationForm);
}
private void doQuery() {
Form queryForm = new Form("Search");
TextField nameField = new TextField("Name", null, 10, TextField.ANY);
queryForm.append(nameField);
queryForm.addCommand(execCommand);
queryForm.addCommand(commCommand);
queryForm.addCommand(luckyCommand);
queryForm.setCommandListener(this);
currentScreen = "ContactSearch";
display.setCurrent(queryForm);
}
private void doDelete() {
Form deleteForm = new Form("Delete");
TextField nameField = new TextField("Name", null, 10, TextField.ANY);
deleteForm.append(nameField);
deleteForm.addCommand(execCommand);
deleteForm.addCommand(commCommand);
deleteForm.addCommand(luckyCommand);
deleteForm.setCommandListener(this);
currentScreen = "ContactDelete";
display.setCurrent(deleteForm);
}
}
creates a Form with two items, an interactive Gauge and a StringItem
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Gauge;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;
public class J2MEGaugeTracker extends MIDlet implements ItemStateListener {
private Gauge mGauge;
private StringItem mStringItem;
public J2MEGaugeTracker() {
int initialValue = 5;
mGauge = new Gauge("GaugeTitle", true, 10, initialValue);
mStringItem = new StringItem(null, "[value]");
itemStateChanged(mGauge);
}
public void itemStateChanged(Item item) {
if (item == mGauge)
mStringItem.setText("Value = " + mGauge.getValue());
}
public void startApp() {
Form form = new Form("GaugeTracker");
form.append(mGauge);
form.append(mStringItem);
form.setItemStateListener(this);
Display.getDisplay(this).setCurrent(form);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
extends Form to create a new form
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.rumand;
import javax.microedition.lcdui.rumandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.lcdui.TextField;
import javax.microedition.lcdui.Ticker;
import javax.microedition.midlet.MIDlet;
class EntryForm extends Form {
private TextField symbolField = new TextField("Investment Symbol", "", 6, TextField.ANY);
private Command exitCommand = new Command("Exit", Command.EXIT, 1);
private Command getCommand = new Command("Get", Command.SCREEN, 2);
private ChoiceGroup investmentChoice = new ChoiceGroup("Type", Choice.EXCLUSIVE, new String[]{ "Stock", "Fund" }, null);
public EntryForm(String title) {
super(title);
append(symbolField);
append(investmentChoice);
addCommand(exitCommand);
addCommand(getCommand);
}
public TextField getSymbolField() {
return symbolField;
}
public ChoiceGroup getInvestmentChoice() {
return investmentChoice;
}
public Command getExitCommand() {
return exitCommand;
}
public Command getGetCommand() {
return getCommand;
}
}
public class ObtainQuoteMIDlet extends MIDlet {
private Display displayMngr = null;
private EntryForm entryForm = null;
private Alert resultsAlert = null;
private Ticker adTicker = new Ticker("Track your investments");
public ObtainQuoteMIDlet() {
}
private void initListener() {
ItemStateListener itemListener = new ItemStateListener() {
public void itemStateChanged(Item item) {
if ((item == entryForm.getInvestmentChoice())
&& (entryForm.getInvestmentChoice().getSelectedIndex() == 1)
&& !(entryForm.getSymbolField().getString().toUpperCase().endsWith("X"))) {
Alert symbolAlert = new Alert("Check Symbol", "Mutual Funds end in "X"", null,
AlertType.WARNING);
symbolAlert.setTimeout(Alert.FOREVER);
displayMngr.setCurrent(symbolAlert, entryForm);
}
}
};
CommandListener commandListener = new CommandListener() {
public void commandAction(Command c, Displayable d) {
if (c == entryForm.getExitCommand()) {
destroyApp(true);
} else if (c == entryForm.getGetCommand()) {
if ((entryForm.getInvestmentChoice().getSelectedIndex() == 1)
&& !(entryForm.getSymbolField().getString().toUpperCase().endsWith("X"))) {
Alert symbolAlert = new Alert("Check Symbol", "Mutual Funds end in "X"", null,
AlertType.WARNING);
symbolAlert.setTimeout(Alert.FOREVER);
displayMngr.setCurrent(symbolAlert, entryForm);
} else {
if (entryForm.getSymbolField().getString().length() > 0) {
String sym = entryForm.getSymbolField().getString();
displayPrice("The price of " + sym + " is $111.19");
}
}
}
}
};
entryForm.setItemStateListener(itemListener);
entryForm.setCommandListener(commandListener);
}
private void displayEntryForm() {
if (entryForm == null) {
entryForm = new EntryForm("ObtainQuote");
}
initListener();
displayMngr.setCurrent(entryForm);
}
private void displayPrice(String quoteString) {
if (resultsAlert == null) {
resultsAlert = new Alert("Quote Price", null, null, AlertType.CONFIRMATION);
resultsAlert.setTicker(adTicker);
resultsAlert.setTimeout(Alert.FOREVER);
}
resultsAlert.setString(quoteString);
displayMngr.setCurrent(resultsAlert, entryForm);
}
protected void startApp() {
displayMngr = Display.getDisplay(this);
displayEntryForm();
}
protected void pauseApp() {
}
protected void destroyApp(boolean unconditional) {
notifyDestroyed();
}
public void commandAction(Command c, Displayable s) {
}
}
Form demo
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.DateField;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Gauge;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.ImageItem;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
public class J2MEFormDemo extends MIDlet {
Display d;
Form aForm = new Form("Demo Form");
ChoiceGroup aChoiceGroup = new ChoiceGroup("Choose", Choice.EXCLUSIVE, new String[] { "This",
"That" }, null);
DateField aDateField = new DateField(null, DateField.TIME);
Gauge aGauge = new Gauge("Score", true, 10, 1);
StringItem aStringItem = new StringItem(null, "Demo Items");
TextField aTextField = new TextField("Comments", "Your comments here", 20, 0);
ImageItem anImageItem;
Image anImage;
public J2MEFormDemo() {
try {
anImage = Image.createImage("/star.png");
} catch (java.io.IOException ioE) {
System.out.println("Problem reading image");
}
anImageItem = new ImageItem("Demo Image", anImage, ImageItem.LAYOUT_CENTER, "No image");
aForm.append(aStringItem);
aForm.append(aChoiceGroup);
aForm.append(aDateField);
aForm.append(aGauge);
aForm.append(aTextField);
aForm.append(anImageItem);
}
protected void startApp() {
d = Display.getDisplay(this);
d.setCurrent(aForm);
}
protected void pauseApp() {
}
protected void destroyApp(boolean unconditional) {
}
}
GUI test
/* License
*
* Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistribution in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Neither the name of Sun Microsystems, Inc. or the names of contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN")
* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* You acknowledge that this software is not designed, licensed or intended
* for use in the design, construction, operation or maintenance of any
* nuclear facility.
*/
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.rumand;
import javax.microedition.lcdui.rumandListener;
import javax.microedition.lcdui.DateField;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Gauge;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.lcdui.Ticker;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class J2MEGuiTests extends MIDlet implements CommandListener {
// display manager
Display display;
// a menu with items
// main menu
List menu;
// list of choices
List choose;
// textbox
TextBox input;
// 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");
// today"s form
Form today = new Form("Today"s date");
// 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;
// constructor.
public J2MEGuiTests() {
}
/**
* 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);
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();
// form
form.append(gauge);
form.append(textfield);
// today
today.append(date);
}
public void pauseApp() {
display = null;
choose = null;
menu = null;
ticker = null;
form = null;
today = 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);
today.addCommand(backCommand);
today.setCommandListener(this);
display.setCurrent(today);
currentMenu = "date";
}
/**
* Test the Form component.
*/
public void testForm() {
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;
}
}
}
}