Sponsor

Thursday 3 May 2012

J2ME TUTORIAL








Pengertian J2ME tutorial
J2ME merupakan sebuah kombinasi yang terbentuk antara sekumpulan interface Java yang sering disebut dengan Java API (Application Programming Interface) dengan JVM (Java Virtual Machine) yang di desain khusus untuk alat, yaitu JVM dengan ruang terbatas. Kombinasi tersebut kemudian digunakan untuk melakukan pembuatan aplikasi-aplikasi yang dapat berjalan diatas alat (dalam hal ini mobile device).
Mungkin anda bertanya, apakah kita, sebagai pengembang aplikasi (developer/programmer), harus melakukan instalasi JVM dan Java API ke dalam alat yang akan kita gunakan? Jawabannya: “TIDAK”. Masing-masing dari perusahaan alat telah menyediakan JVM (dan sekumpulan Java API yang diperlukan) di dalam alat bersangkutan. Hal ini, membuat kita sebagai developer, hanya perlu berkonsentrasi dalam pengembangan aplikasinya dan memasukkannya ke dalam alat tersebut.
J2ME memiliki beberapa keterbatasan terutama jika diaplikasikan pada ponsel. J2ME sangat tergantung pada perangkat yang digunakan bisa dari segi merk ponsel, kemampuan ponsel, keterbatan memori pada ponsel, masalah pengijinan hak akses pada file-file tertentu pada ponsel dan dukungan terhadap teknologi J2ME.
J2ME sendiri pada dasarnya terdiri dari tiga buah bagian, yaitu: konfigurasi, profile, dan paket-paket opsional, seperti yang di tunjukkan pada gambar 1.
http://pr0j0.files.wordpress.com/2009/11/arsitektur-j2me.gif?w=510
Gambar 1. Bagian-bagian di dalam platform J2ME
Berikut ini penjelasan dari masing-masing bagian tersebut.
1. Profile
Profile merupakan bagian perluasan dari konfigurasi. Artinya, selain sekumpulan kelas yang terdapat pada konfigurasi, terdapat juga kelas-kelas spesifik yang didefinisikan lagi di dalam profile. Dengan kata lain, profile akan membantu secara fungsional yaitu dengan menyediakan kelas-kelas yang tidak terdapat dilevel konfigurasi.
Adapun profile yang sangat populer penggunaanya adalah profile yang disediakan oleh Sun Microsystems, yaitu yang dinamakan dengan MIDP (Mobile Information Device Profile). Gambar 2 menunjukkan perbandingan antara MIDP 1.0 dengan MIDP 2.0. Sebagai tambahan pengetahuan bagi Anda, berikut ini beberapa profile yang tersedia untuk kebutuhan-kebutuhan spesifik lainnya:
PDAP (Personal Digital Assistant Profile), yaitu profile untuk PDA yang memperluas fungsi-fungsi pada konfigurasi CLDC dan digunakan khusus untuk menambahkan kemampuan-kemampuan lebih apabila dibandingkan dengan penggunaan profile MIDP.
Foundation Profile, yaitu profil yang digunakan untuk konfigurasi CDC. Profile ini menambahkan beberapa kelas dari J2SE ke dalam konfigurasi CDC, dan berperan juga sebagai pondasi untuk membentuk profile baru lainnya.
Personal Profile, yaitu profile yang mendefinisikan ulang Personal Java sebagai profil yang dapat digunakan sebagai profil dalam J2ME. Profil ini merupakan hasil perluasan dari Foundation Profile.
RMI Profile, yaitu profil yang menambahkan dukungan RMI (Remote Method Invocation) ke dalam konfigurasi CDC.
http://pr0j0.files.wordpress.com/2009/11/tabel-perbandingan-midp.jpg?w=300&h=238
Gambar 2. Perbandingan antara MIDP 1.0 dan MIDP 2.0
2.  Konfigurasi
Konfigurasi merupakan bagian yang berisi JVM dan beberapa library kelas lainnya. Perlu diperhatikan bahwa JVM yang dimaksud di sini bukanlah JVM tradisional seperti yang terdapat pada J2SE, melainkan JVM yang sudah didesain secara khusus untuk alat.
Terdapat dua buah konfigurasi yang disediakan oleh Sun Microsystems, yaitu CLDC (Connected Limited Device Configuration) dan CDC (Connected Device Configuration). Target alat dari konfigurasi CLDC adalah alat-alat kecil, seperti telepon selular, PDA, dan pager. Pada sisi yang lain, CDC, merupakan superset dari CLDC sehingga semua kelas yang didefinisikan di dalam CLDC akan ada juga dalam CDC. Gambar 3 menunjukkan perbandingan antara CLDC dengan CDC.
http://pr0j0.files.wordpress.com/2009/11/perbandngan-cldc-cdc.jpg?w=300&h=87
Gambar 3. Perbandingan antara CLDC dengan CDC


3.  Paket-Paket Opsional
Paket-paket opsional merupakan paket-paket tambahan yang dibutuhkan oleh aplikasi sehingga pada saat proses deployment paket-paket tersebut perlu didistribusikan juga sebagai bagian dari aplikasi bersangkutan. Sebagai catatan bahwa paket-paket opsional  ini bukan merupakan paket yang dibuat oleh perusahaan alat yang digunakan]
SYNTAK PADA J2ME
MIDLET

SKELETON OF A MIDLET

import javax.microedition.midlet.MIDlet;

public class MyMIDlet extends MIDlet {

  public MyMIDlet() {
    // constructor
  }

  public void startApp() {
    // entering active state
  }

  public void pauseApp() {
    // entering paused state
  }

  public void destroyApp() {
    // entering destroyed state
  }
}



list Capabilities

list Capabilities
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.MIDlet;

public class CapabilitiesMIDlet extends MIDlet {
  private String[] capabilitiesIdx = { "microedition.media.version", "supports.mixing",
      "supports.audio.capture", "supports.video.capture", "supports.recording", "audio.encodings",
      "video.encodings", "video.snapshot.encodings", "streamable.contents" };

  public void startApp() {
    List list = new List("Audio/Video Capabilities", Choice.IMPLICIT);
    for (int i = 0; i < capabilitiesIdx.length; ++i) {
      list.append(System.getProperty(capabilitiesIdx[i]) + " - " + capabilitiesIdx[i], null);
    }
    Display.getDisplay(this).setCurrent(list);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }
}


KVM Properties


public class KVMProperties {

    private static final String[] properties = {
        "microedition.configuration",
        "microedition.encoding",
        "microedition.platform",
        "microedition.profiles"
    };
   
    public static void main(String[] args) {
        for (int i = 0; i < properties.length; i++) {
            System.out.println(properties[i] + " = " +
                                System.getProperty(properties[i]));
        }
    }
}

Retrieving the predefined properties


import java.io.IOException;
import java.io.InputStream;

import javax.microedition.midlet.MIDlet;

public class RuntimeAccessMIDlet extends MIDlet {
  public void startApp() {
    System.out.println("MIDlet-Name: " + getAppProperty("MIDlet-Name"));
    System.out.println("MIDlet-Vendor: " + getAppProperty("MIDlet-Vendor"));
    System.out.println("MIDlet-Version: " + getAppProperty("MIDlet-Version"));
    System.out.println("MIDlet-Description: " + getAppProperty("MIDlet-Description"));
    System.out.println("Target-Devices: " + getAppProperty("Target-Devices"));
    System.out.println("Display-Size: " + getAppProperty("Display-Size"));
    InputStream is = this.getClass().getResourceAsStream("/readme.txt");
    try {
      if (is != null) {
        int character;
        while ((character = is.read()) != -1) {
          System.out.print((char) character);
        }
        is.close();
      }
    } catch (IOException e) {
      System.out.println(e);
    }
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }
}











extends MIDlet

extends MIDlet
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;

public class J2MEHiSmallWorld extends MIDlet {

  private TextBox textbox;

  public J2MEHiSmallWorld() {
    textbox = new TextBox("", "Hi Small World!", 20, 0);
  }

  public void startApp() {
    Display.getDisplay(this).setCurrent(textbox);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }
}


detect and report MIDlet run-time environment


/* 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.
 */

/* imports  */

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class J2MEEnvMyMidlet extends MIDlet {
  /**
   * PropertyOutput - lookup and report one application property.
   */

  private void PropertyOutput(String key) {
    String value = getAppProperty(key);

    if (value != null)
      System.out.println(key + " = " + value);
  }

  /**
   * PropertyReport - detect and report MIDlet run-time environment.
   */

  private void PropertyReport() {
    final int Npush = 10; /* maximum number of Push's to report */
    final int Nmidlet = 10; /* maximum number of MIDlet's to report */
    final String key[] = { /* standard names */
    "MIDlet-Name", "MIDlet-Version", "MIDlet-Vendor", "MIDlet-Icon",
        "MIDlet-Description", "MIDlet-Info-URL", "MIDlet-Jar-URL",
        "MIDlet-Jar-Size", "MIDlet-Data-Size", "MicroEdition-Profile",
        "MicroEdition-Configuration", "MIDlet-Permissions",
        "MIDlet-Permissions-Opt", "MIDlet-Install-Notify",
        "MIDlet-Delete-Notify", "MIDlet-Delete-Confirm", null };
    final String push_key = "MIDlet-Push-";
    final String midlet_key = "MIDlet-";
    int i;

    for (i = 0; key[i] != null; ++i)
      /* report standard properties */
      PropertyOutput(key[i]);

    for (i = 1; i <= Npush; ++i)
      /* report push entries */
      PropertyOutput(push_key + i);

    for (i = 1; i <= Nmidlet; ++i)
      /* report MIDlet entries */
      PropertyOutput(midlet_key + i);

    return;
  }

  /**
   * MyMIDlet - constructor
   */

  public J2MEEnvMyMidlet() {
    PropertyReport();
  }

  /**
   * startApp - MIDlet has entered the Active state.
   */

  public void startApp() {
  }

  /**
   * pauseApp - enter the Paused state.
   */

  public void pauseApp() {
  }

  /**
   * destroyApp - enter the Destroyed state.
   *
   * @param unconditional
   */

  public void destroyApp(boolean unconditional)
      throws MIDletStateChangeException {
    if (unconditional == false) {
      throw new MIDletStateChangeException();
    }
  }
}
/*

Running with storage root C:\Documents and Settings\Administrator\j2mewtk\2.5.2\appdb\MediaControlSkin
Running with locale: English_United States.1252
Running in the identified_third_party security domain
No audio device found.
MIDlet-Name = Main Midlet Suite
MIDlet-Version = 1.0.0
MIDlet-Vendor = Midlet Suite Vendor
MIDlet-Jar-URL = Main.jar
MIDlet-Jar-Size = 1691
MicroEdition-Profile = MIDP-2.0
MicroEdition-Configuration = CLDC-1.1
Execution completed.
3399135 bytecodes executed
166 thread switches
1667 classes in the system (including system classes)
17751 dynamic objects allocated (535200 bytes)
2 garbage collections (457948 bytes collected)

*/

















A first MIDlet with simple text and a few commands

A first MIDlet with simple text and a few commands
/* 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.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;

// A first MIDlet with simple text and a few commands.
public class SimpleTextCommandMIDlet extends MIDlet implements CommandListener {

  // The exit, info, and buy commands
  private Command exitCommand;
  private Command infoCommand;
  private Command buyCommand;

  // The display for this MIDlet
  private Display display;

  public SimpleTextCommandMIDlet() {
    display = Display.getDisplay(this);
    exitCommand = new Command("Exit", Command.SCREEN, 1);
    infoCommand = new Command("Info", Command.SCREEN, 2);
    buyCommand = new Command("Buy", Command.SCREEN, 2);
  }

  // Start the MIDlet by creating the TextBox and
  // associating the exit command and listener.
  public void startApp() {
    TextBox t = new TextBox("FirstMIDlet", "Welcome to MIDP Programming", 256,
        0);
    t.addCommand(exitCommand);
    t.addCommand(infoCommand);
    t.addCommand(buyCommand);
    t.setCommandListener(this);
    display.setCurrent(t);
  }

  // Pause is a no-op because there are no background
  // activities or record stores to be closed.
  public void pauseApp() {
  }

  // Destroy must cleanup everything not handled
  // by the garbage collector.
  // In this case there is nothing to cleanup.
  public void destroyApp(boolean unconditional) {
  }

  // Respond to commands. Here we are only implementing
  // the exit command. In the exit command, cleanup and
  // notify that the MIDlet has been destroyed.
  public void commandAction(Command c, Displayable s) {
    if (c == exitCommand) {
      destroyApp(false);
      notifyDestroyed();
    }
  }
}











SYNTAX DISPLAY

Add TextBox to Display

Add TextBox to Display
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;

public class TextBoxHelloMidlet extends MIDlet {
  private Display display;

  TextBox box = new TextBox("Simple Example""Hello World"200);

  public void startApp() {
    display = Display.getDisplay(this);

    display.setCurrent(box);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }
}





Get color from Display

Get color from Display
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;

public class J2MEcolorDetect extends MIDlet implements CommandListener {
  private Command exitCommand = new Command("exit", Command.EXIT, 1);

  private Display display;

  public J2MEcolorDetect() {
    display = Display.getDisplay(this);
  }

  public void startApp() {
    TextBox t;
    if (display.isColor())
      t = new TextBox("A""B" + display.numColors(), 2560);
    else
      t = new TextBox("C""D" + display.numColors(), 2560);
    t.addCommand(exitCommand);
    t.setCommandListener(this);
    display.setCurrent(t);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }

  public void commandAction(Command c, Displayable s) {
    if (c == exitCommand) {
      destroyApp(false);
      notifyDestroyed();
    }
  }
}

Is it a color cell phone

Is it a color cell phone
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;

public class J2MECheckColor extends MIDlet implements CommandListener {
  private Display display;

  private Form form;

  private TextBox textbox;

  private Command exit = new Command("Exit", Command.SCREEN, 1);

  public J2MECheckColor() {
    display = Display.getDisplay(this);
    String message = null;
    if (display.isColor()) {
      message = "Color display.";
    else {
      message = "No color display";
    }
    textbox = new TextBox("Check Colors", message, 170);
    textbox.addCommand(exit);
    textbox.setCommandListener(this);
  }

  public void startApp() {
    display.setCurrent(textbox);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }

  public void commandAction(Command command, Displayable displayable) {
    if (command == exit) {
      destroyApp(true);
      notifyDestroyed();
    }
  }
}









SYNTAX FORM

Form demo

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) {
  }
}



EXTENDS FORM TO CREATE A NEW FORM

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.Command;
import javax.microedition.lcdui.CommandListener;
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) {
  }
}

Add controls to 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) {
    }
}

GUI test

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.Command;
import javax.microedition.lcdui.CommandListener;
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, 209);

  // text field
  TextField textfield = new TextField("TextField Label""abc"500);

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

    }
  }
}

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.Command;
import javax.microedition.lcdui.CommandListener;
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

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) {
  }
}











STRINGITEM

Add StringItem to a form

Add StringItem to a form
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;

public class FormStringItemMIDlet extends MIDlet {
  protected Display display;

  protected void startApp() {
    display = Display.getDisplay(this);

    Form form new Form("Item Layout");

    form.append("line");

    form.append(new StringItem("State ""OK"));

    display.setCurrent(form);
  }

  protected void pauseApp() {
  }

  protected void destroyApp(boolean unconditional) {
  }
}





















StringItem with line break

StringItem with line break
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;

public class FormStringItemLineBreakMIDlet extends MIDlet {
  protected Display display;

  protected void startApp() {
    display = Display.getDisplay(this);

    Form form new Form("Item Layout");

    form.append("line");

    form.append(new StringItem(null, "No\n label\n"));

    display.setCurrent(form);
  }

  protected void pauseApp() {
  }

  protected void destroyApp(boolean unconditional) {
  }
}




















Get Label and text from StringItem

Get Label and text from StringItem
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;

public class StringItemMIDlet extends MIDlet implements CommandListener {

  private Command exitCommand = new Command("Exit", Command.EXIT, 1);

  private Command setLabelCommand = new Command("Label", Command.SCREEN, 1);

  private Command setTextCommand = new Command("Text", Command.SCREEN, 1);

  private Command getLabelTextCommand = new Command("Get", Command.SCREEN, 1);

  private StringItem stringItem1 = new StringItem("Label1""Content1");

  private StringItem stringItem2 = new StringItem(null, "Content2");

  private Display display = Display.getDisplay(this);

  public StringItemMIDlet() {
  }

  public void startApp() {
    Form aForm = new Form("StringItem");

    aForm.append(stringItem1);
    aForm.append(stringItem2);
    aForm.addCommand(exitCommand);
    aForm.addCommand(setLabelCommand);
    aForm.addCommand(setTextCommand);
    aForm.addCommand(getLabelTextCommand);
    aForm.setCommandListener(this);
    display.setCurrent(aForm);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }

  public void commandAction(Command c, Displayable s) {
    if (c == exitCommand) {
      destroyApp(false);
      notifyDestroyed();
    }
    if (c == setLabelCommand)
      stringItem1.setLabel("new label");
    if (c == setTextCommand)
      stringItem2.setText("new text"
if (c == getLabelTextCommand) {
      Alert alert = new Alert("Info", stringItem1.getLabel() + ":" + stringItem1.getText(), null,
          AlertType.INFO);
      alert.setTimeout(5000);
      display.setCurrent(alert);
    }
  }
}










Create Form with a list of StringItems

Create Form with a list of StringItems
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;

public class J2MECreatingFormWithItems extends MIDlet implements CommandListener {
  private Display display;

  private Form form;

  private Command exit;

  public J2MECreatingFormWithItems() {
    display = Display.getDisplay(this);
    exit = new Command("Exit", Command.SCREEN, 1);
    StringItem messages[] = new StringItem[2];
    messages[0] = new StringItem("Welcome, ""glad you could come.");
    messages[1] = new StringItem("Hello, ""Mary.");
    form new Form("Display Form with Items", messages);
    form.addCommand(exit);
    form.setCommandListener(this);
  }

  public void startApp() {
    display.setCurrent(form);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }

  public void commandAction(Command command, Displayable displayable) {
    if (command == exit) {
      destroyApp(true);
      notifyDestroyed();
    }
  }
}

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;

public class J2MEStringItemExample extends MIDlet implements CommandListener {
  private Display display;

  private Form form new Form("Quiz");

  private StringItem question = new StringItem("Question: ""A ?");

  private Command giveup = new Command("Give Up", Command.SCREEN, 1);

  private Command exit = new Command("Exit", Command.EXIT, 1);

  public J2MEStringItemExample() {
    display = Display.getDisplay(this);
    form.addCommand(exit);
    form.addCommand(giveup);
    form.append(question);
    form.setCommandListener(this);
  }

  public void startApp() {
    display.setCurrent(form);
  }

  public void pauseApp() {
  }

  public void destroyApp(boolean unconditional) {
  }

  public void commandAction(Command command, Displayable displayable) {
    if (command == giveup) {
      question.setLabel("Answer: ");
      question.setText("Survivors are not buried.");
      form.removeCommand(giveup);
    else if (command == exit) {
      destroyApp(false);
      notifyDestroyed();
    }
  }
}

























Sumber Refrensi : http://www.java2s.com/Tutorial/Java/0430__J2ME/Catalog0430__J2ME.htm

No comments: