Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Komponen Class Item (3) As’ad Djamalilleil

Presentasi serupa


Presentasi berjudul: "Komponen Class Item (3) As’ad Djamalilleil"— Transcript presentasi:

1 Komponen Class Item (3) As’ad Djamalilleil

2 Class Gauge Gauge menyediakan jalan untuk mewakili sebuah nilai yang dapat dipilih dari sebuah rangkaian nilai integer dimulai dari 0 sampai dengan maksimum nilai yang ditentukan oleh aplikasi Class Gauge memiliki sebuah constructor: public Gauge(String label, boolean interactive, int maxValue, int initialValue);

3 maxValue –nilai terbesar dari rangkaian nilai yang dapat dipilih pada gauge initialValue –nilai yang akan tampil sebagai nilai awal. Nilai minimum selalu bernilai nol, dan nilai terpilih harus selalu bernilai positif dan tidak lebih bsar dari nilai maksimum interactive –menentukan apakah user dapat mengatur nilai pada gauge atau tidak. Agar gauge dapat berfungsi sebagai slider, maka nilai argumen interactive harus bernilai true

4 Pengaturan yang diberikan oleh user dilaporkan ke ItemStateListener yang berada pada Form di mana gauge ditampilkan Jika argumen interactive bernilai false, nilai dari gauge hanya dapat diatur secara programatik, dimana pada mode ini gauge berfungsi seperti progress-bar Nilai dari gauge dapat diperoleh atau diubah menggunakan metode berikut: public int getValue(); public void setValue(int value);

5 Nilai argumen value pada metode setValue() harus berupa bilangan non- negatif dan tidak lebih dari nilai maksimum Nilai maksimum dapat dimanipulasi menggunakan metode berikut: public int getMaxValue(); public void setMaxValue(int value); Argumen value pada metode setMaxValue() harus lebih besar dari nol Jika nilai argumen tersebut lebih kecil dari nilai maksimum, maka nilai maksimum akan diturunkan ke nilai tersebut

6 Ada pula metode yang dapat membaca status dari gauge apakah bersifat interaktif atau tidak: public boolean isInteractive( ); Atribut ini tidak dapat diubah, hanya dapat diatur pada saat instansiasi saja Berikut adalah contoh potongan kode untuk membaca setiap perubahan pada gauge yang dilakukan oleh user:

7 public void itemStateChanged(Item item){ if(item instanceof Gauge){ int value = ((Gauge)item).getValue(); System.out.println("Nilainya :" + value); } else { // kode lainnya }

8 Aplikasi Demo Gauge 1 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.lcdui.Gauge; public class DemoGauge extends MIDlet{ private Display disp; private Form frm; private Gauge gog; public DemoGauge(){ disp = Display.getDisplay(this); }

9 public void startApp(){ frm = new Form("Demo Gauge"); gog = new Gauge("Ukuran sepatu :", true, 35, 28); frm.append(gog); disp.setCurrent(frm); System.out.println("Nilai awal : " + gog.getValue()); } public void pauseApp(){ }

10 public void destroyApp(boolean unconditional){ } }

11 Aplikasi Demo Gauge 2 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.lcdui.Gauge; public class DemoGauge extends MIDlet{ private Display disp; private Form frm; private Gauge gog; public DemoGauge(){ disp = Display.getDisplay(this); }

12 public void startApp(){ frm = new Form("Demo Gauge"); gog = new Gauge("Sedang proses :", false, Gauge.INDEFINITE, Gauge.CONTINUOUS_RUNNING); frm.append(gog); disp.setCurrent(frm); } public void pauseApp(){} public void destroyApp( boolean unconditional){} }

13 Aplikasi Demo Gauge 3 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.lcdui.Gauge; public class DemoGauge extends MIDlet implements Runnable{ private Display disp; private Form frm; private Gauge gog; private Thread thr; public DemoGauge(){ disp = Display.getDisplay(this); }

14 public void startApp(){ frm = new Form("Demo Gauge"); gog = new Gauge("Proses sedang berjalan", false, 10, 1); thr = new Thread(this); thr.start(); frm.append(gog); disp.setCurrent(frm); } public void pauseApp(){ } public void destroyApp(boolean unconditional){}

15 public void run(){ int hitung = 0; while(hitung++ < 10){ gog.setValue(hitung); try{ Thread.sleep(1000); }catch(InterruptedException ie){} } gog.setLabel("Proses telah selesai"); }

16 Class ChoiceGroup ChoiceGroup dan List adalah dua komponen yang mirip dimana memberikan user kumpulan pilihan yang dapat dipilih satu atau lebih dari pilihan tersebut ChoiceGroup adalah sebuah Item yang digunakan sebagai bagian dari Form, sedangkan List berasal dari class Screen sehingga berdiri sendiri sebagai sebuah komponen dan ditampilkan dalam bentuk satu layar penuh

17 Terdapat dua tipe dari ChoiceGroup, dibedakan berdasarkan jumlah item di dalam grup yang dapat dipilih pada saat yang sama. Berikut adalah constructor-nya: public ChoiceGroup(String label, int choiceType); public ChoiceGroup(String label, int choiceType, String[] strings, Image[] images);

18 Parameter choiceType menerima satu dari beberapa nilai berikut, yang didefinisikan pada interface Choice, yang diimplementasi oleh ChoiceGroup: Choice.EXCLUSIVE –Membuat sebuah ChoiceGroup eksklusif dimana hanya dapat memilih satu item, sehingga berfungsi layaknya beberapa radio-button Choice.MULTIPLE –Membuat sebuah ChoiceGroup dengan beberapa pilihan, seperti sekumpulan checkbox yang dapat dipilih lebih dari satu

19 Berikut adalah contoh kodenya: Image merah = Image.createImage("/merah.png"); Image hijau = Image.createImage("/hijau.png"); Image biru = Image.createImage("/biru.png"); // Exclusive choice group String[] warna = new String[] {"Merah", "Hijau", "Biru"}; Image[] gbr = new Image[] {merah, hijau, biru}; ChoiceGroup exGroup = new ChoiceGroup("Pilih warna", ChoiceGroup.EXCLUSIVE, warna, gbr);

20 Setiap elemen dari ChoiceGroup terdiri dari sebuah string dan Image opsional yang ditampilkan di dekat string, walaupun tidak diwajibkan untuk menampilkan Image. Ketika menggunakan constructor untuk menginisialisasi sebuah ChoiceGroup, terdapat beberapa aturan berikut: –Argumen string atau elemen array strings tidak boleh kosong (null). Batasan ini menyatakan bahwa item berupa gambar saja tidak diperbolehkan –Argumen image boleh null jika gambar tidak diperlukan

21 –Jika argumen images tidak null, maka harus memiliki jumlah elemen yang sama dengan array strings. Image pada index ke-N pada array images bersesuaian dengan string pada elemen ke-N dari array strings. –Gambar harus berukuran tetap dan elemen manapun pada array Images dapat null jika sebuah gambar tidak diperlukan pada item ChoiceGroup tersebut

22 Cara alternatif untuk menginisialisasi sebuah ChoiceGroup adalah dengan menambahkan properti komponen setelah constructor selesai dijalankan: ChoiceGroup chgMulti = new ChoiceGroup("Pilihan", ChoiceGroup.MULTIPLE); chgMulti.append("Ingat Password", null); chgMulti.append("Cek Update", null); chgMulti.append("Simpan History", null);

23 Metode append() menyediakan baik argumen string dan image (opsional) seperti berikut: public int append(String string, Image image); Argumen string pada metode ini tidak boleh null. Argumen image dapat null jika gambar tidak diperlukan, jika tidak null, maka Image yang disertakan memiliki ukuran yang tetap Nilai yang dikembalikan oleh metode ini adalah index dari item yang dimasukkan ke dalam ChoiceGroup

24 Pada potongan contoh kode di atas, pemanggil pertama dari metode ini akan mengembalikan nilai 0, kedua bernilai 1, dan seterusnya Metode append() adalah satu di antara metode lain dari interface Choice yang dapat digunakan untuk mengubah isi dari ChoiceGroup Perubahan pada status seleksi dari sebuah elemen ChoiceGroup dilaporkan ke ItemStateListener dari Form dimana ChoiceGroup ditampilkan Pada ChoiceGroup bertipe MULTIPLE, notifikasi diberikan setiap kali sebuah elemen dipilih atau di- non-pilih

25 Perlu diketahui elemen mana dari ChoiceGroup yang dipilih. ChoiceGroup memiliki tiga metode yang dapat digunakan untuk mendapatkan status pilihan: public boolean isSelected(int index); public int getSelectedIndex(); public int getSelectedFlags(boolean[] flags); Metode isSelected() mengembalikan nilai true jika elemen dengan index yang diberikan berada pada status terpilih dan mengembalikan nilai false jika tidak terpilih

26 Metode ini sering digunakan pada ChoiceGroup bertipe MULTIPLE, dimana setiap checkbox mewakili sebuah aksi program yang berbeda. Kode berikut memberikan contohnya: public static final int USE_SSL = 0; public static final int RECONNECT_ON_FAIL = 1; public static final int TRACING_ENABLED = 2;.... do { if (multiChg.isSelected(USE_SSL)) { // Connect using SSL } else { // Connect using vanilla sockets }

27 if (failed && multiChg.isSelected(TRACING_ENABLED)){ // Log failure } }while(failed && multiChg.isSelected(RECONNECT_ON_FAIL));

28 Pada ChoiceGroup bertipe EXCLUSIVE, karena hanya dapat memiliih satu elemen, maka metode setSelectedIndex() dapat digunakan untuk menentukan index-nya: public static final int RED = 0; public static final int GREEN = 1; public static final int BLUE = 2;.... int index = exGroup.getSelectedIndex(); if (index == RED) { // jalankan aksi tertentu }

29 Metode ini selalu mengembalikan nilai -1 jika dipanggil pada ChoiceGroup bertipe MULTIPLE karena dapat lebih dari satu elemen yang dipilih Juga mengembalikan nilai -1 jika ChoiceGroup tidak memiliki elemen sama sekali (dalam prakteknya ChoiceGroup selalu memiliki elemen) Untuk mendapatkan status seleksi dari setiap elemen pada ChoiceGroup, maka metode getSelectedFlags() dapat digunakan Metode ini membutuhkan sebuah array bertipe boolean minimal memiliki jumlah elemen yang sama dengan jumlah item pada ChoiceGroup

30 Metode ini mengisi array dengan nilai true/false sesuai dengan status seleksi dari item-item pada ChoiceGroup Nilai yang dikembalikan adalah jumlah item yang terseleksi Sebelum menjalankan metode ini, perlu untuk mengalokasikan sebuah array boolean dengan ukuran yang sesuai Jika jumlah elemen pada ChoiceGroup tidak tetap, maka dapat digunakan metode size() untuk mendapatkan jumlah elemennya:

31 boolean[] flags = new boolean[multiChg.size()]; int count = multiChg.getSelectedFlags(flags); do { if (flags[USE_SSL]) { // Connect using SSL } else { // Connect using vanilla sockets } if (failed && flags[TRACING_ENABLED]) { // Log failure } }while(failed && flags[RECONNECT_ON_FAIL]);

32 Untuk mendapatkan nilai dari elemen di dalam ChoiceGroup, dapat digunakan metode getString() : public String getString(int index); Kode berikut memberikan nilai “Merah”, “Hijau”, atau “Biru”: String color = exGroup.getString(exGroup.getSelectedIn dex()); Berikut adalah contoh penanganan perubahan seleksi pada komponen ChoiceGroup atau List:

33 //Menangani seleksi pada Choice private void urusSeleksi(Choice choice){ int count = choice.size(); boolean[] states = new boolean[count]; int selCount = choice.getSelectedFlags(states); if (selCount > 0) { System.out.println("Item terpilih:"); for (int i = 0; i < count; i++) { if (states[i]) { System.out.println("\t" + choice.getString(i)); }

34 else { System.out.println("Tdk ada yg terpilih"); } int selectedIdx = choice.getSelectedIndex(); System.out.println("Index dari itemnya: " + selectedIdx); }

35 Metode ini dipanggil dari ItemStateListener yang terhubung ke Form yang memiliki ChoiceGroup, diberikan sebuah argumen bertipe Choice (bukan ChoiceGroup) Ketika dijalankan, kode tersebut mengirim referensi ke ChoiceGroup. Hal ini dapat dterima, karena ChoiceGroup mengimplementasi interface Choice Kelebihannya adalah metode ini dapat pula digunakan untuk menangani perubahan seleksi yang terjadi pada komponen List, yang juga mengimplementasi Choice

36 Bagian pertama dari kode ini menggunakan metode getSelectedFlags() untuk mendapatkan elemen-elemen yang dipilih kemudian mencetaknya lewat perulangan Bagian kedua dari kode ini menggunakan metode getSelectedIndex() untuk mengakses langsung index dari item yang dipilih dan hanya digunakan pada ChoiceGroup bertipe EXCLUSIVE

37 Status seleksi dari elemen pada sebuah ChoiceGroup dapat diubah secara programatik lewat metode berikut: public void setSelectedIndex(int index, boolean selected); public void setSelectedFlags(boolean[] flags); Pada ChoiceGroup bertipe MULTIPLE, metode ini memilih atau tidak memilih elemen pada index yang diberikan, bergantung pada nilai argumen selected

38 Pada ChoiceGroup bertipe EXCLUSIVE, metode ini efektif hanya jika argumen selected bernilai true. Elemen pada index tersebut akan terpilih dan elemen sebelumnya berubah statusnya menjadi tidak terpilih Jika argumen selected bernilai false, pemanggilan metode tersebut akan diabaikan, karena ChoiceGroup bertipe EXCLUSIVE harus selalu memiliki elemen yang terpilih Status seleksi dari seluruh elemen pada ChoiceGroup dapat diubah dengan memanggil metode setSelectedFlags()

39 Metode tersebut memberikan sebuah array boolean yang berisi nilai true untuk elemen- elemen yang ingin dipilih dan false untuk yang tidak dipilih Array boolean harus memiliki isi untuk tiap elemen pada ChoiceGroup: public boolean[] initState = new boolean[3]; //hanya elemen RECONNECT_ON_FAIL saja initState[RECONNECT_ON_FAIL] = true; multiChg.setSelectedFlags(initState);

40 Pada ChoiceGroup bertipe MULTIPLE, elemen dari argumen array selected manapun dapat diberi nilai true Pada ChoiceGroup bertipe EXCLUSIVE, argumen array selected hanya memiliki satu elemen yang bernilai true, jika tidak, maka berlaku aturan berikut: –Jika array tidak memiliki elemen yang bernilai true, maka elemen pertama pada ChoiceGroup yang terseleksi –Jika array memiliki lebih dari satu elemen yang bernilai true, maka elemen array pertama yang memiliki nilai true yang efektif terhadap elemen ChoiceGroup

41 Isi ChoiceGroup dapat diubah kapanpun menggunakan metode berikut: public int append(String string, Image image); public void insert(int index, String string, Image image); public void set(int index, String string, Image image); public void delete(int index);

42 Metode append(), menambahkan sebuah elemen baru pada akhir ChoiceGroup. Metode insert(), menambahkan dengan cara menyisipkan elemen baru sesuai argumen index Penggunaan metode append() sama dengan metode insert() pada kode berikut: multiChg.insert(multiChg.size(), "Isi baru", null); Index penyisipan yang lebih besar dari size() adalah salah dan akan memberikan error IndexOutOfBoundsException

43 Argumen image dapat bernilai null jika tidak diperlukan gambar, tetapi argumen string tidak boleh null Sebuah elemen dapat dihapus dari ChoiceGroup menggunakan metode delete() : public void delete(int index); Mengganti sebuah item menggunakan metode set() akan memberikan item yang baru status terseleksi sebagaimana item yang ditimpanya Penghapusan salah satu item tidak mempengaruhi index item ChoiceGroup yang terseleksi

44 Aplikasi Demo ChoiceGroup 1 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class DemoChoice extends MIDlet{ private Display disp; private Form frm; private ChoiceGroup chg; public DemoChoice(){ disp = Display.getDisplay(this); }

45 public void startApp(){ frm = new Form("Demo ChoiceGroup"); chg = new ChoiceGroup("Pilih Saja", ChoiceGroup.MULTIPLE); chg.append("Nasi kuning", null); chg.append("Coto", null); chg.append("Gado-gado", null); chg.append("Sate ayam", null); chg.append("Gulai kambing", null); frm.append(chg); disp.setCurrent(frm); }

46 public void pauseApp(){} public void destroyApp(boolean unconditional){} }

47 Aplikasi Demo ChoiceGroup 2 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.lcdui.ChoiceGroup; import java.io.IOException; public class DemoChoice extends MIDlet{ private Display disp; private Form frm; private ChoiceGroup chg; private String[] str = new String[] {"Merah", "Hijau", "Biru"}; private Image merah, hijau, biru; private Image[] gbr;

48 public DemoChoice(){ disp = Display.getDisplay(this); } public void startApp(){ frm = new Form("Demo ChoiceGroup"); try{ merah = Image.createImage("/merah.png"); hijau = Image.createImage("/hijau.png"); biru = Image.createImage("/biru.png"); }catch(IOException ioe){ System.out.println("Gambar tidak ada!"); } gbr = new Image[] {merah, hijau, biru};

49 chg = new ChoiceGroup("Pilih Warna", ChoiceGroup.EXCLUSIVE, str, gbr); frm.append(chg); disp.setCurrent(frm); } public void pauseApp(){} public void destroyApp(boolean unconditional){} } Catatan: buat terlebih dahulu 3 buah file gambar (PNG) berukuran 10x10 pixel dengan nama file masing-masing “merah.png”, “hijau.png”, dan “biru.png” kemudian disimpan di dalam folder “res”


Download ppt "Komponen Class Item (3) As’ad Djamalilleil"

Presentasi serupa


Iklan oleh Google