Java Tutorial/J2ME/Form

Материал из Java эксперт
Перейти к: навигация, поиск

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>