Java Tutorial/J2ME/Form
Содержание
Add controls to form
<source lang="java">
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) { }
}</source>
Add or remove controls from a form
<source lang="java">
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); }
}</source>
creates a Form with two items, an interactive Gauge and a StringItem
<source lang="java">
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) { }
}</source>
extends Form to create a new form
<source lang="java">
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) { }
}</source>
Form demo
<source lang="java">
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) { }
}</source>
GUI test
<source lang="java">
/* 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; } } }
}</source>