Pendahuluan ( First Session). Baca terlebih dahulu halaman ini :

dokumen-dokumen yang mirip
DateField adalah objek yang dapat digunakan untuk menampilkan atau mengedit objek yang bertipe Date.

J2ME GUI dan Manajemen Event

Mobile Computing. Ramos Somya

PEMOGRAMAN APLIKASI BERGERAK (Java ME) Company LOGO

1.Mengatur jadwal tugas menggunakan Timers 2.Mengetahui bagaimana membaca file dari aplikasi mobile sederhana

PEMOGRAMAN APLIKASI BERGERAK (Java ME)

11.1 Tujuan Timers

Nilai Properti Constrains pada TextField

MODUL 9 J2ME (Java 2 Micro Edition)

MODUL 11 J2ME (Java 2 Micro Edition)

BONUS. Dasar Java Mobile. Mengenal Java Mobile Mengenal MIDlet Mobile Grafis Mobile Animasi Latihan Soal

Kode tereksekusi dengan baik sehingga mendapatkan output "JENI Java Education Network Indonesia" yang diikuti oleh "Hello Jeni"

Bab Tujuan. 2.2 Pengenalan. 2.3 "Hello, world!" MIDlet

Low Level User Interface

PEMOGRAMAN APLIKASI BERGERAK (Java ME) Yoannita

1. Tujuan. 2. Latar Belakang. 3. Percobaan. Modul Praktikum MMAPI. Setelah mempelajari bab ini, Pelajar diharapkan mampu untuk :

MODUL 10 J2ME (Java 2 Micro Edition)

Membuat Aplikasi Nilai dengan Login. Menggunakan Java J2ME

P4 Bab 4 User Interface

1.Tujuan. 2. Latar Belakang. 3. Percobaan

PENGEMBANGAN APLIKASI MOBILE MODUL PRAKTIKUM. Persistence. Versi 1.0 JAVA EDUCATION NETWORK INDONESIA

Copyright Chocolove Mic 2003 IlmuKomputer.Com

LOGIN FORM MENGGUNAKAN PROGRAM JAVA

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK (JAVA) PERTEMUAN 12 WIRELESS JAVA PROGRAMMING WITH JAVA 2 MICRO EDITION (J2ME)

DAFTAR ISI. ABSTRAK... i KATA PENGANTAR... ii DAFTAR ISI... iii DAFTAR TABEL... xi DAFTAR GAMBAR... xiv

BAB IV HASIL DAN UJI COBA

Pengenalan JavaScript

Robertus Lilik Haryanto

BAB IV HASIL DAN UJI COBA

yang signifikan. Pada tahap ini dijelaskan hal-hal apa saja yang terdapat pada

BAB III PERANCANGAN SIMULASI

LAMPIRAN Listing Program

BAHASA PEMROGRAMAN JAVA

SUMBER BELAJAR PENUNJANG PLPG

Yoannita Company LOGO

LAMPIRAN A Project SendSMS /////////////////////////////////////////////////////// ParsingKata.java

Chapter 1 Buat aplikasi kita menggunakan VisualMidlet

Bab 9. Mengetahui teknik yang berbeda dalam optimisasi aplikasi mobile

APLIKASI KAMUS MATEMATIKA UNTUK HANDPHONE

1. Tujuan. 2. Latar Belakang. 3. Percobaan. Modul Praktikum TiledLayer

Mobile Computing. Ramos Somya

1. Tujuan. 2. Latar Belakang. 3. Percobaan. Modul Praktikum Layer Manager

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK (JAVA) PERTEMUAN 1 PENGENALAN LINGKUNGAN PEMROGRAMAN JAVA

INSTRUKSI PENCABANGAN

APLIKASI MOBILE-CHATTING MENGGUNAKAN FASILITAS BLUETOOTH DENGAN J2ME

gplat,1,, rrl "f-dj.; alp' fll --s =- f a,ufrrnr"rpi c o .'lr, rr* f a;lrjiiltr* '. 'i-r'f rr srlagi'(+ SISTEM MOBILE (PRAKTIKUM) DISUSUN OLEH:

PEMROGRAMAN BERORIENTASI OBJEK

LAPORAN RESMI. PRAKTIKUM TEKNOLOGI WEB Pengenalan JavaScript

BAB 2 LANDASAN TEORI. Istilah komputer (computer) berasal dari bahasa latin computere yang berarti

BAB IV IMPLEMENTASI DAN PENGUJIAN

DASAR PEMOGRAMAN JAVA

LAMPIRAN A. Universitas Kristen Maranatha

BAB III ANALISA MASALAH DAN RANCANGAN PROGRAM

Sebelum kita membahas tentang Microsoft Access ada baiknya jika kita terlebih dahulu mengetahui apa yang dimaksud dengan database.

PEMAHAMAN DASAR DASAR JAVA

A. TUJUAN PEMBELAJARAN

AUTHMODE_PRIVATE hanya bisa diakses oleh MIDlet suite yang menciptakan record store tersebut

BAB IV IMPLEMENTASI DAN PENGUJIAN SISTEM

APLIKASI KAMUS BAHASA JEPANG - INDONESIA PADA PERANGKAT GENGGAM MENGUNAKAN J2ME

PENDAHULUAN TENTANG NETBEANS

IF5093 Java ME. Achmad Imam Kistijantoro Semester II 2006/2007. IF-ITB/AI/Mar 07. IF5093 Java ME

BAB I Pengenalan Visual Basic pada Pemrograman Akuntansi 1

BAB IV IMPLEMENTASI DAN EVALUASI. rumah makan berbasis Java 2 Micro Edition (J2ME) ini kedalam implementasi

Badiyanto, S.Kom., M.Kom. PBO java

Penggunaan Netbeans IDE, Hello World, variable dan Operator aritmetika.

MODUL I Pengenalan IDE Visual Basic 6.0

SILABUS MATA KULIAH PEMROGRAMAN APLIKASI BERGERAK

PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN

Membuat Aplikasi Kirim SMS. Menggunakan Java J2ME

PRAKTIKUM 2 ANTAR MUKA TINGKAN ATAS

BAB IV IMPLEMENTASI DAN ANALISA

2. Software yang dibutuhkan Untuk membuat sebuah program java, minimal yang dibutuhkan adalah:

PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN

Penggunaan Canvas Pada J2ME Untuk Game Programming

BAB 8 Argumen dari Command-line

LAPORAN RESMI PRAKTIKUM II WEB DESAIN PENGENALAN JAVASCRIPT

Pemrograman dengan Java

PEMOGRAMAN APLIKASI BERGERAK (Java ME) Yoannita

BAB III JAVA 2 MICROEDITION (J2ME) definisi dari sun adalah sekumpulan teknologi pemrograman yang digunakan

Modul Praktikum 1 Pemograman Berorientasi Objek

BAB I. 1 P e m r o g r a m a n V i s u a l B a s i c - J a t i L e s t a r i

Menggunakan Microsoft Access (perhatikan untuk red text)

PEMROGRAMAN JAVA. Yoannita, S.Kom. Input Kondisi (IF-ELSE, SWITCH)

INTRODUCTION TO JAVA

Bab 2 Tinjauan Pustaka 2.1 Penelitian Terdahulu

1. Pilih BAB IV IMPLEMENTASI DAN PENGUJIAN. kebutuhan sistem yang meliputi emulator Java2 Micro Edition(J2ME) dan telepon

Sistem Distribusi Data Melalui COM+ Dengan Visual Basic

BAB IV IMPLEMENTASI DAN PENGUJIAN

BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA

BAB 3 Mengenali Lingkup Pemrograman Anda

int i = 0; while (i < 10) { System.out.println( Informatika Unpas ); i++; }

PEMOGRAMAN APLIKASI BERGERAK (Java ME) Company LOGO

BAB 2 LANDASAN TEORI

Untuk menampilkan proses pembuatan file JAR. Untuk menentukan nama file archive (file JAR)

Sekarang, kita akan mencoba untuk menganalisa program Java pertama : public class Hello {

JAVA BASIC PROGRAMMING Joobshet

Pertama tama install terlebih dahulu java versi terbaru pada. atau didalam

Bahasa Pemrograman 2.

MODUL 2 PERANCANGAN INTERFACE

Pengenalan Visual Basic

Transkripsi:

Pendahuluan ( First Session). Baca terlebih dahulu halaman ini : Pemahaman sebelumnya :. Aturan Pemrograman Java Standar.. Instalasi Toolkit Standard JME (Recomended) yaitu : a. Engine Java, JSDK.4. b. Wireless Tool Kit.40 (WTK.0) c. Editor Kit untuk JME Coding standard ( Notepad ) d. Editor Kit untuk JME Coding Advance ( Forte4Java / JCreator ). Instalasi Emulator Toolkit Spesifik yaitu : a. Nokia Developer Suite for JME (NDS_JME).0 or higher. (Recomended) b. Siemen Mobile Tool Kit (SMTK). c. Motorola SDK. or higher for JME. d. PalmOS Emulator. or higher 4. Toolkit untuk Transfer ke Mobile Phone a. Oxygen Phone Manager. Aturan penulisan!!!. Untuk penulisan kode dituliskan dengan menggunakan huruf yang berbeda.. Untuk baris kode yang tidak cukup, maka dituliskan dengan menambahkan tab pada baris kode yang merupakan sambungan di atasnya.. Untuk tiap baris kode, diberi penomoran baris untuk memudahkan pengecekan baris. 4. Pada bagian coding jika terdapat tanda dengan keterangan dalam kurung siku dengan huruf tebal italic seperti berikut ini [...] berarti coding tersebut bersifat bebas, bisa diganti sesuai dengan yang diinstruksikan di dalam kurung siku itu.. Pada coding, ada baris yang diberi huruf tebal. Berarti baris ini adalah merupakan bagian yang utama yang diterangkan pada program.

Aturan kompilasi program dengan WTK!!!. Pertama kali carilah pada Start Program JME Wireless Tool Kit.0.4_0 KToolbar.. Kemudian setelah itu, akan muncul tampilan seperti berikut ini. Untuk membuat proyek MIDlet baru, tekan tombol New Project.. Masukkan nama Proyek dan nama dari MIDlet yang baru yang ingin dibuat. Hendaknya, nama Proyek dan nama MIDlet adalah nama yang mempunyai saling keterkaitan dan mudah diingat juga melambangkan informasi MIDlet itu sendiri. Ingat nama MIDlet adalah sesuai dengan nama source program MIDlet anda. Setelah itu tekan Create Project. 4. Setelah Project dibuat, maka langsung akan membuka dialog Setting untuk project baru.

Disini propertinya bisa anda ganti sesuai dengan keinginan ada. Ini adalah properti dari MIDlet yang akan ditampilkan nanti sebagai informasi dari MIDlet yang anda buat. Informasi ini mencakup nama, versi, lisensi, konfigurasi juga termasuk informasi nama MIDlet dan ukurannya. Setelah disetting, tekan tombol OK di bawahnya untuk menyimpan setting yang diberikan.. Pada display terdapat perubahan tampilan seperti berikut ini : Disini dikatakan bahwa anda harus meletakkan source MIDlet pada direktor yang telah dibuat oleh WTK, juga file untuk aplikasi lainnya seperti icon, juga library file lain yang diperlukan untuk program. 6. Setelah selesai dicopykan, untuk mengkompilasi / compile source MIDlet jadi MIDlet program, dari dialog utama, tekan tombol Build. Saat setelah ditekan, maka akan terlihat dialog kecil untuk menyatakan proses kompilasi program MIDlet tersebut. Setelah selesai, maka akan keluar konfirmasi pada dialog menyatakan proses berhasil atau gagal. Jika gagal, maka disitu akan terlihat pada bagian mana terjadinya kesalahan / gagalnya proses kompilasi terjadi akibat apa.

. Untuk menjalankannya, maka bisa dipilih device apa saja yang dapat dipakai. Kemudian tekan tombol Run. Disini coba dipilih DefaultGrayPhone.. Tampilan pada emulator handphone akan tampak seperti berikut ini.. Tampilan pada emulator ini akan serupa dengan pada piranti sesungguhnya.. Tidak semua aplikasi yang jalan di Emulator dapat berjalan sama seperti pada piranti. Ini juga tergantung pada spesifikasi dari mesin Java Mobile di piranti tersebut apakah mendukung.

Modul MIDlet (First Session) Simple Hello World. Untuk latihan kita yang pertama adalah dengan mengetikkan sebuah program midlet sederhana untuk menampilkan tulisan Hello World ke dalam emulator daripada Nokia ataupun emulator JME standard. File : HelloMIDlet.java 4 6 6 0 public class HelloMIDlet extends MIDlet private Display display; public HelloMIDlet() display = Display.getDisplay(this); public void startapp() TextBox textbox = new TextBox("Hello World", "Test string", 6, TextField.ANY); display.setcurrent(textbox); public void pauseapp() public void destroyapp(boolean unconditional) Sama pada pelajaran dasar pengetikan coding midlet, yang dipelajari pertama adalah menampilkan kata-kata Hello World ke dalam applet maupun ke dalam program Java. Sama seperti aturan pada pemrograman Java, disini ada beberapa class default yang harus diimport dari luar agar program dapat jalan, yaitu pada baris dan : Disini untuk inisialisasi sebuah midlet pada piranti, digunakan baris, sedangkan untuk menampilkan sebuah midlet ke layar display piranti, maka dibutuhkan baris. Untuk pemrograman lainnya, memang ada memiliki kesamaan dengan pemrograman Java. Untuk pendefinisian awal class, sama seperti Java, nama yang terdapat pada baris 4 : public class HelloMIDlet extends MIDlet berarti, source midlet ini juga bernama HelloMIDlet.java, yang juga merupakan bagian class dari MIDlet. Ada pengkhususan untuk coding midlet adalah penggunaan void khusus pada coding, yaitu seperti tampak pada baris, dan 0 : public void startapp() public void pauseapp()

public void destroyapp(boolean unconditional) Jika diartikan void ini adalah berarti program yang dijalankan pada event-event tertentu, contoh untuk startapp() berarti dijalankan pada saat program dieksekusi, pauseapp() dijalankan saat program mengalami berhenti sebentar / mengalami pause, sedangkan pada destroyapp() dijalankan saat program ditutup / exit. Pada baris 6 dan ini digunakan untuk inisialisasi display ke piranti, juga kebanyakan digunakan sebagai pengenal obyek display pada midlet. Pada bagian berikutnya, akan dijelaskan tentang penggunaan Command yang sering dipakai pada midlet. Latihan : Buatlah coding midlet seperti berikut ini, dan diload di emulator : File : Helloku.java 4 6 6 0 public class Helloku extends MIDlet private Display display; public Helloku() display = Display.getDisplay(this); public void startapp() TextBox t = new TextBox("Namaku", "[...isi dengan nama anda...] ", 6, TextField.ANY); display.setcurrent(textbox); public void pauseapp() public void destroyapp(boolean unconditional)

Modul MIDlet. Command pada MIDlet Perlunya Command disini adalah untuk menambahkan interaksi antara pengguna dengan MIDlet. Interaksi ini bisa termasuk tombol pada piranti / berupa menu pilihan pada MIDlet. Berikut ini adalah contoh penambahan interaksi pada midlet Hello. File : Hello.java 4 6 6 0 4 6 0 4 public class Hello extends MIDlet implements CommandListner private Display display; private Command cmdexit; public Hello() display = Display.getDisplay(this); cmdexit = new Command( Keluar, Command.SCREEN, ); public void startapp() TextBox textbox = new TextBox("Hello World", "Test string", 6, TextField.ANY); t.addcommand(cmdexit); t.setcommandlistener(this); display.setcurrent(t); public void pauseapp() public void destroyapp(boolean unconditional) public void commandaction(command cmd, Displayable disp) if (cmd == cmdexit) destroyapp(false); notifydestroyed(); Pada program diatas ditambahkan CommandListener untuk interface keluar dari aplikasi. Sekarang compile dan jalankan pada WTK anda dan lihat hasilnya. Maka akan tampak ada penambahan tombol Keluar pada samping kanan bawah. Memang pada beberapa emulator / piranti penambahan Command ini tidak selalu tampak pada di kanan bawah, terkadang harus kita akses dulu ke Menu / Option, baru setelah itu ada tampak pilihan Keluar. Sekarang kita tinjau penambahan pada coding: Command ini adalah sebuah class, jadi penambahannya harus diregister terlebih dahulu obyek yang akan menjadi Command. Lihat pada baris ke : private Command cmdexit; Kemudian pada main class, baru kita tambahkan properti lain untuk Command tersebut, lihat pada baris ke : cmdexit = new Command( Keluar, Command.SCREEN, );

Command ini tujuannya diberikan kepada obyek, sehingga obyek dapat berinteraksi dengan pengguna. Cara pemberian Command ini dilihat pada baris 6 dan : t.addcommand(cmdexit); t.setcommandlistener(this); Sedangkan set perintah yang diberikan kepada Command untuk keluar dari aplikasi MIDlet, diberikan dalam kelas tersendiri sebagai aksi dari Command, dilihat pada baris sampai dengan : public void commandaction(command cmd, Displayable disp) if (cmd == cmdexit) destroyapp(false); notifydestroyed(); Latihan : Cobalah contoh pembuatan tanggal berikut ini File : DateExample.java 4 6 6 0 4 6 0 4 6 import java.util.calendar; public class DateExample extends javax.microedition.midlet.midlet private Command cmdsetdatetype; private Command cmddisplaydate; private Command cmdexit; private Command cmdsetdatetypeusa; private Command cmdsetdatetypenormal; private TextBox textbox; private TextBox textbox; private CommandListener listener; private CommandListener listener; private Display display; private static final String TEXT = "TextBox l\nuse Menu"; private static final String TEXT = "TextBox \nuse Menu"; private static final String SLASH = "/"; private static final int DATE_FORMAT_USA = ; private static final int DATE_FORMAT_NORMAL = ; private int dateformat = DATE_FORMAT_NORMAL; public DateExample() display = Display.getDisplay(this); cmdsetdatetype = new Command("See Date Type",Command.SCREEN,); cmdexit = new Command("Exit",Command.EXIT,); cmdsetdatetypeusa = new Command("USA", Command.SCREEN, ); cmdsetdatetypenormal =

40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 64 6 66 6 6 6 0 4 6 0 4 6 0 4 6 0 new Command("Normal", Command.SCREEN, ); cmddisplaydate = new Command("Display Date", Command.SCREEN, ); dateformat = DATE_FORMAT_USA; public void startapp() textbox = new TextBox("Date MIDlet", null, 6, 0); textbox.addcommand(cmdsetdatetype); textbox.addcommand(cmddisplaydate); textbox.addcommand(cmdexit); listener = (CommandListener)new TextBoxListener(); textbox.setcommandlistener(listener); textbox = new TextBox("Date", null, 6, 0) ; textbox.addcommand(cmdsetdatetypeusa); textbox.addcommand(cmdsetdatetypenormal); listener = (CommandListener)new TextBoxListener() ; textbox.setcommandlistener(listener); textbox.setstring(text); display.setcurrent(textbox); public void pauseapp() public void destroyapp(boolean unconditional) private void setactivetextbox(textbox tb) display.setcurrent(tb); class TextBoxListener implements CommandListener public void commandaction(command cmd, Displayable disp) System.out.println("in TextBoxListener"); if (cmd == cmdexit) destroyapp(false); notifydestroyed(); else if (cmd == cmdsetdatetype) textbox.setstring(text); setactivetextbox(textbox); else Calendar cal = Calendar.getInstance(); StringBuffer sb = new StringBuffer(); if (dateformat == DATE_FORMAT_USA) sb.append(integer.tostring(cal.get(calendar.month))).append(slash).append(integer.tostring(cal.get(calendar.day_of_month))); else sb.append(integer.tostring(cal.get(calendar.day_of_month))).append(slash).append(integer.tostring(cal.get(calendar.month))); sb.append(slash).append(integer.tostring(cal.get(calendar.year))); textbox.setstring(sb.tostring() + "\n" + TEXT); class TextBoxListener implements CommandListener

4 6 4 6 0 public void commandaction(command cmd, Displayable disp) System.out.println("in TextBoxListener"); if (cmd == cmdexit) destroyapp(false); notifydestroyed(); else if (cmd == cmdsetdatetypeusa) dateformat = DATE_FORMAT_USA; else dateformat = DATE_FORMAT_NORMAL; textbox.setstring(text); setactivetextbox(textbox); Pada latihan di atas coba anda perhatikan penggunaan perintah command, serta penulisannya seperti pada contoh baris dan : cmdexit = new Command("Exit", Command.EXIT, ); cmddisplaydate = new Command("Display Date", Command.SCREEN, ); Pada MIDlet hasil, anda lihat, perintah tersebut memberikan efek apa pada MIDlet, apakah ada perubahan? Bagaimana juga penempatannya?

Modul MIDlet(Second Session) Interaksi User dengan MIDP API. Berikut ini ada contoh untuk lebih lanjut pengembangan dengan TextBox : File : TextBoxExample.java 4 6 6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 /* * Demo TextBox dengan modifikasi dari Instant Wireless Java with JME * By chiwoq@piksi */ public class TextBoxExample extends MIDlet implements CommandListener private TextBox t; private Command cmdcompare; private Command cmdexit; private Display display; private String msg = "Hari ini pelajaran tentang API"; public TextBoxExample() display = Display.getDisplay(this); cmdcompare = new Command("Bandingkan", Command. SCREEN, ); cmdexit = new Command ("Keluar", Command.SCREEN, ); public void startapp() t = new TextBox("TextBoxExample", msg, 6, 0); t.addcommand(cmdcompare); t.addcommand(cmdexit); t.setcommandlistener(this); display.setcurrent(t); public void pauseapp() public void destroyapp(boolean unconditional) public void commandaction(command cmd, Displayable disp) if (cmd == cmdexit) destroyapp(false); notifydestroyed() ; else if (cmd==cmdcompare) t.setstring((msg.compareto(t.getstring()) == 0)? "SAMA" : "BEDA"); t.removecommand(cmdcompare); Disini dapat kita lihat suatu aplikasi untuk membandingkan antara teks yang ada dengan teks yang telah diedit. Disini memanfaatkan TextBox untuk meletakkan teks dan melakukan komparasi dengan menggunakan Command.

Berikut ini kita akan mengenal Form yang digunakan dalam MIDlet. Form adalah layar yang mengandung beberapa obyek benda (image, text, textbox, field date, gauge, choice groups). Untuk Form disini terdiri dari constructor, yaitu untuk properti form itu sendiri, dan untuk menambahkan komponen penyusun form. Berikut ini adalah contoh untuk komponen penyusun form. Suatu Textfield adalah kotak tempat mengisikan teks yang dapat diedit. Seperti pada TextBox, juga untuk mengisikan teks. Perbedaannya, bahwa disini TextField adalah merupakan TextBox dengan adanya label di depannya. Fungsi pembatasan jumlah karakter tetap dimiliki oleh TextField. Langsung saja kita lihat contoh berikut ini: File : TempConvMid.java 4 6 6 0 4 6 0 4 6 40 4 4 4 44 /* *This example was taken from Instant Wireless with JME by paul_tremblett *Modified by chiwoq@piksi */ public class TempConvMid extends MIDlet implements CommandListener private Display display; private Command cmdexit; private Form form; private TextField tempfield; public void startapp() display = Display.getDisplay(this) ; cmdexit = new Command ("Keluar", Command.SCREEN, ); form = new Form("Temp"); tempfield = new TextField("Teks: ", null,, TextField.ANY); form.addcommand(cmdexit); form.setcommandlistener(this); form.append(tempfield); display.setcurrent(form); public void pauseapp() public void destroyapp(boolean unconditional) public void commandaction (Command cmd, Displayable d) String displaystring = null; if (cmd == cmdexit) destroyapp(false); notifydestroyed(); Pada MIDlet ini, terdapat form yaitu bernama Temp. Form ini berisikan komponen berupa TextField berlabel : Teks : Ini adalah contoh sederhana penggunaan form dan komponennya. Berikut adalah contoh lagi komponen form.

File : TempConvMid.java 4 6 6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 64 6 66 /* *This example was taken from Instant Wireless with JME by paul_tremblett *Modified by chiwoq@piksi */ public class TempConvMid extends MIDlet implements CommandListener private Display display; private Command cmdexit; private Command cmdpilih; private Command cmdok; private Form form; private Form form; private TextField tempfield; private ChoiceGroup tempchoice; private StringItem convertedtemp; public void startapp() display = Display.getDisplay(this); cmdpilih = new Command("Pilih",Command.SCREEN, ); cmdexit = new Command ("Keluar", Command.SCREEN, ); cmdok = new Command("OK", Command.SCREEN, ); form = new Form("Konversi"); tempfield = new TextField("Suhu:", null,, TextField.ANY) ; form.addcommand(cmdpilih); form.addcommand(cmdexit); form.setcommandlistener(this); form.append(tempfield); String[] temptype = "Celsius", "Farenheit"; tempchoice = new ChoiceGroup("Tipe", Choice.EXCLUSIVE, temptype, null); form.append(tempchoice); form = new Form("Hasil"); convertedtemp = new StringItem(null, null); form.append(convertedtemp); form.addcommand(cmdok); form.setcommandlistener(this); display.setcurrent(form); public void pauseapp() public void destroyapp(boolean unconditional) public void commandaction(command cmd, Displayable d) String displaystring = null; if (cmd == cmdexit) destroyapp(false); notifydestroyed(); else if (cmd == cmdpilih) String s = tempfield.getstring(); displaystring = converttemp(s); convertedtemp.settext(displaystring); display.setcurrent(form); else if (cmd == cmdok)

6 6 6 0 4 6 0 4 6 0 4 6 tempfield.setstring(null); display.setcurrent(form); private String converttemp(string s) char c = s.charat(s.length() - ); StringBuffer tsb = new StringBuffer() ; switch (tempchoice.getselectedindex ()) case 0 : tsb.append(ctof(s)) ; tsb.append('c'); break ; case : tsb.append(ftoc(s)); tsb.append ('F'); break; default: tsb.append ("**Kesalahan**"); return tsb.tostring(); private String ctof(string c) String f = "Suhu =" + c; return f; private String ftoc(string f) String c = "Suhu =" + f; return c; Pada contoh kali ini, ditampilkan beberapa hal baru disamping komponen dari Form, disini juga dikenalkan penggunaan StringBuffer, untuk tipe variable yang berkaitan dengan streaming teks (lihat baris 4). Streaming teks ini biasanya terjadi saat pengiriman data melalui protokol HTTP. Sedangkan hal-hal lainnya telah terdapat pada dasar pemrograman Java / Java Applet. Latihan : Berikut ini ada beberapa contoh sederhana untuk - Cekbox lebih dari satu.(multiplecekbox) MultipleChoiceGroup.java - Form dengan TextField, Gauge(kontrol Level), dan Cekbox FormScroll.java - Simulasi Jam Snooze.java File : MultipleChoiceGroup.java 4 6 /* * Untuk hasilnya dilihat pada WTK Window Message. */ public class MultipleChoiceGroup extends MIDlet implements ItemStateListener, CommandListener private Display display; // Reference to display object private Form fmmain; // The main form private Command cmexit; // A Command to exit the MIDlet

6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 64 6 66 6 6 6 0 4 private Command cmview; // View the choice selected private int selectallindex; // Index of the "Select All" option private ChoiceGroup cgprefs; // Choice Group of preferences private int choicegroupindex; // Index of choice group on form public MultipleChoiceGroup() display = Display.getDisplay(this); cgprefs = new ChoiceGroup("Preferences", Choice.MULTIPLE); cgprefs.append("auto Indent", null); cgprefs.append("replace Tabs", null); cgprefs.append("wrap Text", null); selectallindex = cgprefs.append("select All", null); cmexit = new Command("Exit", Command.EXIT, ); cmview = new Command("View", Command.SCREEN,); fmmain = new Form(""); choicegroupindex = fmmain.append(cgprefs); fmmain.addcommand(cmexit); fmmain.addcommand(cmview); fmmain.setcommandlistener(this); fmmain.setitemstatelistener(this); public void startapp() display.setcurrent(fmmain); public void pauseapp() public void destroyapp(boolean unconditional) public void commandaction(command c, Displayable s) if (c == cmview) boolean selected[] = new boolean[cgprefs.size()]; cgprefs.getselectedflags(selected); for (int i = 0; i < cgprefs.size(); i++) System.out.println(cgPrefs.getString(i) + (selected[i]? ": selected" : ": not selected")); else if (c == cmexit) destroyapp(false); notifydestroyed(); public void itemstatechanged(item item) if (item == cgprefs) if (cgprefs.isselected(selectallindex)) for (int i = 0; i < cgprefs.size() - ; i++) cgprefs.setselectedindex(i, true); cgprefs.setselectedindex(selectallindex, false);

File : FormScroll.java 4 6 6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 public class FormScroll extends MIDlet implements CommandListener private Display display; // Reference to display object private Form frmmain; // The main form private Command cmdexit; // Command to exit private TextField txfsize; // Product size private ChoiceGroup chgemail; // Choice group private Gauge gauvolume; // Volume public FormScroll() display = Display.getDisplay(this); // Create TextField txfsize = new TextField("Size", "Large",, TextField.ANY); // Create an exclusive (radio) choice group, and append entries chgemail = new ChoiceGroup("Email Options", Choice.EXCLUSIVE); chgemail.append("read", null); chgemail.append("forward", null); chgemail.append("delete", null); // Create the gauge gauvolume = new Gauge("Sound Level", true, 0, 4); cmdexit = new Command("Exit", Command.EXIT, ); // Create the form frmmain = new Form("Form Stuff"); frmmain.append(txfsize); frmmain.append(chgemail); frmmain.append(gauvolume); frmmain.addcommand(cmdexit); // Capture events frmmain.setcommandlistener(this); // Called by application manager to start the MIDlet. public void startapp() display.setcurrent(frmmain); public void pauseapp() public void destroyapp(boolean unconditional) public void commandaction(command c, Displayable s) if (c == cmdexit) destroyapp(false); notifydestroyed();

File : Snooze.java 4 6 6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 import java.util.*; import java.util.timer; import java.util.timertask; public class Snooze extends MIDlet implements ItemStateListener, CommandListener private Display display; // Reference to display object private Form fmmain; // The main form private Command cmsnooze; // Start the timer private Command cmreset; // Reset to current date/time private Command cmexit; // Exit the MIDlet private DateField dfsnoozetime; // How long to snooze private int dateindex; // Index of the DateField on the Form private Date currenttime; // Current time...changes when pressing reset private Timer tmsnooze; // The timer - keeps track of system time private SnoozeTimer ttsnooze; // Called by the timer private boolean dateok = false; // Was the user input valid? public Snooze() display = Display.getDisplay(this); fmmain = new Form("When to sound the alarm:"); currenttime = new Date(); dfsnoozetime = new DateField("", DateField.DATE_TIME); dfsnoozetime.setdate(currenttime); cmsnooze = new Command("Snooze", Command.SCREEN, ); cmreset = new Command("Reset", Command.SCREEN, ); cmexit = new Command("Exit", Command.EXIT, ); dateindex = fmmain.append(dfsnoozetime); fmmain.addcommand(cmsnooze); fmmain.addcommand(cmreset); fmmain.addcommand(cmexit); fmmain.setcommandlistener(this); fmmain.setitemstatelistener(this); public void startapp () display.setcurrent(fmmain); public void pauseapp() public void destroyapp(boolean unconditional) public void itemstatechanged(item item) if (item == dfsnoozetime) if (dfsnoozetime.getdate().gettime() < currenttime.gettime()) dateok = false; else dateok = true; public void commandaction(command c, Displayable s) if (c == cmsnooze) if (dateok == false) Alert al = new Alert("Unable to set alarm", "Please choose another date and time.", null, null);

64 6 66 6 6 6 0 4 6 0 4 6 0 4 6 al.settimeout(alert.forever); al.settype(alerttype.error); display.setcurrent(al); else tmsnooze = new Timer(); ttsnooze = new SnoozeTimer(); long amount = dfsnoozetime.getdate().gettime() currenttime.gettime(); tmsnooze.schedule(ttsnooze,amount); fmmain.removecommand(cmsnooze); fmmain.removecommand(cmreset); fmmain.delete(dateindex); fmmain.settitle("snoozing..."); else if (c == cmreset) dfsnoozetime.setdate(currenttime = new Date()); else if (c == cmexit) destroyapp(false); notifydestroyed(); private class SnoozeTimer extends TimerTask public final void run() Alert al = new Alert("Time to wake up!"); al.settimeout(alert.forever); al.settype(alerttype.alarm); AlertType.ERROR.playSound(display); display.setcurrent(al); cancel();

Modul 4 MIDlet(Third Session) Interface dan Pemberitahuan Pengguna Advance. Pada Sesi ini akan kita bahas tentang penggunaan Alert dan Ticker yang terdapat pada MIDlet. Terkadang saat pengguna menjalankan suatu program, dapat saja pengguna salah memasukkan bilangan ataupun huruf / salah dalam melakukan pilihan. Terkadang kesalahan tersebut dapat membuat program tidak berjalan sebagaimana mestinya. Oleh karena itu perlu adanya pemberitahuan informasi / warning kepada pengguna saat menjalankan program. Berikut ini akan kita bahas mengenai Alert terlebih dulu. Kita lihat contoh Alert berikut ini : File : ModalAlert.java 4 6 6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 public class ModalAlert extends MIDlet implements CommandListener private Display display; // Reference to Display object private Form fmmain; // Main form private Alert altest; // Alert to show text and image private Command cmexit; // Command to exit the MIDlet public ModalAlert() display = Display.getDisplay(this); cmexit = new Command("Exit", Command.SCREEN, ); fmmain = new Form("Welcome"); fmmain.append("text string inside the Form"); fmmain.addcommand(cmexit); fmmain.setcommandlistener(this); public void startapp() showalert(); public void pauseapp() public void destroyapp(boolean unconditional) public void showalert() try Image im = Image.createImage("/../res/coffee.png"); altest = new Alert("New Alert", "Time for more Java", im, AlertType.INFO); altest.settimeout(alert.forever); catch(exception e) System.out.println("Unable to read png image.");

4 0 4 6 60 6 6 display.setcurrent(altest, fmmain); public void commandaction(command c, Displayable s) if (c == cmexit) destroyapp(true); notifydestroyed(); Hasilnya akan anda lihat seperti berikut ini : Pada MIDlet ini ada beberapa hal yang dipelajari, yaitu tentang meloading gambar berekstesi png dan memberikan Alert saat event tertentu. Seperti kita lihat pada baris sampai baris 4. Disini diberikan Alert yang berupa gambar dan pesan teks. Saat pengaktifannya adalah pada saat loading aplikasi (baris 4). Waktu untuk suatu Alert dapat diset sesuai keinginan. Seperti pada aplikasi di atas, diset dengan waktu tak terhingga (baris 4). Alert yang ditampilkan disini adalah berupa gambar, selain itu juga ada Alert yang berupa suara yang dihasilkan dari perangkat genggam. Hal ini akan kita pelajari lebih lanjut pada pertemuan lain. Mengenai loading suatu gambar, disini gambar yang digunakan adalah coffee.png dengan ukuran x 4 pixel dan 6 dpi, 4 bit gambar. Peletakkan gambar disitu dituliskan pada alamat /../res/coffee.png, berarti berada pada alamat [direktori Aplikasi WTK ]/ModalAlert/res. Ini perlu diingat bahwa bentuk penulisan untuk alamat pada MIDlet adalah seperti berikut ini. Jika berbeda, maka gambar tidak akan ditemukan oleh MIDlet. Piranti genggam untuk versi agak lama masih hanya dapat memuat gambar png. Sedangkan untuk yang terbaru (kebanyakan sudah support MMS) bahkan sudah dapat memuat gambar JPG. Ini tergantung dari vendor yang membuat menyertakan kemampuan ini atau tidak.

Selain dengan Alert, informasi juga dapat diberikan dalam bentuk tulisan yang muncul saat aplikasi sedang berjalan. Bentuk seperti ini sama seperti pada HTML dimana kita melihat adanya tulisan berjalan di layar (marquee). Pada MIDlet disebut sebagai Ticker. Mari kita lihat bentuk Ticker dalam contoh program berikut ini : File : SharedTicker.java 4 6 6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 public class SharedTicker extends MIDlet implements CommandListener private Display display; // Reference to Display object private List lsproducts; // Main productlist private Alert alhelp; // Alert to show text and image private Ticker tksale; // Ticker of what's on sale private Command cmexit; // Command to exit the MIDlet public SharedTicker() display = Display.getDisplay(this); cmexit = new Command("Exit", Command.SCREEN, ); tksale = new Ticker("Current Sale: Torchiere Lamp only $.00"); lsproducts = new List("Products", Choice.IMPLICIT); lsproducts.append("floor Lamp", null); lsproducts.append("chandelier", null); lsproducts.append("help", null); lsproducts.addcommand(cmexit); lsproducts.setcommandlistener(this); lsproducts.setticker(tksale); public void startapp() display.setcurrent(lsproducts); public void pauseapp() public void destroyapp(boolean unconditional) public void showalert() try Image im = Image.createImage("/../res/help.png"); alhelp = new Alert("Help Information", "Over 00 unique lighting products!", im, null); alhelp.settimeout(000); alhelp.setticker(tksale); catch(exception e) System.out.println("Unable to read png image."); display.setcurrent(alhelp, lsproducts); public void commandaction(command c, Displayable s) if (c == List.SELECT_COMMAND) switch (lsproducts.getselectedindex()) case 0: System.out.println("Floor Lamp selected");

60 6 6 6 64 6 66 6 6 6 0 4 break; case : System.out.println("Chandelier selected"); break; case : showalert(); break; else if (c == cmexit) destroyapp(true); notifydestroyed(); Hasilnya tampak seperti berikut ini : Disini tampak pada display atas terdapat tulisan berjalan yang berisi informasi. Aplikasi tetap berjalan, dimana kita masih tetap bisa memilih pilihan yang berada di bawahnya. Untuk mengaktifkan Ticker ini dilihat pada baris ke 4. Selain itu disini juga diperlihatkan bahwa Ticker juga dapat digabungkan dengan suatu alert. Dimana Alert disini adalah diaktifkan saat memilih Help. (lihat baris s/d 4). Fungsi Ticker kebanyakan digunakan sebagai tempat memberikan informasi produk / iklan, karena sifatnya yang tidak mengganggu daripada keseluruhan aplikasi. Ticker hanya mengambil tempat di atas layar dan bergerak secara kontinu.

Modul MIDlet (Fourth Session) Record Store Manager (RMS). Pada pokok bahasan kali ini bersifat agak panjang dan menyeluruh. Disini suatu MIDlet akan dibawa pada tahapan lebih lanjut, dimana suatu MIDlet juga dapat menyimpan informasi data. Data yang disimpan tidak bersifat sementara, tetapi akan tetap tersimpan meskipun aplikasi ditutup atau piranti dimatikan. Disini informasi disimpan dalam bentuk suatu file pada tempat dimana aplikasi RMS dijalankan. File ini sifatnya tetap ada dan memakan memori dari piranti. Aplikasi ini bisa digunakan untuk mungkin penyimpanan data yang mempunyai kemampuan simpan sebesar memori yang ada di piranti genggam tersebut. Bahkan ada kemungkinan data ini dapat digunakan oleh aplikasi lain yang dapat membaca file data tersebut. Berikut ini adalah beberapa langkah untuk membuat suatu Manajemen RMS :. Buat MIDlet untuk membuat RMS baru.. MIDlet untuk memberikan informasi RMS yang ada.. MIDlet untuk memasukkan data baru ke RMS. 4. MIDlet untuk menampilkan data yang dimasukkan ke RMS.. MIDlet untuk mengganti data RMS yang ada. 6. MIDlet untuk menghapus data pada RMS yang ada.. MIDlet untuk menutup RMS.. MIDlet untuk menghapus RMS. Kedelapan langkah ini harus dibuat terlebih dahulu baru kemudian digabungkan menjadi satu aplikasi, sehingga dapat berjalan sebagaimana Manajemen database RMS berjalan. Catatan : disini tiap MIDlet dapat berdiri sebagai class sendiri, tapi sebaiknya diketik semua terlebih dahulu baru kemudian dikompilasi. Jadi satu JAR.. Buat MIDlet untuk membuat RMS baru. File : newdatabaserms.java 4 6 6 0 4 6 /* * Deskripsi: Membuat RecordStore pada MIDlet * */ import javax.microedition.rms.*; public class newdatabaserms extends MIDlet implements CommandListener private Display display; private Command createcmd = new Command("Buat",Command.OK,); private Command exitcmd = new Command("Keluar",Command.EXIT,); private Form f; private TextField t; private RecordStore mydb; private Ticker tck; public newdatabaserms()

0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 64 6 66 6 6 6 0 4 public void startapp() display = Display.getDisplay(this); f = new Form("Pemrograman RMS"); t = new TextField("Nama Record Store",null,, TextField.ANY); tck = new Ticker(""); f.append(t); f.addcommand(createcmd); f.addcommand(exitcmd); f.setcommandlistener(this); f.setticker(tck); public void buatdb() try // Buat Database Baru mydb = RecordStore.openRecordStore(t.getString(),true); tck.setstring("database " + t.getstring() + " berhasil dibuat"); catch(recordstoreexception e) // Ada kesalahan // Saat ini tidak ditangani tck.setstring("ada kesalahan pembuatan database"); // Fungsi untuk keluar public void keluar() this.destroyapp(true); // Ini adalah fungsi pada interface CommandListener // yang harus diimplementasikan public void commandaction(command c, Displayable d) String lbl = c.getlabel(); if(lbl.equals("keluar")) keluar(); else if(lbl.equals("buat")) buatdb(); public void pauseapp() // Do Nothing public void destroyapp(boolean unconditional) notifydestroyed();. MIDlet untuk memberikan informasi RMS yang ada. File : informasirms.java 4 6 /* * Deskripsi: Menampilkan daftar database/recordstore yang ada * untuk bisa dihapus * */ import javax.microedition.rms.*; import java.io.*;

6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 64 6 66 6 6 6 0 public class informasirms extends MIDlet implements CommandListener private Display display; private Command exitcmd = new Command("Keluar",Command.EXIT,); private Form f,f; private TextField t,t; private RecordStore mydb; private Ticker tck; private ChoiceGroup dt; public informasirms() public void startapp() display = Display.getDisplay(this); f = new Form(null); dt = new ChoiceGroup("Daftar Database",Choice.EXCLUSIVE); tck = new Ticker("Informasi RMS"); f.addcommand(exitcmd); f.setcommandlistener(this); f.setticker(tck); tampilkan(); public void tampilkan() String alldbs[] = RecordStore.listRecordStores(); for(int i = 0; i < alldbs.length; i++) dt.append(alldbs[i],null); f.append(dt); // Fungsi untuk keluar public void keluar() this.destroyapp(true); // Ini adalah fungsi pada interface CommandListener // yang harus diimplementasikan public void commandaction(command c, Displayable d) String lbl = c.getlabel(); if(lbl.equals("keluar")) keluar(); public void pauseapp() // Do Nothing public void destroyapp(boolean unconditional) notifydestroyed();. MIDlet untuk memasukkan data baru ke RMS. File : tambahdatarms.java 4 /* * Deskripsi: Menambah data pada RecordStore pada MIDlet * */

6 6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 64 6 66 6 6 6 0 import javax.microedition.rms.*; import java.io.*; public class tambahdatarms extends MIDlet implements CommandListener private Display display; private Command opencmd = new Command("Buka DB",Command.OK,); private Command exitcmd = new Command("Keluar",Command.EXIT,); private Command addcmd = new Command("Tambahkan",Command.OK,); private Form f,f; private TextField t,t; private RecordStore mydb; private Ticker tck; public tambahdatarms() public void startapp() display = Display.getDisplay(this); f = new Form("Tambah data RMS"); t = new TextField("Nama Record Store",null,, TextField.ANY); tck = new Ticker(""); f.append(t); f.addcommand(opencmd); f.addcommand(exitcmd); f.setcommandlistener(this); f.setticker(tck); public void tambahdata() f = new Form("Tambah data pada " + t.getstring()); t = new TextField("Data? ",null,6,textfield.any); f.append(t); f.addcommand(addcmd); f.addcommand(exitcmd); f.setcommandlistener(this); f.setticker(tck); display.setcurrent(f); public void tambahkan() try ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeutf(t.getstring()); byte[] b = baos.tobytearray(); mydb.addrecord(b, 0, b.length); tck.setstring("data berhasil ditambahkan"); display.setcurrent(f); catch(ioexception e) tck.setstring("ada kesalahan I/O"); display.setcurrent(f); catch(recordstorefullexception e) tck.setstring("record Store sudah penuh"); display.setcurrent(f);

4 6 0 4 6 0 4 6 0 4 6 4 6 0 4 6 catch(recordstorenotopenexception e) // do nothing catch(recordstoreexception e) // do nothing public void bukadb() try // Buka database yang sudah ada mydb = RecordStore.openRecordStore(t.getString(),false); tck.setstring("database " + t.getstring() + " berhasil dibuka"); tambahdata(); catch(recordstorenotfoundexception e) // Ada kesalahan // Saat ini tidak ditangani tck.setstring("tidak ditemukan database yang dimaksud"); catch(recordstoreexception e) // Fungsi untuk keluar public void keluar() // Tutup database dahulu try mydb.closerecordstore(); this.destroyapp(true); catch(recordstorenotopenexception e) System.out.println("Gagal tutup Record Store"); catch(recordstoreexception e) // do nothing catch(nullpointerexception e) this.destroyapp(true); // Ini adalah fungsi pada interface CommandListener // yang harus diimplementasikan public void commandaction(command c, Displayable d) String lbl = c.getlabel(); if(lbl.equals("keluar")) keluar(); else if(lbl.equals("buka DB")) bukadb(); else if(lbl.equals("tambahkan")) tambahkan(); public void pauseapp() // Do Nothing public void destroyapp(boolean unconditional) notifydestroyed(); 4. MIDlet untuk menampilkan data yang dimasukkan ke RMS. File : 4 /* * Deskripsi: Menampilkan data pada RecordStore pada MIDlet * */

6 6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 64 6 66 6 6 6 0 import javax.microedition.rms.*; import java.io.*; public class tampildatarms extends MIDlet implements CommandListener private Display display; private Command opencmd = new Command("Tampilkan",Command.OK,); private Command exitcmd = new Command("Keluar",Command.EXIT,); private Command backcmd = new Command("Kembali",Command.EXIT,); private Form f,f; private TextField t,t; private RecordStore mydb; private Ticker tck; public tampildatarms() public void startapp() display = Display.getDisplay(this); f = new Form(" Tampilkan data"); t = new TextField(" Nama Record Store",null,, TextField.ANY); tck = new Ticker(""); f.append(t); f.addcommand(opencmd); f.addcommand(exitcmd); f.setcommandlistener(this); f.setticker(tck); public void tampilkan() try f = new Form(" Datanya "); ChoiceGroup dt = new ChoiceGroup("",Choice.EXCLUSIVE); f.addcommand(backcmd); f.setcommandlistener(this); f.append(dt); ByteArrayInputStream bais; DataInputStream dis; String in; RecordEnumeration enum = mydb.enumeraterecords(null,null, false); while(enum.hasnextelement()) int recid = enum.nextrecordid(); bais = new ByteArrayInputStream(myDb.getRecord(recId)); dis = new DataInputStream(bais); in = dis.readutf(); dt.append(in,null); display.setcurrent(f); catch(ioexception e) catch(recordstorenotopenexception e) // do nothing catch(recordstoreexception e) tck.setstring("ada kesalahan RecordStore");

4 6 0 4 6 0 4 6 0 4 6 4 6 0 4 6 display.setcurrent(f); public void kembali() tck.setstring(""); public void bukadb() try // Buka database yang sudah ada mydb = RecordStore.openRecordStore(t.getString(),false); tck.setstring("database " + t.getstring() + " berhasil dibuka"); tampilkan(); catch(recordstorenotfoundexception e) // Ada kesalahan // Saat ini tidak ditangani tck.setstring( "Tidak ditemukan database yang dimaksud"); catch(recordstoreexception e) // Fungsi untuk keluar public void keluar() // Tutup database dahulu try mydb.closerecordstore(); this.destroyapp(true); catch(recordstorenotopenexception e) System.out.println("Gagal tutup Record Store"); catch(recordstoreexception e) // do nothing catch(nullpointerexception e) this.destroyapp(true); // Ini adalah fungsi pada interface CommandListener // yang harus diimplementasikan public void commandaction(command c, Displayable d) String lbl = c.getlabel(); if(lbl.equals("keluar")) keluar(); else if(lbl.equals("tampilkan")) bukadb(); else if(lbl.equals("kembali")) kembali(); public void pauseapp() // Do Nothing public void destroyapp(boolean unconditional) notifydestroyed();. MIDlet untuk mengganti data RMS yang ada. File : gantidatarms.java /* * Nama File: gantidatarms.java * Deskripsi: Mengganti data pada RecordStore pada MIDlet

4 6 6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 64 6 66 * */ // jangan lupa import paket ini import javax.microedition.rms.*; import java.io.*; public class gantidatarms extends MIDlet implements CommandListener private Display display; private Command opencmd = new Command("Buka",Command.OK,); private Command exitcmd = new Command("Keluar",Command.EXIT,); private Command backcmd = new Command("Kembali",Command.EXIT,); private Command ganticmd = new Command("Ganti",Command.OK,); private Command prosesganticmd = new Command("Proses",Command.OK,); private Form f,f,f; private TextField t,t,t; private RecordStore mydb; private Ticker tck; private ChoiceGroup dt; public gantidatarms() public void startapp() display = Display.getDisplay(this); f = new Form(" Ganti data"); t = new TextField(" Nama Record Store",null,, TextField.ANY); tck = new Ticker(""); f.append(t); f.addcommand(opencmd); f.addcommand(exitcmd); f.setcommandlistener(this); f.setticker(tck); public void tampilkan() try f = new Form(" Datanya "); dt = new ChoiceGroup("",Choice.EXCLUSIVE); f.addcommand(backcmd); f.addcommand(ganticmd); f.setcommandlistener(this); f.append(dt); ByteArrayInputStream bais; DataInputStream dis; String in; RecordEnumeration enum = mydb.enumeraterecords(null,null, false); while(enum.hasnextelement()) int recid = enum.nextrecordid(); bais =

6 6 6 0 4 6 0 4 6 0 4 6 0 4 6 4 6 0 4 6 new ByteArrayInputStream(myDb.getRecord(recId)); dis = new DataInputStream(bais); in = dis.readutf(); in = in + " (" + (new Integer(recId)).toString() + ")"; dt.append(in,null); display.setcurrent(f); catch(ioexception e) tck.setstring("ada kesalahan I/O"); display.setcurrent(f); catch(recordstorenotopenexception e) catch(recordstoreexception e) tck.setstring("ada kesalahan RecordStore"); display.setcurrent(f); public void kembali() tck.setstring(""); public void formgantidata() f = new Form(" Data Baru : "); t = new TextField(null,null,6,TextField.ANY); f.append(t); f.addcommand(prosesganticmd); f.addcommand(backcmd); f.setcommandlistener(this); display.setcurrent(f); public void gantidata() try // Ambil informasi data yang dipilih untuk diganti String strdata = dt.getstring(dt.getselectedindex()); ByteArrayInputStream bais; DataInputStream dis; String in; int recid; RecordEnumeration enum = mydb.enumeraterecords(null,null, false); while(enum.hasnextelement()) recid = enum.nextrecordid(); bais = new ByteArrayInputStream(myDb.getRecord(recId)); dis = new DataInputStream(bais); in in = dis.readutf(); = in + " (" + (new Integer(recId)).toString() + ")"; if (in.equals(strdata)) ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeutf(t.getstring()); byte[] b = baos.tobytearray(); mydb.setrecord(recid,b, 0, b.length); break; tampilkan(); catch(ioexception e) tck.setstring("ada kesalahan I/O");

0 4 6 0 4 6 0 4 6 60 6 6 6 64 6 66 6 6 6 0 4 6 6 display.setcurrent(f); catch(recordstorenotopenexception e) catch(recordstoreexception e) tck.setstring("ada kesalahan RecordStore"); display.setcurrent(f); public void bukadb() try // Buka database yang sudah ada mydb = RecordStore.openRecordStore(t.getString(),false); tck.setstring("database " + t.getstring() + " berhasil dibuka"); tampilkan(); catch(recordstorenotfoundexception e) // Ada kesalahan // Saat ini tidak ditangani tck.setstring( "Tidak ditemukan database yang dimaksud"); catch(recordstoreexception e) // Fungsi untuk keluar public void keluar() // Tutup database dahulu try mydb.closerecordstore(); this.destroyapp(true); catch(recordstorenotopenexception e) System.out.println("Gagal tutup Record Store"); catch(recordstoreexception e) // do nothing catch(nullpointerexception e) this.destroyapp(true); // Ini adalah fungsi pada interface CommandListener // yang harus diimplementasikan public void commandaction(command c, Displayable d) String lbl = c.getlabel(); if(lbl.equals("keluar")) keluar(); else if(lbl.equals("buka")) bukadb(); else if(lbl.equals("kembali")) kembali(); else if(lbl.equals("ganti")) formgantidata(); else if(lbl.equals("proses")) gantidata(); public void pauseapp() // Do Nothing public void destroyapp(boolean unconditional) notifydestroyed();

6. MIDlet untuk menghapus data pada RMS yang ada. File : hapusdatarms.java 4 6 6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 /* * Nama File: hapusdatarms.java * Deskripsi: Menghapus data pada RecordStore pada MIDlet * */ import javax.microedition.rms.*; import java.io.*; public class hapusdatarms extends MIDlet implements CommandListener private Display display; private Command opencmd = new Command("Buka",Command.OK,); private Command exitcmd = new Command("Keluar",Command.EXIT,); private Command backcmd = new Command("Kembali",Command.EXIT,); private Command hapuscmd = new Command("Hapus",Command.OK,); private Form f,f; private TextField t,t; private RecordStore mydb; private Ticker tck; private ChoiceGroup dt; public hapusdatarms() public void startapp() display = Display.getDisplay(this); f = new Form(" Hapus data"); t = new TextField(" Nama Record Store",null,, TextField.ANY); tck = new Ticker(""); f.append(t); f.addcommand(opencmd); f.addcommand(exitcmd); f.setcommandlistener(this); f.setticker(tck); public void tampilkan() try f = new Form(" Datanya "); dt = new ChoiceGroup("",Choice.EXCLUSIVE); f.addcommand(backcmd); f.addcommand(hapuscmd); f.setcommandlistener(this); f.append(dt); ByteArrayInputStream bais; DataInputStream dis; String in; RecordEnumeration enum = mydb.enumeraterecords(null,null, false); while(enum.hasnextelement())

64 6 66 6 6 6 0 4 6 0 4 6 0 4 6 0 4 6 4 6 0 4 int recid = enum.nextrecordid(); bais = new ByteArrayInputStream(myDb.getRecord(recId)); dis = new DataInputStream(bais); in = dis.readutf(); in = in + " (" + (new Integer(recId)).toString() + ")"; dt.append(in,null); display.setcurrent(f); catch(ioexception e) tck.setstring("ada kesalahan I/O"); display.setcurrent(f); catch(recordstorenotopenexception e) catch(recordstoreexception e) tck.setstring("ada kesalahan RecordStore"); display.setcurrent(f); public void kembali() tck.setstring(""); public void hapusdata() try // Ambil informasi data yang dipilih untuk dihapus String strdata = dt.getstring(dt.getselectedindex()); ByteArrayInputStream bais; DataInputStream dis; String in; RecordEnumeration enum = mydb.enumeraterecords(null,null, false); while(enum.hasnextelement()) int recid = enum.nextrecordid(); bais = new ByteArrayInputStream(myDb.getRecord(recId)); dis = new DataInputStream(bais); in = dis.readutf(); in = in + " (" + (new Integer(recId)).toString() + ")"; if (in.equals(strdata)) mydb.deleterecord(recid); break; tampilkan(); catch(ioexception e) tck.setstring("ada kesalahan I/O"); display.setcurrent(f); catch(recordstorenotopenexception e) catch(recordstoreexception e) tck.setstring("ada kesalahan RecordStore"); display.setcurrent(f); public void bukadb() try // Buka database yang sudah ada mydb = RecordStore.openRecordStore(t.getString(),false); tck.setstring("database " + t.getstring() + " berhasil dibuka");

6 0 4 6 0 4 6 0 4 6 60 6 6 6 64 6 66 6 6 6 0 tampilkan(); catch(recordstorenotfoundexception e) // Ada kesalahan // Saat ini tidak ditangani tck.setstring( "Tidak ditemukan database yang dimaksud"); catch(recordstoreexception e) // Fungsi untuk keluar public void keluar() // Tutup database dahulu try mydb.closerecordstore(); this.destroyapp(true); catch(recordstorenotopenexception e) System.out.println("Gagal tutup Record Store"); catch(recordstoreexception e) // do nothing catch(nullpointerexception e) this.destroyapp(true); // Ini adalah fungsi pada interface CommandListener // yang harus diimplementasikan public void commandaction(command c, Displayable d) String lbl = c.getlabel(); if(lbl.equals("keluar")) keluar(); else if(lbl.equals("buka")) bukadb(); else if(lbl.equals("kembali")) kembali(); else if(lbl.equals("hapus")) hapusdata(); public void pauseapp() // Do Nothing public void destroyapp(boolean unconditional) notifydestroyed();. MIDlet untuk menutup RMS. File : closedatabaserms.java 4 6 6 /* * Nama File: closedatabaserms.java * Deskripsi: Menutup RecordStore pada MIDlet * */ import javax.microedition.rms.*; public class closedatabaserms extends MIDlet implements CommandListener private Display display; private Command closecmd =

0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 64 6 66 6 6 6 0 4 new Command("Tutup DB",Command.OK,); private Command exitcmd = new Command("Keluar",Command.EXIT,); private Form f; private TextField t; private RecordStore mydb; private Ticker tck; public closedatabaserms() public void startapp() display = Display.getDisplay(this); f = new Form("Pemrograman RMS"); t = new TextField("Nama Record Store",null,, TextField.ANY); tck = new Ticker(""); f.append(t); f.addcommand(closecmd); f.addcommand(exitcmd); f.setcommandlistener(this); f.setticker(tck); public void buatdb() try // Buka database yang sudah ada mydb = RecordStore.openRecordStore(t.getString(),false); mydb.closerecordstore(); tck.setstring("database " + t.getstring() + " tidak ada"); catch(recordstoreexception e) // Ada kesalahan // Saat ini tidak ditangani tck.setstring("ada kesalahan pembuatan database"); // Fungsi untuk keluar public void keluar() this.destroyapp(true); // Ini adalah fungsi pada interface CommandListener // yang harus diimplementasikan public void commandaction(command c, Displayable d) String lbl = c.getlabel(); if(lbl.equals("keluar")) keluar(); else if(lbl.equals("buat")) buatdb(); public void pauseapp() // Do Nothing public void destroyapp(boolean unconditional) notifydestroyed();

. MIDlet untuk menghapus RMS. File : hapusdatabaserms.java 4 6 6 0 4 6 0 4 6 40 4 4 4 44 4 46 4 4 4 0 4 6 60 6 6 6 64 6 /* * Nama File: hapusdatabaserms.java * Deskripsi: Menampilkan daftar database/recordstore yang ada * untuk bisa dihapus * */ import javax.microedition.rms.*; import java.io.*; public class hapusdatabaserms extends MIDlet implements CommandListener private Display display; private Command exitcmd = new Command("Keluar",Command.EXIT,); private Command hapuscmd = new Command("Hapus",Command.OK,); private Form f,f; private TextField t,t; private RecordStore mydb; private Ticker tck; private ChoiceGroup dt; public hapusdatabaserms() public void startapp() display = Display.getDisplay(this); f = new Form(null); tck = new Ticker("Informasi RMS"); f.addcommand(exitcmd); f.addcommand(hapuscmd); f.setcommandlistener(this); f.setticker(tck); String alldbs[] = RecordStore.listRecordStores(); dt = new ChoiceGroup("Daftar Database",Choice.EXCLUSIVE); for(int i = 0; i < alldbs.length; i++) dt.append(alldbs[i],null); f.append(dt); // Fungsi untuk hapus database public void hapusdb() try // Ambil informasi database yang dipilih untuk dihapus String dbname = dt.getstring(dt.getselectedindex()); dt.delete(dt.getselectedindex()); RecordStore.deleteRecordStore(dbName); tck.setstring("database " + dbname + " telah dihapus"); catch(recordstorenotfoundexception e) catch(recordstoreexception e) tck.setstring("ada kesalahan pada Record Store");

66 6 6 6 0 4 6 0 4 6 // Fungsi untuk keluar public void keluar() this.destroyapp(true); // Ini adalah fungsi pada interface CommandListener // yang harus diimplementasikan public void commandaction(command c, Displayable d) String lbl = c.getlabel(); if(lbl.equals("keluar")) keluar(); else if(lbl.equals("hapus")) hapusdb(); public void pauseapp() // Do Nothing public void destroyapp(boolean unconditional) notifydestroyed(); Untuk proses pada WTK, tambahkan pada Setting MIDlets semua nama class yang terkait pada Manajemen RMS ini. Beri nama MIDlet dengan nama Database.

Kompilasi dan jalankan. Kemudian cobalah anda menambahkan data / menghapus RMS yang telah anda buat. Perhatikan, bahwa disini tiap class dibuat secara berbeda, tetapi mengambil file data yang sama. Pada Emulator file database disimpan pada direktori [ Direktori WTK ]/appdb berekstensi *.db Selamat mencoba!!!!