MIDlet User Interface (2) As’ad Djamalilleil http://kampusku.my.id asad.kom@gmail.com
Class Command Command adalah sebuah fitur pada Class Displayable, sehingga dapat ditambahkan pada user interface, bahkan yang menggunakan low-level API Command digunakan untuk menangani aksi yang diberikan oleh user lewat interface yang disediakan oleh MIDlet Command layaknya tombol aplikasi desktop atau yang diistilahkan dengan soft button pada MIDlet
Membuat Command Command memiliki sebuah constructor public Command(String label, int type, int priority); label teks yang digunakan untuk mewakili command pada interface type tipe dari command yang dibuat priority prioritas urutan command yang tampil
Parameter Tipe Command Arti OK Menyatakan persetujuan oleh user terhadap operasi yang akan dilakukan. Ditempatkan di lokasi yang mudah terlihat BACK Mengganti layar yang tampil dengan layar sebelumnya CANCEL Membatalkan operasi sebelum dijalankan. Misalnya untuk meminta konfirmasi atas proses yang tidak dapat dibalik STOP Menghentikan operasi yang sedang berjalan EXIT Permintaan untuk menghentikan semua operasi dan aplikasi dihentikan HELP Meminta bantuan secara umum atau sesuai konteks SCREEN Berhubungan dengan proses pada layar aktif, tetapi selain dari kategori proses yang terdaftar di atas ITEM Berhubungan dengan user interface tertentu
Untuk menampilkan command pada user interface digunakan metode addCommand() pada class Displayable public void addCommand(Command cmd); Semakin kecil nilai parameter priority dari sebuah command, maka posisi command tersebut lebih diutamakan penempatannya atau lebih mudah dijangkau oleh user
Jika jumlah command melebihi jumlah soft key yang ada pada perangkat mobile (handphone/HP), maka tergantung dari kebijakan sistem operasi yang digunakan pada HP untuk menentukan urutan pemetaan command pada soft key yang tersedia Contohnya jika terdapat tiga buah command dengan hanya dua buah soft key pada HP, maka sebuah command akan menempati satu soft key dan dua buah command lainnya akan membentuk menu yang dapat diakses pada soft key kedua
Pemetaan command ke soft key ini ditentukan oleh sistem operasi pada HP dengan cara melihat nilai dari parameter tipe dan priority pada setiap command Cara pemetaan tersebut mungkin berbeda antara satu HP ke HP yang lain Beberapa command, seperti EXIT mungkin ingin ditampilkan pada beberapa layar aplikasi yang berbeda. Maka satu command EXIT dapat ditampilkan pada lebih dari satu layar
Command exitCommand = new Command( "Exit", Command.EXIT, 0); form1.addCommand(exitCommand); form2.addCommand(exitCommand);
Merespon Aksi User Pada Command Agar dapat menerima notifikasi ketika user menjalankan satu command, maka terlebih dulu menghubungkan sebuah CommandListener dengan objek Displayable dimana command tersebut ditambahkan Cara ini bisa dilakukan lewat metode setCommandListener()
public void setCommandListener( CommandListener l); Metode commandAction() dipanggil setiap kali salah satu command pada objek Displayable dijalankan, yaitu pada saat user menekan soft key yang telah terhubung dengan command public void commandAction( Command c, Displayable d) Argumen pertama (Command) lebih berguna karena kita dapat mengetahui operasi apa yang user ingin lakukan
Argumen Displayable berguna jika kita menambahkan Command yang sama pada lebih dari satu layar, sehingga aksi yang dihasilkan bergantung dari layar yang aktif Argumen ini juga berguna jika aksi memerlukan referensi ke layar untuk dapat menjalankan operasi yang seharusnya Metode setCommandListener hanya memungkinkan sebuah CommandListener yang terhubung pada satu waktu
Aplikasi Demo Command 1 import javax.microedition.midlet.MIDlet; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.*; public class TekanTombol extends MIDlet implements CommandListener { private static final Command KELUAR = new Command("Keluar", Command.EXIT, 0); private static final Command OKE = new Command("Oke", Command.OK, 0); private static final Command HAPUS = new Command("Hapus", Command.SCREEN, 1);
private static final Command BALIK = new Command("Balik", Command.SCREEN, 1); private Display layar; private TextBox isian; public TekanTombol() { layar = Display.getDisplay(this); isian = new TextBox("Sepatah kata", "Ini contoh sebuah tulisan", 50, 0); isian.addCommand(OKE); isian.addCommand(KELUAR); isian.addCommand(HAPUS); isian.addCommand(BALIK); isian.setCommandListener(this); layar.setCurrent(isian); }
public void commandAction(Command c, Displayable d) { if (c == KELUAR) { destroyApp(true); notifyDestroyed(); } else if (c == OKE) { System.out.println("Tombol oke ditekan"); if (c == HAPUS) { isian.setString(null);
if (c == BALIK) { String isi = isian.getString( ); if (isi != null) { StringBuffer sb = new StringBuffer(isi); isian.setString(sb.reverse().toString()); } public void startApp(){
public void pauseApp(){ } public void destroyApp(boolean unconditional){
Command “Keluar” dan “Oke” masing-masing bertipe Command Command “Keluar” dan “Oke” masing-masing bertipe Command.EXIT dan Command.OK dan memiliki priority 0 yang berarti kedua command tersebut seharusnya ditempatkan pada soft key yang lebih mudah diakses oleh user Kedua command yang lain bertipe Command.SCREEN karena berupa proses yang ditentukan oleh program yang tidak memiliki arti yang khusus, dan priority 1 menandakan bahwa command ini memiliki prioritas yang lebih rendah dibandingkan command “Keluar” dan “Oke”
Agar operasi ini tersedia pada user interface, maka keempat command tersebut harus ditambahkan pada sebuah objek Displayable (di contoh ini adalah sebuah TextBox) dengan menggunakan metode addCommand() Kemudian TextBox tersebut di-set agar aksi yang dilakukan oleh user terhadap command yang berada pada TextBox dapat “didengar” oleh MIDlet, maka digunakan metode setCommandListener()
Langkah terahir adalah dengan menambahkan metode commandAction() yang bertanggungjawab menjalankan operasi yang berkaitan dengan command Tugas pertama adalah menentukan operasi apa yang user ingin lakukan. Kita harus bisa mengetahui command yang mana yang ditekan oleh user. Hal ini dapat diketahui lewat argumen pertama pada metode commandAction()
Class Alert Alert adalah sebuah subclass dari Screen yang mirip dengan kotak dialog, walaupun dengan fungsionalitas terbatas Ketika Alert ditampilkan dengan memanggil metode setCurrent(), akan tampil menutupi sebagian atau seluruh layar dan menerima semua kunci dan pointer event yang dibangkitkan oleh aksi user selama Alert terlihat Alert dapat berupa bersifat modal atau non-modal. Modal artinya Alert akan tetap tampil hingga user secara sengaja menutupnya, sedangkan non-modal artinya ditampilkan selama jangka waktu tertentu sebelum ditutup secara otomatis
Alert memiliki beberapa atribut yang menentukan tampilan dan tingkah lakunya: Title Atribut ini diwarisi dari class Screen, dimana judul Alert sifatnya opsional String Atribut ini berisi pesan yang ditampilkan Alert kepada user. Perpindahan baris dapat dibuat di dalam pesan dengan menyisipkan karakter newline Image Sebuah gambar opsional dapat ditampilkan bersamaan dengan pesan
Timeout Menentukan berapa lama Alert ditampilkan. Timeout default akan digunakan bila tidak ditentukan secara eksplisit. Alert.FOREVER digunakan untuk menentukan bahwa Alert ditampilkan hingga user menutupnya Type Atribut ini merupakan konstanta di dalam class AlertType, hanya untuk disampaikan kepada perangkat mobile yang digunakan. Platform perangkat dapat menggunakan AlertType untuk menampilkan pesan maupun suara yang berbeda-beda kepada user sesuai tipenya
Tipe-tipe yang tersedia adalah: AlertType.ALARM AlertType.CONFIRMATION AlertType.ERROR AlertType.INFO AlertType.WARNNG Tipe CONFIRMATION dimaksudkan untuk memberikan konfirmasi kepada user bahwa sebuah aksi yang diminta telah selesai dijalankan, bukan untuk meminta respon (seperti Yes, No atau Cancel) sebelum aksi dijalankan Tidak dimungkinkan untuk membuat sebuah Alert yang dapat menerima input
Hanya Alert dengan timeout Alert Hanya Alert dengan timeout Alert.FOREVER dapat ditutup oleh user secara implisit, namun secara eksplisit dapat ditambahkan Command pada Alert yang memungkinkan untuk berpindah ke Displayable yang lain setelah sebelumnya menutup Alert secara eksplisit Kode untuk membuat dan menampilkan sebuah Alert sangat sederhana:
Alert alt = new Alert("Judul Alert", "Ini sebuah pengingat", alarmImage, AlertType.ALARM); Display.getDisplay(this).setCurrent(alt); Ketika Alert ditutup, layar yang sebelumnya akan ditampilkan kembali. Terkadang lebih baik untuk menampilkan layar yang berbeda setelah Alert ditutup. Hal ini dapat diatur dengan menggunakan sebuah bentuk metode setCurrent() yang berbeda: public void setCurrent(Alert alert, Displayable displayable);
Metode di atas menampilkan Alert yang dikirim sebagai argumen pertama, ketika ditutup, Displayable sebagai argumen kedua ditampilkan Mengirim null sebagai argumen Displayable akan mengembalikan tampilan kembali ke layar sebelumnya AlertType dapat diperoleh atau diubah menggunakan metode-metode berikut: public void setAlertType(AlertType alertType); public AlertType getAlertType();
Teks atau gambar pada Alert dapat diperoleh maupun diubah menggunakan metode-metode berikut: public void setString(String string); public String getString(); public void setImage(Image image); public Image getImage(); Ketika Alert dibuat menggunakan timeout default yang dapat diperoleh lewat metode getDefaultTimeout() public int getDefaultTimeout();
Metode di atas mengembalikan nilai timeout default dalam milidetik Metode berikut digunakan untuk memperoleh atau mengubah timeout aktual untuk Alert tertentu: public int getTimeout(); public void setTimeout(int timeOut); Jika memanggil setTimeout() dengan argumen Alert.FOREVER, maka Alert bersifat modal
Aplikasi Demo Alert 1 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.lcdui.Alert; public class DemoAlert extends MIDlet{ private Display disp; private Alert alt; public DemoAlert(){ disp = Display.getDisplay(this); }
public void startApp(){ alt = new Alert("Demo Alert", "Ini Contoh Pesan", null, AlertType.CONFIRMATION); alt.setTimeout(5000); disp.setCurrent(alt); } public void pauseApp(){} public void destroyApp(boolean unconditional){}
Aplikasi Demo Alert 2 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.lcdui.Alert; public class DemoAlert extends MIDlet{ private Display disp; private Alert alt; private Form frm; public DemoAlert(){ disp = Display.getDisplay(this); }
public void startApp(){ frm = new Form("Tampil Setelah Alert"); frm.append("Form ini ditampilkan setelah Alert ditutup"); alt = new Alert("Demo Alert", "Ini Contoh Pesan", null, AlertType.CONFIRMATION); alt.setTimeout(Alert.FOREVER); disp.setCurrent(alt, frm); } public void pauseApp(){} public void destroyApp(boolean unconditional){}
Memainkan Bunyi MIDP tidak memiliki API untuk memainkan sembarang bunyi, tapi dimungkinkan untuk membuat bunyi menggunakan metode pada AlertType Metode pada AlertType memiliki sebuah metode public yang memainkan bunyi: public boolean playSound(Display display); Dimana display adalah objek Display yang dihubungkan dengan MIDlet.
Kode berikut meminta perangkat untuk memainkan suara yang berhubungan dengan ALARM: AlertType.ALARM.playSound(Display.getDisplay(this)); Perangkat tidak diharuskan untuk memainkan bunyi atau membangkitkan bunyi yang berbeda untuk setiap AlertType Jika metode playSound() dapat memainkan bunyi, maka akan mengembalikan nilai true
Aplikasi Demo Alert 3 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class DemoSound extends MIDlet{ private Display disp; private Alert alt; public DemoSound(){ disp = Display.getDisplay(this); }
public void startApp(){ alt = new Alert("Demo Sound"); alt.setType(AlertType.ALARM); alt.setString("Tes Telinga"); disp.setCurrent(alt); AlertType.ALARM.playSound(disp); } public void pauseApp(){} public void destroyApp(boolean unconditional){}
Minggu depan KUIS !!!
Tugas 3 Buatlah sebuah aplikasi MIDlet yang memiliki 5 buah command: NIM tampilkan NIM pada TextBox Nama tampilkan Nama pada TextBox Alamat tampilkan Alamat pada TextBox Pesan tampilkan sembarang pesan pada Alert selama 20 detik dan menggunakan bunyi Keluar keluar dari MIDlet Di-upload paling lambat 2 minggu depan