MODUL PRAKTIKUM KOMPUTASI BERGERAK
D3 Manajemen Informatika Fakultas Teknik Universitas Trunojoyo
[halaman ini sengaja dikosongkan]
Biografi Penulis
Muhammad Fuad, S.Kom Penulis lahir dan menyelesaikan sekolah hingga SLTA di kota Surabaya. Melanjutkan pendidikan di Teknik Informatika UNITOM O Surabaya dengan bidang minat Ko mputasi. Sekarang penulis bekerja sebagai dosen Manajemen Info rmatika Un iversitas Trunojoyo Madura. Mata kuliah yang pernah diampuh oleh penulis di antaranya adalah Basis Data, Pemrograman Berorientasi Obyek, Ko mputasi Bergerak.
ii
75
Daftar Pustaka
· ·
Tremblett P., “Instant Wireless Java with J2M E”, McGraw-Hill/Osborne, 2002 Rischpater, Ray, “Beginning Java M E Platform”, APRESS, 2008
Kata Pengantar
Bismillaahirrohmaanirrohiim, Alhamdulillah, modul Ko mputasi Bergerak dapat diselesaikan. Modul ini berisi dua belas bab. Modul Ko mputasi Bergerak memberikan tuntunan praktis bagaimana membangun aplikasi java yang dapat dijalankan dalam perangkat bergerak atau yang biasa disebut sebagai MIDlet. Semoga modul Ko mputasi Bergerak dapat menyediakan tutorial yang bermanfaat bagi prakt ikan yang ingin menekuni pemrograman Java dalam lingkungan perangkat bergerak.
Bangkalan, 19 Januari 2010
Penulis
74
iii
[halaman ini sengaja dikosongkan]
Tugas Akhir
Buatlah MIDlet untuk mengakses data dari server. Sistem informasi yang dibangun di server harus berbeda antar mahasiswa.
iv
73
int b; StringBuffer sb = new StringBuffer(); while ( (b = is.read()) != -1) { sb.append((char)b); } socket.close(); siData.setText(sb.toString()); display.setCurrent(outputForm);
5.
Tujuan Umum Mahasiswa mampu memahami teknologi Java Micro Ed ition kemudian mengembangkan aplikasi M IDlet untuk keperluan ko mputasi
Build dan Run untuk menguji MIDlet.
Gambar 12. 2 Konfirmasi akses network
Gambar 12. 3 Menampilkan info dari server
Tug as Buatlah MIDlet dengan kemampuan mengakses web server untuk melakukan request harga barang dengan memasukkan nama barang. Untuk database dapat menggunakan DBMS MySQL. Untuk server programming dapat menggunakan PHP atau JSP atau Servlet. Database hanya terdiri dari satu tabel saja dan desain tabel diserahkan ke Anda.
72
v
[halaman ini sengaja dikosongkan]
!"); socket.close(); } catch (IOException a) { System.out.println("exception saat menulis data ke ServerSocket: " + a); a.printStackTrace(); }
4.
Simpan file, laku kan ko mpilasi dan jalankan file sehingga akan tampil seperti di bawah in i.
Gambar 12. 1 Meng aktifkan program server
Pada bagian kedua, kita akan membangun MIDlet dengan kemampuan berko munikasi lewat network. 1. Dengan menggunakan J2M E WTK, buat project baru dengan nama Pertemuan12 dengan CobaStreamConnection sebagai nama class MIDlet. 2. Siapkan dua variabel bertipe St ring untuk menyimpan informasi tentang host dan port dari server yang akan dihubungi. Informasi d idapatkan dari seting User Defined pada J2M E WTK. String host = getAppProperty("HOST"); String port = getAppProperty("DAYTIME_PORT"); dayTimeURL = PROTOCOL + "://" + host + ":" + port;
3.
Siapkan objek StreamConnection untuk membu ka koneksi menuju server dengan parameter host dan port dalam dayTimeURL. Siapkan objek InputStream untuk menampung aliran data dari server hasil pemanggilan method openInputStream.
socket = (StreamConnection)Connector.open(dayTimeURL,Connector.READ,t rue); is = socket.openInputStream();
4.
vi
Data dari InputStream berupa susunan integer diubah menjadi karakter dan disusun kembali dalam StringBuffer. Selanjutnya hasil konversi String Buffer ke St ring ditamp ilkan pada Form melalui ko mponen StringItem.
71
Tujuan Khusus
Connector menghasilkan ob jek Connection yang di antara jenisnya adalah StreamConnection yang memiliki kemampuan untuk menangani aliran data masuk dengan InputStream dan aliran data keluar dengan OutputStream. 1. Praktikum Pada pertemuan ke-11, kita akan membangun MIDlet dengan kemampuan untuk berkomunikasi melalui jaringan ko mputer (network) dengan memanfaat kan paket javax.microedition.io. Pada bagian pertama, perlu d ibangun class DayTimeServer yang bertindak sebagai server yang menyediakan informasi tentang date/time saat ini. ServerSocket adalah class yang digunakan untuk melayani permintaan melalu i network. Method accept dari class ServerSocket bertugas menerima koneksi dan menghasilkan objek Socket sebagai titik akhir ko munikasi antar mesin. 1. Buat file DayTimeServer. 2. Siapkan objek ServerSocket, Socket dan DataOutputStream. ServerSocket serverSocket = null; Socket socket; DataOutputStream dosData; try { serverSocket = new ServerSocket(dayTimePort); System.out.println("Membuka ServerSocket pada port " + dayTimePort); } catch (IOException a) { System.out.println("exception saat membuka ServerSocket: " + a); a.printStackTrace(); System.exit(0); }
3.
Mampu menggunakan Java 2 M icro Edit ion Wireless Tool Kit untuk membuat project ap likasi MIDlet 2. Mampu menambahkan konten dinamis pada MIDlet 3. Mampu menambahkan kemampuan interaksi user dengan MIDlet 4. Membangun aplikasi MIDlet untuk ko mputasi dengan memanfaat kan bilangan acak 5. Memanfaatkan M IDP API untuk pembuatan tampilan antar muka pengguna 6. Mampu menggunakan ko mponen antar muka tingkat mah ir untuk mendesain tampilan antar mu ka pengguna 7. Menggunakan grafik dengan komponen antar muka t ingkat rendah 8. Melengkapi MIDlet dengan notifikasi 9. Menyisipkan Pesan Berjalan pada MIDlet 10. Mengolah Data Persisten 11. Mampu Mengolah Data Persisten 12. Mengakses aplikasi internet dengan MIDlet
Menyiapkan data date/time dan mengirimnya lewat OutputStream.
while (true) { try { socket = serverSocket.accept(); System.out.println(socket.toString() + " siap menerima request ... "); dosData = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); String dateString = new Date().toString(); dosData.write(dateString.getBytes(), 0, dateString.length()); dosData.flush(); System.out.println("Data date/time telah siap diakses
70
vii
[halaman ini sengaja dikosongkan]
Modul XII Memulai Pe mrograman Jaringan Sede rhana dengan MIDlet Tujuan : v Mahasiswa mampu mengakses aplikasi internet dengan MIDlet
Tug as Pendahuluan 1. Tuliskan properti dan method dari StringBuffer! 2. Tulisan cara mengkonversi dari char ke String! 3. Tuliskan fungsi dari setText dan getText dari StringItem!
Dasar Teori Connector adalah sebuah class yang bertindak sebagai pabrik untuk menghasilkan objek Connection. Proses pembuatan Connection membutuhkan beberapa informasi dengan format {scheme}:[{target}][{params}]. Scheme mengacu pada protokol seperti socket dan http. Target berisi network address seperti localhost atau 127.0.0.1 yang mungkin juga dilengkapi dengan informasi port seperti port 80 untuk http dan port 1024 untuk socket (sebagai catatan port 1024 ke bawah digunakan oleh sistem operasi). Parameter boleh dilengkapi dengan satu atau beberapa persamaan seperti type=a atau page=2. Method open digunakan untuk membuka koneksi dengan spesifikasi seperti di bawah ini. In formasi schema, target dan parameter d itampung dalam parameter name bertipe String; parameter mode mengatur hak akses seperti READ, WRITE atau READ_WRITE; parameter timeouts untuk memberi tanda bahwa timeout exception dibutuhkan dalam proses pemanggilan ini. public static Connection open(String name, int mode, boolean timeouts) throws IOException
viii
69
[halaman ini sengaja dikosongkan]
Daftar Isi Modul I : Memu lai Pemrograman Ko mputasi Bergerak .....................................15 Modul II : Melengkapi MIDlet dengan Konten Dinamis .....................................19 Modul III : enggunakan Co mmand dan Co mmandListener..................................23 Modul IV : Ko mputasi dengan Bilangan Acak........................................................27 Modul V : Ko mponen Antar Muka Screen .............................................................31 Modul VI : Ko mponen Antar Muka Item .................................................................35 Modul VII : Grafik dalam MIDlet ...............................................................................39 Modul VIII : Menambahkan Notifikasi........................................................................45 Modul IX : Menyisipkan Tu lisan Berjalan ...............................................................49 Modul X : Mengolah Data Persisten ........................................................................53 Modul XI : Memanfaatkan RecordStore untuk Portable Log................................61 Modul XII : Memu lai Pemrograman Jaringan Sederhana dengan MIDlet ...........69 Tugas Akhir …...................................................................................................................73 Daftar Pustaka.....................................................................................................................74 Biografi Penulis ..................................................................................................................75
68
ix
[halaman ini sengaja dikosongkan]
3.
Jika record mengandung potongan string yang dicari maka method matches akan menghasilkan nilai true.
public boolean matche s(byte[] candidat e) 4. Implementasi method matches untuk mencari apakah suatu record mengandung karakter tertentu, menggunakan method indexOf dari class String. public boolean matches(byte[] suspect) { String string = new String(suspect).toLowerCase(); if (string!= null && string.indexOf(search) != -1) return true; else return false; }
Gambar 11. 7 Menu Cari
Gambar 11. 8 Menampilkan hasil pencari an
Tug as Sempurnakan MIDlet dari project Pertemuan11 sehingga memiliki kemampuan navigasi record, manajemen record, pengurutan data, dan pencarian data. Data yang ditamp ilkan adalah record Bu kuTelepon dengan nama yang diawali dengan karakter-karakter yang dimasukkan melalu i Text Field dalam form pencarian.
x
67
2.
Pengurutan record dalam Record Enumeration ditangani oleh class yang mengimp lementasikan interface RecordCo mparator dan mengoverride abstract method compare.
public int compare(byte[] rec1, byte[] rec2) 3.
Implementasi dari method in i memanfaatkan method compareTo dari class String.
public int compare(byte[] rec1, byte[] rec2) { String string1 = new String(rec1); String string2 = new String(rec2); int hasilPerbandingan = string1.compareTo(string2); int hasil = 0; if (hasilPerbandingan == 0) { hasil = RecordComparator.EQUIVALENT; } else if (hasilPerbandingan < 0) { hasil = RecordComparator.PRECEDES; } else if (hasilPerbandingan > 0) { hasil = RecordComparator.FOLLOWS; } return hasil; }
4.
1.
Method compareTo menghasilkan nilai bertipe integer dengan tiga kemungkinan, yaitu nol (EQUIVA LENT), kurang dari nol dan lebih dari nol. Untuk pengurutan data secara ascending, nilai integer kurang dari nol diset sama dengan field PRECEDES; nilai integer lebih besar dari nol diset sama dengan field FOLLOWS. Menggunakan RecordFilter: Pencarian record berdasarkan nilai yang terdapat pada kolo m tertentu dapat dilakukan dengan memanfaatkan instance dari class yang mengimp lementasikan interface RecordFilter.
filter = new Filterku(ygDicari); comparator = new Comparatorku(); recordEnumeration = recordStore.enumerateRecords( filter, comparator, boolUpdate);
2.
Method yang perlu dioverride saat mengimp lementasikan interface RecordFilter adalah matches dengan nilai balik boolean. Method ini berfungsi membandingkan antara suatu record dengan potongan string yang mungkin ada di dalam record tersebut.
66
Daftar Gambar
Gambar 1. 1 Mengakses KToolbar..................................................................................16 Gambar 1. 2 Membuat project baru.................................................................................16 Gambar 1. 3 Memilih target platform .............................................................................16 Gambar 1. 4 Laporan hasil pembuatan project..............................................................17 Gambar 1. 5 Tampilan MIDlet .........................................................................................17 Gambar 2. 1 Info penanggalan di console......................................................................19 Gambar 2. 2 Info penanggalan di MIDlet ......................................................................20 Gambar 2. 3 Calendar d i console.....................................................................................20 Gambar 2. 4 Calendar d i MIDlet .....................................................................................21 Gambar 2. 5 Modifikasi aplikasi dengan Calendar.......................................................21 Gambar 2. 6 Modifikasi pertama pada MIDlet .............................................................21 Gambar 2. 7 Modifikasi kedua pada MIDlet .................................................................21 Gambar 3. 1 Co mmand pada MIDlet ..............................................................................25 Gambar 4. 1 Menguji Random di console......................................................................28 Gambar 4. 2 Menguji Random di M IDlet ......................................................................30 Gambar 5. 1 Menu di MIDlet ...........................................................................................33 Gambar 5. 2 Text Bo x di M IDlet ......................................................................................33 Gambar 5. 3 Form di MIDlet ............................................................................................34 Gambar 5. 4 List di M IDlet ..............................................................................................34 Gambar 6. 1 Menu pada MIDlet ......................................................................................37 Gambar 6. 2 DateField di M IDlet ....................................................................................37 Gambar 6. 3 Memilih tanggal...........................................................................................37 Gambar 6. 4 Hasil pemilihan DateField .........................................................................37 Gambar 6. 5 Pemilihan DateField ditamp ilkan di form utama...................................38 Gambar 6. 6 Gauge di MIDlet ..........................................................................................38 Gambar 6. 7 Gauge interaktif ...........................................................................................38 Gambar 6. 8 Nilai dari gauge ditamp ilkan di form utama...........................................38 Gambar 7. 1 Mengatur seting project..............................................................................40 Gambar 7. 2 MIDlet dengan icon ....................................................................................40 Gambar 7. 3 Mencoba ChoiceGro up...............................................................................41 Gambar 7. 4 Mencoba Canvas .........................................................................................42 Gambar 7. 5 Menambah MIDlet ......................................................................................42
xi
Gambar 7. 6 Project dengan dua MIDlet........................................................................ 43 Gambar 7. 7 Menamp ilkan grafik ................................................................................... 43 Gambar 7. 8 Image dalam M IDlet .................................................................................. 43
8.
Proses edit dan hapus menggunakan method yang sama dengan project Pertemuan10, yaitu setRecord dan deleteRecord. Yang men jadi perhatian di sini adalah nilai indeks yang dikirim sebagai parameter dari dua method tersebut.
Gambar 8. 1 Splash screen dengan Alert ....................................................................... 46 Gambar 8. 2 Beberapa tipe Alert ..................................................................................... 47 Gambar 8. 3 Alarm pada Alert ......................................................................................... 47 Gambar 9. 1 Ticker pada MIDlet .................................................................................... 49 Gambar 9. 2 Ticker di form pertama .............................................................................. 50 Gambar 9. 3 Ticker di form kedua .................................................................................. 50 Gambar 9. 4 Menu Next .................................................................................................... 50 Gambar 9. 5 Menu Previous............................................................................................. 50 Gambar 9. 6 ChoiceGroup dan Ticker pada form pertama ......................................... 51 Gambar 9. 7 Ticker dengan pesan hasil pilihan dari form pertama........................... 51 Gambar 9. 8 Ticker dengan pesan................................................................................... 51 Gambar 10. 1 Membuka RecordStore ............................................................................ 56 Gambar 10. 2 Membaca record........................................................................................ 56 Gambar 10. 3 Menambah record ..................................................................................... 56 Gambar 10. 4 Menampilkan record ................................................................................ 56 Gambar 10. 5 Record pada StringItem........................................................................... 57 Gambar 10. 6 Memilih record Pertama .......................................................................... 57 Gambar 10. 7 Menampilkan record pertama ................................................................. 57 Gambar 10. 8 Memilih menu Berikutnya ...................................................................... 57 Gambar 10. 9 Menampilkan record terakhir ................................................................. 58 Gambar 10. 10 Memilih menu Sebelu mnya.................................................................. 58 Gambar 10. 11 Menampilkan record sebelumnya........................................................ 58 Gambar 10. 12 Memilih menu Baru ............................................................................... 58 Gambar 10. 13 Menampilkan record berikutnya.......................................................... 59 Gambar 10. 14 Memilih menu Terakh ir......................................................................... 59 Gambar 10. 15 Mengosongkan kotak isian ................................................................... 59 Gambar 10. 16 Mengisi data isian baru .......................................................................... 59 Gambar 10. 17 Record baru berhasil d itambahkan ...................................................... 60 Gambar 10. 18 Memilih menu Ed it................................................................................. 60 Gambar 10. 19 Mengedit record ...................................................................................... 60 Gambar 10. 20 Record berhasil d iedit ............................................................................ 60 Gambar 11. 1 List sebagai menu ..................................................................................... 61 Gambar 11. 2 Form pencarian.......................................................................................... 62 Gambar 11. 3 Menu navigasi ........................................................................................... 62 Gambar 11. 4 Menu edit ................................................................................................... 64
xii
Gambar 11. 6 Menu hapus 9.
Agar nilai indeks atau recordId tidak berubah maka data ini dapat disimpan bersama dengan data nama dan telepon ke dalam ob jek BukuTelepon.
public class BukuTelepon { private String nama, telp; private int recordId; public BukuTelepon(int c, String a, String b) { this.recordId = c; this.nama = a; this.telp = b; } //method setXXX(), getXXX(), toString() }
1.
Menggunakan RecordCo mparator: MIDlet yang telah menggunakan RecordEnumeration tanpa dilengkapi dengan instance dari RecordCo mparator dalam proses pengolahan record dari RecordStore BukuTelepon akan menampilkan data nama dalam urutan terbalik atau descending.
65
6.
Halaman pencarian data BukuTelepon berisi menu manajemen data yang meliputi Edit Nama, Edit Telp, dan Hapus.
Gambar 11. 5 Text Bo x untuk mengedit .........................................................................64 Gambar 11. 6 Menu hapus................................................................................................65 Gambar 11. 7 Menu Cari...................................................................................................67 Gambar 11. 8 Menampilkan hasil pencarian .................................................................67 Gambar 12. 1 Mengaktifkan program server.................................................................71 Gambar 12. 2 Konfirmasi akses network .......................................................................72 Gambar 12. 3 Menampilkan in fo dari server.................................................................72
Gambar 11. 4 Menu edi t 7.
Proses edit dari opsi Edit Nama dan Ed it Telp melibatkan halaman lain yaitu, Text Bo x untuk data nama dan TextBo x untuk data telp. Jika menu Ed it Nama diakses maka akan membu ka halaman TextBo x dengan judul Nama dan dilengkapi dengan dua Command yaitu OK untuk mengeksekusi perubahan data nama dan Co mmand Kembali untuk menamp ilkan halaman List berisi opsi Cari dan Tambah. Halaman TextBo x Nama dan Telp akan digunakan kembali saat opsi Tambah diakses.
Gambar 11. 5 TextB ox untuk mengedit
64
xiii
[halaman ini sengaja dikosongkan]
diaktifkan. Parameter ketiga mengatur kemutakhiran data, jika diisi t rue maka RecordEnu merator akan selalu mengupdate data sesuai dengan RecordStore. Pembacaan record dari Record Enumeration melibatkan beberapa method, di antaranya adalah method hasNext Element untuk memeriksa kondisi keberadaan elemen dalam arah next; method next RecordId untuk mendapatkan recordId dari arah next. Struktur penyimpanan data seperti Vector dapat dimanfaatkan untuk pengolahan data selanjutnya. Data recordId, nama dan telp dienkapsulasi ke dalam objek Bu kuTelepon dan selanjutnya objek ini d isimpan ke dalam Vector dengan method addElement. Pada proses membaca data dari Vector, elemen Vector d idapatkan dengan memanggil method elementAt. Data diperoleh dari elemen in i dengan mengubah tipenya dengan casting ke class BukuTelepon. recordEnumeration = recordStore.enumerateRecords( filter, comparator, boolUpdate); vectorBT = new Vector(); byte [] record = new byte[100]; ByteArrayInputStream baisData = new ByteArrayInputStream(record); DataInputStream disData = new DataInputStream(baisData); String nama="", telp=""; while (recordEnumeration.hasNextElement()) { int recordId = recordEnumeration.nextRecordId(); recordStore.getRecord(recordId, record, 0); nama = disData.readUTF(); telp = disData.readUTF(); baisData.reset(); vectorBT.addElement(new BukuTelepon(recordId, nama, telp)); } public BukuTelepon forwardRS() { String data = null; if ( indeksBT <= vectorBT.size()-1 ) { indeksBT++; } if (indeksBT > vectorBT.size()-1) { indeksBT = 0; } return( (BukuTelepon)vectorBT.elementAt(indeksBT) ); }
xiv
63
3.
Eksekusi pada opsi Cari akan menampilkan halaman baru berupa Form berisi StringItem yang akan menampilkan nama dan nomor telepon, dan berisi Text Field untuk pencarian record tertentu.
Modul I Memulai Pe mrograman Komputasi Bergerak
Tujuan : v Mampu menggunakan Java 2 Micro Edit ion Wireless Tool Kit untuk membuat project ap likasi MIDlet
Gambar 11. 2 Form pencarian 4.
Halaman pencarian in i berisi menu untuk navigasi dan manajemen record. Navigasi terdiri dari dua menu yaitu Sebelu mnya dan Berikutnya. Dua menu navigasi ini akan menamp ilkan data dari RecordSource BukuTelepon yang bersifat sirkular, record selanjutnya dari record terakhir adalah record pertama. Record sebelu mnya dari record pertama adalah record terakh ir.
Gambar 11. 3 Menu navigasi 5.
Tug as Pendahuluan 1. Apa yang dimaksud dengan kompilasi? 2. Apa yang dimaksud dengan interpretasi? 3. Tuliskan macam-macam visibilitas dalam class!
Dasar Teori Pemrograman ko mputasi bergerak memanfaat kan teknologi Java 2 Micro Ed ition (J2M E) untuk menghasilkan aplikasi dengan kemampuan ko mputasi yang dapat dijalan kan pada perangkat bergerak. Aplikasi in i berjalan di atas lapisan Mobile Info rmation Device Profile (MIDP) dan disebut MIDlet. MIDlet adalah sebuat class Java berakses public yang merupakan turunan abstract class javax.microedit ion.mid let.MIDlet dengan mengoverride method pauseApp, startApp, dan destroyApp. MIDlet sebagai class utama dapat bekerja sama dengan class lain beserta sumber daya (image, data dan lain-lain) yang dipaket dalam file Java Archieve (JAR). MIDlet dikembangkan dengan menggunakan Java Development Kit dan J2M E W ireless Tool Kit (WTK). Ada beberapa tahapan yang dibutuhkan dalam proses pengembangan MIDlet. Tahap pertama adalah menulis kode dalam file sumber (.java). Tahap kedua adalah melakukan ko mpilasi untuk mengubah file java men jadi file class. Tahap ketiga adalah melakukan preverifikasi untuk memod ifikasi file class agar dapat berjalan di emu lator. Emulator adalah perangkat lunak untuk mensimu lasikan jalannya MIDlet di perangkat ko mputasi ukuran kecil seperti hand phone.
Fungsi navigasi dibangun dengan memanfaatkan Record Enumeration yang diperoleh dengan memanggil method enumerateRecords. Parameter pertama dari method ini boleh diisi dengan RecordFilter, jika diisi null maka fungsi seleksi tidak d iakt ifkan. Parameter kedua boleh d iisi dengan RecordCo mparator, jika diisi null maka fungsi pengurutan tidak
62
15
Praktikum Ikutilah langkah-langkah berikut in i untuk membuat sebuah MIDlet yang akan menampilkan tulisan “Salam dari Universitas Trunojoyo Madura” pada emu lator. 1. Jalankan program Ktoolbar dari J2M E WTK.
Modul XI Memanfaatkan RecordStore untuk Portable Log Tujuan : v Mahasiswa mampu mengolah data persisten
Gambar 1. 1 Mengakses KTool bar 2. Pilih New Project dan isikan Pertemuan1 untuk Project Name dan HelloUTM untuk MIDlet Class Name.
Gambar 1. 2 Membuat project baru 3. Saat jendela Settings for project “Pertemuan1” terbuka, pilih OK untuk menyetujui seting yang telah ditentukan secara default.
Tug as Pendahuluan 1. Tuliskan properti dari RecordCo mparator! 2. Tuliskan properti dari RecordFilter! 3. Tuliskan method dari Vector yang digunakan untuk menambah dan membaca record !
Dasar Teori Paket javax.microedit ion.rms menyediakan tidak hanya class RecordStore dan lima class Exception, melainkan juga melengkapi dengan empat interface yaitu Record Enumeration, Record Co mparator, RecordFilter dan Record Listener. Interface RecordEnu merat ion bertindak sebagai enumerator bagi RecordStore, menjaga urutan recordId dari setiap record dalam RecordStore. Untuk melakukan pengurutan record, gunakan interface RecordCo mparator yang ditambahkan pada enumerator. Untuk melakukan pencarian record tertentu, gunakan interface RecordFilter bersama enu merator. Praktikum Pada pertemuan ke-11 ini, kita akan memanfaatkan paket javax.microedition.rms untuk membuat aplikasi MIDlet sebagai portable log yang akan mencatat data telepon sebagai penyempurna dari p roject Pertemuan10. Menggunakan interface RecordEnu merat ion: 1. Jalankan J2M E WTK dan buat project baru dengan nama Pertemuan11 dengan CobaRMS sebagai nama class MIDlet. 2. MIDlet CobaRMS menamp ilkan halaman pertama berupa List dengan dua opsi yaitu: Cari dan Tambah, List ini memiliki tipe IMPLICIT. Selain menamp ilkan dua opsi di atas, List juga berisi sebuah tombol Exit .
Gambar 1. 3 Memilih target pl atform
16
Gambar 11. 1 List sebag ai menu
61
4. Jendela J2M E WTK menampilkan pesan tentang lokasi untuk menyimpan file kode sumber (source code) di direktori src, file sumber daya (resource) di d irektori res dan file pustaka (library) di direktori li b.
Gambar 10. 17 Record baru berhasil di tambahkan
Gambar 1. 4 Laporan hasil pembuatan project
Gambar 10. 18 Memilih menu Edit
5. Gunakan sembarang editor teks untuk menuliskan kode sumber bahasa java. Simpan file dengan nama Hello UTM.java. import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class HelloUTM extends MIDlet { public HelloUTM() { } public void pauseApp() {}
Gambar 10. 19 Mengedit record
public void startApp() { Display.getDisplay(this).setCurrent( new Alert("Salam dari Universitas Trunojoyo Madura"); }
Gambar 10. 20 Record berhasil diedit
public void destroyApp(boolean kondisi) {} }
6. Dengan menggunakan J2ME WTK, lakukan Buil d yang merupakan ko mbinasi langkah ko mp ilasi dan preverifikasi. Pilih Run untuk menjalankan MIDlet dengan emulator.
Gambar 1. 5 Tampilan MIDlet
60
17
Tug as 1.
2.
3.
4.
Beri tanda ko mentar pada kedua baris import. Ada berapa ju mlah error yang terjadi? Apa makna tanda bintang (*) pada kedua baris import? Gantilah tanda bintang (*) dengan suatu cara lain agar program tetap dapat berjalan dengan baik! Hilangkan kata kunci public yang tertulis sebelum kata kunci class dalam file kode sumber HelloUTM .java kemudian laku kan Build! Apakah ada error yang terjad i? Apakah MIDlet berjalan dengan baik sebagaimana pada hasil dari Praktiku m langkah ke-6 di atas? Tuliskan kesimpulan Anda berkaitan dengan uji coba ke-2 in i! Gantilah kata kunci MIDlet setelah kata kunci extends dengan midlet kemudian Build! Ada berapa error yang terbit? Tuliskan kesimpu lan Anda mengenai hal ini! Beri tanda ko mentar agar bagian constructor dari class HelloUTM tidak dieksekusi kemud ian Bu ild! Apakah MIDlet tetap berjalan dengan baik? Beri tanda ko mentar pada method pauseApp atau destroyApp kemudian Build? Apakah J2M E WTK menampilkan pesan kesalahan? Bandingkan kedua percobaan pada langkah keempat ini dan tuliskan kesimpulan Anda!
18
Gambar 10. 13 Menampilkan record berikutnya
Gambar 10. 14 Memilih menu Terakhir
Gambar 10. 15 Mengosongkan kotak isian
Gambar 10. 16 Mengisi data isian baru
59
Modul II Melengkapi MIDlet dengan Konten Dinamis
Tujuan : v Mahasiswa mampu menambahkan konten dinamis pada MIDlet
Gambar 10. 9 Menampilkan record terakhir
Gambar 10. 10 Memilih menu Sebelumnya
Tug as Pendahuluan 1. Apa yang dimaksud dengan paket atau package? 2. Tuliskan properti dari class Date dan Calendar? 3. Tuliskan properti atau method dari Date yang telah obsolete?
Dasar Teori Package atau paket java.util pada J2SE menyediakan beberapa class dengan fungsi layanan tertentu. Di antara layanan yang diberikan adalah menyajikan data tanggal dan waktu. Layanan ini d isediakan oleh dua class Date dan Calendar. J2M E melalui Mobile Informat ion Device Pro file mendukung pengembangan konten dinamis dari MIDlet dengan menyediakan class Date dan Calendar.
Gambar 10. 11 Menampilkan record sebelumnya
Gambar 10. 12 Memilih menu Baru
Praktikum Menggunakan class Date pada aplikasi J2SE: 1. Buat class TanggalHariIni dan lengkapi dengan main method. 2. Tambahkan paket java.util untuk mengakses class Date. import java.util.Date;
3. Cetak data tanggal ke layar dengan memanggil konstruktor class Date. System.out.println("Tanggal hari ini: " + new Date());
4.
Simpan file TanggalHariIni kemud ian lakukan ko mpilasi dan jalankan. Gambar 2. 1 Info penanggalan di console Menggunakan class Date pada MIDlet:
58
19
1.
Dengan menggunakan J2ME WTK, buat project Pertemuan2 dan lengkapi dengan class MIDlet dengan nama CobaDate. 2. Tambahkan defin isi method pauseApp, startApp dan destroyApp dalam body class CobaDate. 3. Boleh menambahkan paket javax.microedition.midlet dan javax.microedition.lcdui dan paket java.util untuk dapat mengakses class MIDlet, Display dan Date. 4. Pada method startApp, tambahkan kode untuk menampilkan pesan/notifikasi dengan class Alert. Letakkan konstruktor class Date sebagai parameter dari konstruktor class Alert. Display.getDisplay(this).setCurrent(Alert(/*letakkan
Modifikasilah project Pertemuan10 untuk menambahkan kemampuan untuk mengedit dan menghapus data pada RecordStore. Lengkapi MIDlet dengan kemampuan untuk mengosongkan TextField dan navigasi pada record. Untuk fitur navigasi, diperkenankan menggunakan struktur data Vector guna menampung data dari RecordStore, diperkenankan menggunakan perulangan dengan for untuk loop dari record pertama sampai dengan record terakhir.
konstruktor class Date di sini!*/));
5.
Simpan file CobaDate.java. Kemudian lakukan Build dan Run untuk menguji MIDlet dengan emulator.
Gambar 2. 2 Info penanggalan di MIDlet
Gambar 10. 5 Record pada StringItem
Gambar 10. 6 Memilih record Pertama
Gambar 10. 7 Menampilkan record pertama
Gambar 10. 8 Memilih menu Berikutnya
Menggunakan class Calendar pada aplikasi J2SE: Pada class TanggalHariIni, ganti konstruktor class Date dengan menggunakan pemanggilan method statik getInstance dari class Calendar. System.out.println("Tanggal hari ini: " + 1.
Calendar.getInstance());
2.
Dengan demikian perlu dilaku kan penyesuaian pada baris perintah import dari paket java.util. import java.util.Calendar;
3.
Simpan file CobaData.java. Selanjutnya laku kan ko mp ilasi dan jalan kan class TanggalHariIni.
Gambar 2. 3 Calendar di console
20
57
public void setRecord(int recordId, byte[] newData, int offset, int numBytes) throws RecordStoreNotOpenException, InvalidRecordIDException, RecordStoreException, RecordStoreFullException
1. 2. 3.
11. Record dapat dihapus dengan memanggil method deleteRecord.
4.
public void deleteRecord(int recordId) throws RecordStoreNotOpenException, InvalidRecordIDException, RecordStoreException
12. MIDlet di atas telah memiliki kemampuan untuk membaca dan menulis data pada RecordStore. Simpan kemudian laku kan Bu ild dan Run untuk menguji MIDlet.
Menggunakan class Calendar pada MIDlet: Buka p roject Pertemuan2 pada J2M E WTK. Buka file CobaDate.java yang terletak di dalam direktori src, menggunakan editor teks. Ed it kode dalam file CobaDate.java. Gant ikan konstruktor class Date dengan pemanggilan method static getInstance dari class Calendar. Simpan file CobaDate.java yang telah diedit kemudian lakukan Build dan Run untuk menguji M IDlet.
Gambar 2. 4 Calendar di MIDlet Tug as 1.
Perhatikan tamp ilan pada saat aplikasi J2SE yang menggunakan class Calendar dijalankan. Modifikasilah kode TanggalHariIni.java agar class TanggalHariIni hanya menampilkan data tanggal dalam format
<nomor_bulan>-
Gambar 2. 5 Modi fikasi aplikasi deng an Calendar 2. Gambar 10. 1 Membuka RecordStore
Gambar 10. 2 Membaca record
Perhatikan tamp ilan M IDlet CobaDate saat dijalan kan. Modifikasilah kode CobaDate.java agar tampilan tanggal mengikuti format seperti pada soal nomor dua.
Gambar 2. 6 Modi fikasi pertama pada MIDlet 3.
Dari hasil jawaban soal nomor dua, lakukan pengembangan dengan menuliskan data bulan dengan menggunakan nama bulan.
Gambar 2. 7 Modi fikasi kedua pada MIDlet
Gambar 10. 3 Menambah record
Gambar 10. 4 Menampilkan record
Tug as
56
21
[halaman ini sengaja dikosongkan]
berturut-turut adalah nilai indeks awal dari array t ipe byte dan berikutnya adalah ju mlah byte yang digunakan. Untuk menggunakan semua byte, gunakan field length dari array tipe byte sebagai parameter ketiga. String nama = tfNama.getString(); String telp = tfTelp.getString(); ByteArrayOutputStream baosData = new ByteArrayOutputStream(); DataOutputStream dosData = new DataOutputStream(baosData); dosData.writeUTF(nama); dosData.writeUTF(telp); dosData.flush(); byte [] record = baosData.toByteArray(); recordStore.addRecord(record, 0, record.length);
8.
Record dapat ditamp ilkan dengan memanggil method getRecord.
public int getRecord(int recordId, byte[] buffer, int offset) throws RecordStoreNotOpenException, InvalidRecordIDException,
RecordStoreException
9.
Membaca dan menampilkan data dari RecordStore menggunakan alur yang merupakan kebalikan dari proses menulis ke RecordStore. Method getRecord menghasilkan data yang disimpan dalam array satu dimensi bertipe array. Array ini harus sudah terhubung dengan instance dari ByteArrayInputStream yang harus dihubungkan juga dengan instance dari DataInputStream. Berikutnya data dibaca dengan method readUTF. Proses pembacaan dilakukan mulai record pertama dengan id 1 hingga record terakhir dengan id yang didapatkan dengan method getNumRecords.
byte [] record = new byte[100]; ByteArrayInputStream baisData = new ByteArrayInputStream(record); DataInputStream disData = new DataInputStream(baisData); siHasil.setText("\n"); for (int a=0; a
10. Record dapat diedit dengan memanggil method setRecord.
22
55
Praktikum Pada pertemuan ke-10, kita akan menggunakan RecordStore untuk melakukan manajemen data dengan studi kasus Buku Telepon. MIDlet yang dibangun memiliki kemampuan untuk menyimpan data berupa nama beserta nomor telepon, menamp ilkan data, mengedit data dan menghapus data. 1. Jalankan J2M E WTK dan buat project baru dengan nama Pertemuan10 dengan CobaRecordStore sebagai nama class MIDlet. 2. Tambahkan lima Co mmand pada Form mainForm, yaitu exit Co mmand, selectCommand, insertCo mmand, updateCommand, deleteCo mmand. 3. Deklarasikan instance dari class RecordStore dengan nama recordStore. 4. Lengkapi Fo rm dengan StringItem siHasil, dan dua buah TextField tfNama dan tfTelp. 5. Langkah pertama dalam berinteraksi dengan RMS adalah membuat atau membu ka RecordStore dengan memanggil openRecordStore. Hasil dari pemanggilan method ini adalah sebuah instance dari RecordStore. public static RecordStore openRecordStore( String recordStoreName, boolean createIfNecessary) throws RecordStoreException, RecordStoreFullException,
RecordStoreNotFoundException 6.
Record baru d itambahkan ke dalam RecordStore dengan memanggil method addRecord dari RecordStore.
public int addRecord(byte[] data, int offset, int numBytes) throws RecordStoreNotOpenException, RecordStoreException,
RecordStoreFullException
7.
Data disimpan dan diambil dari RecordStore dengan menggunakan array satu dimensi bertipe byte. Data bertipe String dituliskan ke dalam instance dari class DataOutputStream yang telah dihubungkan dengan instance dari class ByteArrayOutputStream. Data bertipe String didapatkan dari TextField dengan memanggil method getString. Method yang digunakan untuk menuliskan data tipe String ke DataOutputStream di antaranya adalah writeUTF. Semua data yang telah ditampung dalam DataOutputStream ditarik masuk ke dalam ByteArrayOutputStream dengan memanggil method flush. Selanjutnya data dalam ByteArrayOutputStream d iubah ke dalam array t ipe byte dengan men jalan kan method toByteArray. Array tipe byte ditambahkan ke dalam RecordStore dengan method addRecord dengan mengirimkan variabel array tipe byte sebagai parameter pertama, parameter kedua dan terakhir
54
Modul III Menggunakan Command dan CommandListener Tujuan : v Mahasiswa mampu menambahkan kemampuan interaksi user dengan MIDlet
Tug as Pendahuluan 1. Tuliskan pengertian event! 2. Tuliskan pengertian listener! 3. Tuliskan cara mengimp lementasikan interface!
Dasar Teori Untuk menambahkan kemampuan berinteraksi dengan user, J2ME menyediakan paket javax.microedition.lcdui. Class Command yang berada dalam paket ini membungkus informasi tentang nama atau label dari aksi. Sedangkan informasi mengenai aksi yang sebenarnya diletakkan dalam imp lementasi dari interface Co mmand Listener. Aplikasi dapat menangkap event dari komponen antar muka tingkat mah ir/tinggi dengan langsung mengimplementasikan interface Co mmandListener. Atau dapat juga dengan menambahkan inner class sebagai imp lementasi Co mmand Listener. Praktikum Menggunakan class Command dan mengimp lementasi interface Co mmand Listener: 1. Jalankan J2M E WTK dan buat sebuah project baru dengan nama Pertemuan3. Beri nama class MIDlet dengan CobaCo mmand. public final class CobaCommand extends MIDlet implements CommandListener { private final Command exitCommand; private final Form mainForm;
23
Modul X public CobaCommand() {
Mengolah Data Persisten
mainForm = new Form("Pertemuan3"); exitCommand = new Command("Exit", Command.EXIT, 1);
Tujuan : v Mahasiswa mampu mengolah data persisten
mainForm.addCommand(exitCommand); mainForm.setCommandListener(this); Display.getDisplay(this).setCurrent(mainForm); }
protected void startApp() {}
protected void pauseApp() {}
Tug as Pendahuluan 1. Tuliskan properti dan method dari class ByteArrayInputStream dan ByteArrayOutputStream! 2. Tuliskan properti dan method dari class DataInputStream dan DataOutputStream! 3. Jelaskan cara konversi dari ByteArrayOutputStream ke array of byte!
protected void destroyApp(boolean unconditional) {}
public void commandAction(Command c, Displayable d) { if (c == exitCommand) { destroyApp(false); notifyDestroyed(); } }
}
2.
Dasar Teori MIDP menyediakan mekanis me untuk menyimpan data secara persisten. Persisten berarti kemampuan untuk menggenggam struktur data dengan cara menyimpan data ke dalam fasilitas penyimpanan yang bersifat non-volatile seperti file sistem, atau relational database. Sifat non-volatile art inya data yang telah tersimpan tidak akan hilang walaupun listrik t idak tersedia. Fasilitas penyimpanan yang digunakan dalam J2M E d ikenal dengan Record Management System (RMS). RecordStore terdiri dari seku mpulan record yang dapat diakses oleh MIDlet Suite. Penamaan bersifat unik, case-sensitive, terdiri dari maksimal 32 karakter. Set iap record merupakan array dengan tipe byte, memiliki primary key berupa recordId dengan tipe integer. Recod pertama dalam RecordStore memiliki recordId sama dengan satu ( 1 ), berikutnya recordId akan bertambah satu ( n + 1 ). Mekanisme yang digunakan untuk mengelola RecordStore melibatkan proses membuka RecordStore dengan openRecordStore; dapat melaku kan man ipulasi record seperti menamp ilkan data dalam array tipe byte dengan getRecord, menambah dengan addRecord, mengedit dengan setRecord, menghapus dengan deleteRecord; menutup RecordStore dengan closeRecordStore.
Lakukan Build dan Run untuk menguji MIDlet.
24
53
[halaman ini sengaja dikosongkan]
Gambar 3. 1 Command pada MIDlet
Memanfaatkan inner class sebagai listener: Buka file CobaCo mmand.java dan beri tanda ko mentar pada method commandAction. 2. Ed it file CobaCo mmand.java untuk menambahkan inner class yang akan difungsikan sebagai listener. Beri nama inner class dengan CobaInnerCL. class CobaInnerCL implements CommandListener { 1.
public void commandAction(Command c, Displayable d) { if (c == exitCommand) { destroyApp(false); notifyDestroyed(); } } }
52
25
3. 4. 5.
Tambahkan deklarasi variabel bert ipe CobaInnerCL dan beri nama cobaInnerCL. Ganti variabel this dengan variabel cobaInnerCL. Simpan file CobaCo mmand.java kemudian laku kan Build dan Run untuk menguji MIDlet.
Tugas 1.
2.
3.
Buka file CobaCo mmand.java dan edit dengan memberi tanda ko mentar pada inner class CobaInnerCL. Tanda ko mentar juga diletakkan di awal baris deklarasi dan definisi variabel cobaInnerCL. Buat sebuah class baru dengan nama CobaListener dan tempatkan dalam direktori yang sama dengan direktori di mana class CobaCommand berada. Modifikasilah class CobaListener untuk mengimplementasikan interface Co mmand Listener sehingga dapat menggantikan fungsi dari inner class CobaInnerCL.
Gambar 9. 6 ChoiceGroup dan Ticker pada form pertama
Gambar 9. 7 Ticker dengan pesan hasil pilihan dari form pertama
Gambar 9. 8 Ticker dengan pesan hasil pilihan yang l ain dari form pertama
26
51
1.
2. 3.
4.
Menambahkan satu Ticker untuk beberapa Screen: Tambahkan sebuah class FormKedua yang merupakan subclass Form dan mengimp lementasikan Co mmandListener. CobaTicker berisi screen utama, screen berikutnya ditambahkan dengan memuat instance dari class FormKedua. Sehingga FormKedua harus memiliki kemampuan untuk berko munikasi dengan MIDlet CobaTicker. Setiap Form harus dapat menamp ilkan informasi tentang Form itu sendiri (Misal: “Anda sedang berada pada form ke...“). Setiap instance dari class FormKedua harus dapat berkomunikasi dengan objek Ticker dari class CobaTicker. Sehingga dengan memanfaat kan referensi dari objek Ticker yang sama, setiap Form dapat menampilkan pesan berjalan yang sama. Setiap instance dari class FormKedua harus memiliki tiga Co mmand yaitu exit Co mmand untuk keluar dari program, nextCo mmand untuk menuju ke Form berikutnya, dan previousCommand untuk kembali menampilkan Form sebelu mnya.
Gambar 9. 2 Ticker di form pertama
Gambar 9. 4 Menu Next
Gambar 9. 3 Ticker di form kedua
Gambar 9. 5 Menu Previ ous
Modul IV Komputasi dengan Bilangan Acak Tujuan : v Mahasiswa mampu memanfaatkan b ilangan acak untuk melakukan ko mputasi
Tug as Pendahuluan 1. Apa pengertian dari instance? 2. Tuliskan cara pembuatan instance! 3. Tuliskan cara penulisan konstanta di Java!
Dasar Teori Instance dari class Random digunakan untuk menghasilkan bilangan acak palsu atau pseudorandom. Jika dua instance class Random dibuat dengan menggunakan angka yang sama sebagai benih (seed) dan dengan mengerjakan urutan pekerjaan yang sama maka akan dihasilkan deret bilangan acak yang identik. Praktikum Menggunakan class Random pada aplikasi J2SE: 1. Buat class RandomGenerator. 2. Untuk dapat menggunakan class Random yang berada di dalam paket java.util, laku kan import pada paket tersebut. 3. Dalam main method buat instance dari class Random dengan nama bilanganAcak dan masukkan nilai 123 dalam konstruktor Rando m. 4. Lakukan perulangan untuk mencetak data ke layar sebanyak sepuluh kali (10 x). Set iap perulangan dikerjakan dengan memanggil method nextInt dari instance bilanganAcak.
Tug as Modifikasilah class CobaTicker sehingga pada Form pertama akan tampil dua opsi yaitu “S1 TI” dan “D3 MI”. Hasil pilihan pada Form pertama akan mengupdate tulisan berjalan yang ditamp ilkan pada semua Fo rm.
50
27
Modul IX Menyisipkan Tulisan Berjalan Tujuan : v Mahasiswa mampu menyisipkan pesan berjalan pada MIDlet
Gambar 4. 1 Menguji Random di console Menggunakan class Random pada MIDlet: Jalankan J2M E WTK dan buat project baru dengan nama Pertemuan4 dengan nama class MIDlet CobaRandom. 2. Untuk kode program dapat memodifikasi file CobaCo mmand pada Pertemuan3, sehingga didapatkan konstruktor seperti di bawah in i. public CobaRandom() {
Tug as Pendahuluan 1. Tuliskan cara menambahkan ChoiceGroup pada MIDlet! 2. Tuliskan ko mponen apa saja yang bisa memiliki Ticker!
1.
mainForm = new Form("Pertemuan4"); exitCommand
=
new
Command("Exit",
Command.EXIT,
1);
Dasar Teori Ticker adalah sebuah class yang dapat menambahkan tulisan yang berjalan secara kontinu dari kiri ke kanan Screen, d i mana pada saat yang sama Display menamp ilkan Displayabel tertentu. Ticker ditambahkan ke layar dengan memanggil method setTicker. Ticker dengan pesan yang sama dapat ditampilkan pada beberapa Screen sekaligus. Ticker juga dapat didesain untuk tampil dengan pesan yang berbeda bila Screen yang berbeda tampil.
mainForm.addCommand(exitCommand); mainForm.setCommandListener(this); Display.getDisplay(this).setCurrent(mainForm); }
3.
4.
Kode yang berfungsi untuk menghasilkan bilangan acak dapat disalin dari file RandomGenerator. Letakkan kode in i ke dalam suatu method dengan nama buatBilanganAcak. Method buatBilanganAcak berfungsi menghasilkan nilai bert ipe String yang memiliki tamp ilan yang sama dengan hasil running dari class RandomGenerator. Lakukan percobaan dengan membandingkan penggunaan variabel penampung bilangan acak. Bandingkan unjuk kerja variabel penampung bilangan acak jika menggunakan tipe String dan jika menggunakan tipe String Buffer. Perbesar ju mlah peru langan sehingga mencapai seribu kali (1000 x) dan bandingkan kembali unjuk kerja di antara dua tipe data tersebut.
28
Praktikum Pada pertemuan ke-9 in i, kita akan belajar menambahkan sebuah Ticker ke suatu Screen dan menampilkan Ticker yang sama untuk Screen yang berbeda. Menambahkan sebuah Ticker untuk sebuah Screen: 1. Jalankan J2M E WTK, dan buat project dengan nama Pertemuan9 dengan CobaTicker sebagai nama class MIDlet. 2. Pada MIDlet tambahkan sebuah Screen yang akan ditampilkan o leh Display. Anda boleh menambahkan sebuah Form sebagai Screen utama. 3. Tambahkan sebuah variabel dengan tipe Ticker. Sesuaikan pckage yang perlu diimport untuk dapat mengakses class Ticker. 4. Anda boleh menambahkan sebuah variabel String untuk menjadi parameter bagi constructor Ticker. 5. Objek Ticker dapat ditambahkan dalam method startApp dengan memanggil method setTicker dari Screen yang aktif saat itu.
Gambar 9. 1 Ticker pada MIDlet
49
[halaman ini sengaja dikosongkan]
Membangun MIDlet untuk Ko mputasi yang memanfaatkan bilangan acak: Pada bagian ini, kita akan memodifikasi class MIDlet CobaRando m untuk membuat aplikasi “Pengacak No mor Lotere”. 1. Buka file CobaRando m.java dari pro ject Pertemuan4. Modifikasilah judul mainForm men jadi “Pertemuan 4: Pengacak No mor Lotere”. 2. Tambahkan sebuah command dengan nama acakCo mmand yang memiliki label “Acak”. Jika acakCo mmand dipilih maka akan memanggil method acakNo morLotere. Method ini berfungsi menghasilkan deret bilangan acak dengan jumlah suku deret yang ditetapkan dalam konstanta JML_ BIL_A CAK seju mlah lima (5). Bilangan acak yang dihasilkan ada di dalam batasan 0 sampai dengan nilai maksimu m yang ditetapkan dalam konstanta NILAI_MAX yaitu enam puluh tiga (63). 3. Deret bilangan yang dihasilkan oleh method acakNo morLotere harus muncul di dalam mainForm. Dengan memilih command “Acak”, tamp ilan mainForm akan berisi deret bilangan baru tanpa menampilkan deret bilangan sebelumnya. 4. Algorit ma untuk membuat deret bilangan acak dalam aplikasi “Pengacak No mor Lotere” kita adalah sebagai berikut: · Buat array untuk menampung data yang mewakili kondisi apakah dalam suatu sesi pengacakan suatu bilangan telah muncul atau belum pernah muncul. Karena bilangan terbesar yang boleh muncul adalah 63 maka ju mlah elemen array ini ditentukan dalam konstanta NILAI_MAX. · Inisialisasi setiap elemen array agar bernilai false. Artinya, dalam kondisi awal belu m ada bilangan yang muncul dalam pengacakan. · Lakukan pengacakan untuk menghasilkan 5 suku dalam deret bilangan acak sesuai dengan yang ditetapkan dalam NILAI_MAX. · Dalam setiap loop pengacakan, untuk setiap bilangan acak yang dihasilkan harus berada antara 0 sampai dengan 63. · Setelah satu suku deret bilangan acak didapatkan berart i bilangan ini telah muncul dalam deret sehingga harus ditandai sebagai true. · Tampung setiap suku dari deret bilangan acak ke dalam variabel bertipe String agar dapat dicetak ke mainForm.
48
29
Gambar 8. 2 Beberapa ti pe Alert
Gambar 8. 3 Al arm pada Alert
Gambar 4. 2 Menguji Random di MIDlet
5.
Simpan file CobaRandom.java. Lakukan Bu ild dan Run untuk menguji MIDlet.
Tugas 1.
Lakukan modifikasi pada class MIDlet CobaRandom agar dapat menamp ilkan informasi sesi pengacakan.
30
47
Alert(String title, String alertText, Image alertImage, AlertType alertType) 3.
4.
Setelah Alert sampai pada posisi timeout, akan muncul sebuah instance dari class Form. Di dalam Form ini terdapat sebuah Command yang digunakan untuk keluar dari program. Simpan file CobaAlertDanAlertType. Build dan Run untuk menguji MIDlet.
Modul V Komponen Antar Muka Screen Tujuan : v Mahasiswa mampu memanfaatkan MIDP API untuk pembuatan antar mu ka pengguna
Tug as Pendahuluan 1. Tuliskan pengertian superclass dan subclass! 2. Tuliskan pengertian override berikut cara mengoverride! 3. Tuliskan fungsi dari method setCurrent!
Gambar 8. 1 S plash screen deng an Alert 5.
Lakukan percobaan dengan menampilkan berapa milisecond timout yang diberikan oleh constructor tersebut. Tampilkan besarnya timeout dalam splash screen Alert. Perhatikan, apakah MIDlet menghasilkan notifikasi suara?
Tug as Modifikasilah pro ject Pertemuan8 sehingga pada saat MIDlet dijalankan akan menamp ilkan daftar Alert berdasarkan tipe AlertType yaitu: ALARM, CONFIRMATION, ERROR, INFO, dan WARNING. Daftar Alert dibuat dengan menggunakan List tipe IMPLICIT yang berfungsi sebagai menu. Untuk menangkap menu item yang dipilih pada commandAction, gunakan field SELECT_COMMAND. Setiap tipe AlertType ditampilkan dalam dua jenis timeout yaitu: FOREVER dan 5000 millisecond.
46
Dasar Teori Class Display bertindak sebagai manager yang mengatur objek apa yang akan ditampilkan di layar. Hanya ada satu instance dari class Display untuk setiap MIDlet. Tampilan antar muka yang digunakan oleh MIDlet untuk berinteraksi dengan user termasuk kategori objek Displayable. Hanya ada satu objek Displayable yang ditampilkan ke layar dalam setiap waktu tertentu. Screen dan Canvas adalah subclass dari abstract class Displayable. Screen dikenal sebagai superclass dari ko mponen antar muka tingkat tinggi. Canvas dikenal sebagai ko mponen antar muka tingkat rendah. Screen memiliki beberapa subclass, di antaranya adalah Alert, Form, List dan TextBo x. Text Bo x adalah Screen yang memungkinkan user memasukkan dan mengedit teks. Form adalah Screen yang dapat berisi beberapa item: image, text field yang hanya dapat dibaca, text field yang dapat diedit, gauge, choice group dan custom item. List adalah Screen yang berisi beberapa opsi. List adalah subclass dari Screen yang mengimplementasikan interface Choice. ChoiceGroup adalah implementasi Choice yang merupakan subclass dari abstract class Item. Item adalah superclass dari semua ko mponen yang dapat ditambahkan ke dalam Form. Beberapa subclass dari Item antara lain adalah ChoiceGroup, CustomItem, DateField, Gauge, ImageItem, Spacer, StringItem, Text Field.
31
Praktikum Pada bagian ini, kita akan membangun MIDlet yang dapat memanggil beberapa class yang masing-masing digunakan untuk mencoba class TextBo x, Form, dan List atau ChoiceGroup. 1. Jalankan J2M E WTK dan buat project dengan nama Pertemuan5 dengan class MIDlet dengan nama CobaScreenDanItem. 2. Class CobaScreenDanItem adalah turunan MIDlet dan imp lementasi Co mmand Listener. 3. Pada bagian deklarasi variabel, tambahkan sebuah Form bernama mainForm; tambahkan empat buah Co mmand yaitu exit Co mmand, cobaText Bo xCo mmand, cobaFormCo mmand, cobaListCo mmand; tambahkan deklarasi instance class CobaTextBo x dengan nama cobaText Bo x, instance class CobaForm dengan nama cobaForm, dan instance class CobaList dengan nama cobaList. 4. Pada konstruktor class CobaScreenDanItem, definisikan semua variabel yang telah dideklarasikan pada langkah ketiga. Tambah kan semua objek Co mmand pada main Form. Atur agar mainForm men jadi objek yang ditamp ilkan pertama kali. 5. Pada method commandAction, jika cobaText Bo xCo mmand dip ilih maka tampilkan cobaText Bo x pada Display; jika cobaFormCo mmand dipilih maka tamp ilkan cobaForm pada Display; jika cobaListCommand dipilih maka tamp ilkan cobaList.
1. 2. 3.
4.
1. 2.
Menggunakan class TextBo x: Buat class CobaText Bo x yang merupakan turunan class TextBo x dan implementasikan interface Co mmandListener. Pada bagian deklarasi variabel, tambahkan variabel kembaliCo mmand bertipe Co mmand. Pada konstruktor class CobaText Bo x, panggil superclass dengan mengirimkan empat parameter yaitu judul bertipe String (contoh: “Mencoba Text Bo x”), teks bertipe String (contoh: “TextBo x adalah subclass Screen”), ju mlah karakter maksimal bertipe int (contoh: 33), dan constraint bertipe int (contoh: TextField.ANY); tambahkan Co mmand kembaliCo mmand. Overridlah method co mmandAction dengan menuliskan fungsi untuk kembali ke mainForm jika kembaliCo mmand dipilih. Menggunakan class Form: Buat class CobaForm yang merupakan turunan class Form dan implementasikan interface Co mmandListener. Pada bagian deklarasi variabel, tambahkan variabel kembaliCo mmand bertipe Co mmand.
32
Modul VIII Menambahkan Notifikasi Tujuan : v Mahasiswa mampu melengkapi M IDlet dengan notifikasi
Tug as Pendahuluan 1. Jelaskan kegunaan Exception! 2. Tuliskan cara menangani suatu Exception! 3. Jelaskan perbedaan antara throws dan try-catch!
Dasar Teori Alert adalah subclass Screen yang digunakan untuk menampilkan data ke user dan menunggu sampai beberapa saat untuk kemudian menampilkan objek Displayable yang berikutnya. Alert memiliki fungsi untuk mengirim notifikasi atau pesan berisi peringatan tentang error atau kondisi exception. Untuk melengkapi notifikasi yang ditampilkan secara visual maka class AlertType dapat digunakan untuk menyediakan notifikasi secara audio.
Praktikum Pada pertemuan ke-8, kita akan menggunakan notifikasi dalam bentuk audio visual. 1. Jalankan J2M E WTK dan buat project baru dengan nama Pertemuan8 dengan CobaAlertDanAlertType sebagai nama class MIDletnya. 2. Modifikasilah file CobaAlert DanAlertType.java agar saat MIDlet dijalankan, yang pertama kali muncul adalah sebuah instance dari Alert yang dibuat dengan constructor empat parameter. Sehingga Alert akan menamp ilkan judul, teks, image dalam format .png dan AlertType. Lakukan percobaan dengan mengganti jenis AlertType. Perhatikan notifikasi berupa suara yang dikeluarkan dari hasil pemilihan masingmasing AlertType.
45
[halaman ini sengaja dikosongkan]
3.
4.
1. 2. 3.
4. 5.
Pada konstruktor class CobaForm, panggil superclass dengan mengirimkan sebuah parameter yaitu judul bertipe St ring (contoh: “Mencoba Form”); tambahkan Co mmand kembaliCo mmand. Overridlah method co mmandAction dengan menuliskan fungsi untuk kembali ke mainForm jika kembaliCo mmand dipilih. Menggunakan class List: Buat class CobaList yang merupakan turunan class List dan implementasikan interface Co mmandListener. Pada bagian deklarasi variabel, tambahkan variabel kembaliCo mmand bertipe Co mmand. Pada konstruktor class CobaList, panggil superclass dengan mengirimkan empat parameter yaitu judul bertipe St ring (contoh: “Mencoba Form”), tipe List (contoh: List.EXCLUSIVE), pilihan yang ditampilkan dalam bentuk array tipe String (contoh: new String [] {“opsi 1”, “opsi 2”, “opsi 3”}), image yang menyertai opsi (contoh: null, jika image tidak ditambahkan); tambahkan Co mmand kembaliCo mmand. Overridlah method co mmandAction dengan menuliskan fungsi untuk kembali ke mainForm jika kembaliCo mmand dipilih. Simpan semua file di atas, kemudian Bu ild dan Run untuk menguji MIDlet.
Gambar 5. 2 TextBox di MIDlet
Gambar 5. 1 Menu di MIDlet
6.
44
Jalankan MIDlet dengan mengakses Menu. Terdapat tiga opsi dalam Menu. Ujilah masing-masing menu!
33
3. 4.
Modifikasilah kode CobaCanvas agar saat dipanggil dari CobaMIDletSuite dapat menampilkan icon Maze.png. Simpan semua file kemud ian BUILD dan RUN untuk menguji MIDlet.
Gambar 7. 7 Menampilkan grafik
Gambar 7. 6 Project deng an dua MIDlet
Tug as Modifikasilah pro ject Pertemuan7 sehingga CobaCanvas dapat menampilkan image sesuai pilihan pada ChoiceGroup. Gambar 5. 4 List di MIDlet
Gambar 5. 3 Form di MIDlet
Tug as 1. Buatlah sebuah project J2ME untuk melakukan konversi temperatur (Celcius, Fahrenheit, Reamur, Kelvin ). Project terdiri dari sebuah class MIDlet, sebuah class turunan List yang berisi pilihan konversi, sebuah class turunan Text Bo x yang meminta inputan untuk temperatur yang akan dikonversi, dan sebuah class turunan Form yang menampilkan informasi temperatur asal dan hasil konversi. 2. Buatlah sebuah project J2M E untuk konversi bilangan (desimal, b iner, oktal, heksa) dengan konstruksi class yang sama dengan soal nomor satu.
Gambar 7. 8 Image dalam MIDlet
34
43
drawLine dan drawRoundRect. Pertama, layar dikosongkan dengan memanggil method fillRect dengan warna putih. Kedua, gambar garis dan kotak beru jung bundar dengan warna hitam. Warna putih didapatkan dengan mengisi parameter dari method setColor dengan data 255 untuk red, 255 untuk green dan 255 untuk blue. Sedangkan untuk warna hitam diperoleh dengan membuat semua nilai men jadi nol ( 0 ). Method drawLine digunakan untuk menggambar garis, method drawRoundRect untuk menggambar kotak berujung bundar. Semua pekerjaan yang dilakukan untuk melu kis Canvas dilakukan dengan memanfaatkan class Graphics.
Modul VI Komponen Antar Muka Item Tujuan : v Mahasiswa mampu menggunakan ko mponen antar mu ka tingkat mah ir untuk mendesain tampilan antar muka pengguna
Tug as Pendahuluan 1. Jelaskan perbedaan antara Display dan Displayable! 2. Tuliskan cara penggunaan method sleep dari Thread! 3. Tuliskan cara membuat Thread!
Gambar 7. 4 Mencoba Canvas
1.
Memanfaatkan M IDlet suite: Pada J2M E WTK ktoolbar, pilih menu MIDlets dan tambahkan MIDlet dengan memilih Add. Masukkan in formasi untuk pengenal/name dari MIDlet, icon, dan nama class MIDlet. Simpan informasi dengan memilih OK.
Gambar 7. 5 Menambah MIDlet 2.
Pada constructor CobaMIDletSu ite, tambahkan instance dari CobaCanvas.
42
Dasar Teori Class DateField adalah subclass Item berupa ko mponen yang dapat diedit untuk menampilkan data tanggal dan waktu. DateField memiliki tiga mode input yaitu DATE, TIM E dan DATE_TIM E. Class Gauge adalah subclass Item yang memiliki tampilan berupa grafik batang yang mewakili nilai integer tertentu.Gauge dapat digunakan dalam mode interaktif maupun non-interaktif. Mode interakt if memungkin kan user untuk mengedit nilai Gauge dengan memanggil method setValue. Mode non-interaktif biasa digunakan untuk indikator akt ifitas dengan memanfaatkan Thread. Interface ItemStateListener digunakan untuk membaca perubahan yang terjadi pada Gauge mode interaktif. Hanya ada satu abstract method yang perlu dioverride yaitu itemStateChanged. Method setItemStateListener digunakan untuk menambahkan listener bagi subclass Item in i.
Praktikum Pada bagian ini, kita akan membangun MIDlet yang dapat memanggil beberapa class yang masing-masing digunakan untuk mencoba class DateField, Gauge interaktif dan Gauge non-interaktif, serta mengimp lementasikan interface ItemStateListener. 1. Jalankan J2M E WTK dan buat project baru dengan nama Pertemuan6 dengan CobaDateFieldDan Gauge sebagai nama class MIDletnya. 2. MIDlet berisi mainForm yang akan tampil pada saat MIDlet dijalan kan pertama kali. Class ini juga berisi instance dari class CobaDateField,
35
3.
1. 2. 3.
1. 2. 3.
1. 2. 3. 4.
5.
CobaGaugeInteraktif dan CobaGaugeNonInteraktif. Set iap instance diakses dengan menggunakan Command cobaDateField Cmd, cobaGaugeInteraktifCmd, cobaGaugeNonInterakt if sedangkan Command exit Co mmand digunakan untuk keluar dari ap likasi. Lengkapi mainForm dengan itemData, instance dari StringItem, yang akan digunakan untuk menampilkan data dari class lain (CobaDateField, CobaGaugeInteraktif dan CobaGaugeNonInterakt if). Menggunakan class DateField: Buat class CobaDateField yang merupakan subclass dari Form. Tambahkan sebuah instance dari class DateField dengan tipe DATE. Tambahkan sebuah Co mmand kembaliCmd untuk kembali ke mainForm. Menggunakan class Gauge mode interaktif: Buat class CobaGaugeInteraktif yang merupakan subclass dari Form. Tambahkan sebuah instance dari class Gauge dengan tipe interakt if dengan nilai batas bawah sama dengan 0 dan batas atas 10. Tambahkan sebuah Co mmand kembaliCmd untuk kembali ke mainForm. Menggunakan class Gauge mode non-interaktif: Buat class CobaGaugeNonInteraktif yang merupakan subclass dari Form. Tambahkan sebuah instance dari class Gauge dengan tipe non-interaktif dengan batas bawah 0 dan batas atas 10. Tambahkan sebuah Co mmand kembaliCmd untuk kembali ke mainForm. Untuk dapat menamp ilkan efek progress, class ini harus mengimp lementasikan interface Runnable. Dalam method run, beri jeda satu detik untuk setiap pertambahan nilai pada grafik batang. Gunakan method sleep dari Thread untuk mengatur jeda. Gunakan method setValue untuk mengatur nilai Gauge. Gunakan variabel jen is static untuk menyimpan n ilai yang akan disetkan pada Gauge (ingat nilai ini terus bertambah dari nilai batas bawah sehingga mencapai nilai batas atas). Simpan semua file kemud ian BUILD dan RUN untuk menguji MIDlet.
1. 2. 3.
Melengkapi ChoiceGroup dengan image: Pada class CobaGrafik, tambahkan sebuah Form mainForm, sebuah Co mmand exit Co mmand, dan sebuah ChoiceGroup choice . Pada constructor CobaGrafik, defin isikan Form, Co mmand dan ChoiceGroup. Definisi ChoiceGroup menggunakan constructor dengan empat parameter.
ChoiceGroup (String label, int choiceType, String[] stringElements, Image[] imageElements) 4.
Untuk menambahkan Image, gunakan method createImage. Perhatikan, pemanggilan method in i harus diletakkan dalam penanganan kesalahan dengan merujuk pada NullPo interException dan IOException.
public static Image createImage(String name) throws IOException
5. 6.
Tambahkan instance dari Co mmand dan ChoiceGroup pada Form. Simpan file CobaGrafik. Buil dan Run untuk menguji MIDlet. Jika MIDlet dilaunch maka akan tampil tiga opsi Pilihan1, Pilihan2, dan Pilihan3 yang masing-masing dilengkapi dengan icon.
Gambar 7. 3 Mencoba ChoiceGroup
1. 2. 3.
Menggunakan class Canvas: Buat class CobaCanvas yang merupakan subclass dari Canvas. Letakkan file ini di d irektori src dari p roject Pertemuan7. Tambahkan sebuah Command untuk mengarahkan Displayable ke tampilan sebelumnya. Definisikan ulang method paint dalam CobaCanvas.
protected abstract void paint(Graphics g)
4.
36
Di dalam definisi method paint, panggillah method setColor, fillRect,
41
2. 3.
dengan CobaGrafik sebagai nama class MIDletnya. Gunakan J2M E WTK – ktoolbar, pilih Settings, pilih menu MIDlets sehingga terbuka panel berisi Key, Name, Icon dan Class. Pilih MIDlet yang akan d iisi dengan icon kemudian pilih Edit sehingga terbuka jendela Enter M IDlet Details. Pada jendela Enter M IDlet Details, masukkan nama file image tipe PNG yang akan menjad i icon dari midlet. Perhatikan, sebelu mnya file icon harus sudah tersedia di dalam d irektori res dari project Pertemuan7. Jika file image diletakkan langsung di dalam direktori res, awali nama file dengan tanda slash ( / ).
Gambar 6. 1 Menu pada MIDlet
Gambar 6. 2 DateField di MIDlet
Gambar 6. 3 Memilih tanggal
Gambar 6. 4 Hasil pemilihan DateFiel d
Gambar 7. 1 Mengatur seting project 4.
Setelah nama file icon dimasukkan, pilih OK. Lakukan Build dan Run untuk menguji MIDlet. Emu lator akan menamp ilkan sebuah MIDlet dengan judul yang dilengkapi icon Opt ional.png.
Gambar 7. 2 MIDlet deng an icon
40
37
Modul VII Grafik dalam MIDlet Tujuan : v Mahasiswa mampu menggunakan grafik pada MIDlet
Gambar 6. 5 Pemilihan DateFiel d di tampilkan di form utama
Gambar 6. 6 Gauge di MIDlet
Gambar 6. 8 Nil ai dari gauge di tampilkan di form utama
Gambar 6. 7 Gauge interaktif
Tug as Buatlah MIDlet untuk melakukan perkiraan kelahiran bayi. Inputan yang dibutuhkan adalah tanggal menstruasi terakhir. Output yang ditampilkan adalah tanggal kelahiran bayi. MIDlet boleh dilengkapi dengan halaman yang bertindak sebagai splash screen saat aplikasi pertama kali dibuka. MIDlet boleh dilengkapi dengan halaman progress yang muncul di antara halaman input dan halaman output.
38
Tug as Pendahuluan 1. Tuliskan fungsi dari method paint dari class Canvas! 2. Tuliskan cara penggunaan method paint! 3. Tuliskan cara penggunaan method drawRoundRect!
Dasar Teori Portable Net work Graphics (PNG) adalah file format untuk image dengan ko mpresi dan fitur lain yang lebih baik bila dibandingkan dengan image GIF. Class Image digunakan untuk mengolah image yang berjenis immutable dan mutable. Image yang diload dari sumber daya midlet, file atau pun network disebut immutable image. Sedangkan image yang dirender dengan memanggil method getGraphic disebut mutable image. Image dapat ditambahkan ke dalam mid let dengan mengatur MIDlet-Icon yang akan mempengaruhi file MANIFEST.M F dan file jad. Image juga dapat ditambahkan ke dalam ChoiceGroup dengan menggunakan method createImage dari class Image. Canvas menyediakan kemampuan untuk membuat MIDlet yang membutuhkan penanganan low level event dan pengolahan grafik. Abstract method paint harus didefinisikan saat abstract class Canvas dijadikan sebagai superclass. Method paint memiliki parameter bertipe Graphics. Class Graphics berisi methodmethod yang digunakan untuk menggambar pada area Canvas, di antaranya adalah drawImage, drawLine, d rawRoundRect, drawString, fillRect, dan setColor.
Praktikum Pada pertemuan ke-7 in i, kita akan menambahkan icon ke dalam MIDlet, melengkapi ChoiceGroup dengan image, menggunakan Canvas dan memanfaat kan MIDlet suite. Menambahkan icon ke dalam MIDlet : 1. Jalankan J2M E WTK dan buat project baru dengan nama Pertemuan7
39