Java Tutorial/J2ME/Form

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

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;
      }
    }
  }
}