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.
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.
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.
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
}
}
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
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
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
/* 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
|
|
|
|
|
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(), 256, 0); else t = new TextBox("C", "D" + display.numColors(), 256, 0); 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
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, 17, 0); 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
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
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
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
/* 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, 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; } } } } |
Add
or remove controls from a form
|
|
|
|
|
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
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
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
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
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();
}
}
}
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:
Post a Comment