Lompat ke konten Lompat ke sidebar Lompat ke footer

Mengatur Tata Letak (Layout) Aplikasi Blackberry dengan Eclipse

Mengatur Tata Letak (Layout) Aplikasi Blackberry dengan Eclipse - Layout Manager berfungsi untuk mengatur tata letak component pada layout. Layout manager terpaket dalam net.rim.device.api.ui.container, yang memiliki 4 class Manager pada API pada version 4.6.0, yaitu:
  • VerticalFieldManager : menjabarkan bidang dari atas / bawah, dapat mengontrol lebar dan keselarasan dari bidang / komponen ke manajer layout. 
  • HorizontalFieldManager : menjabarkan bidang dari kiri ke kanan, pada satu baris. Dapat mengontrol lebar dan tata letak dari bidang 
  • FlowFieldManager : hanya menambahkan bidang dari kiri ke kanan, dan memungkinkan menambahkan sebanyak satu baris. Dapat mengontrol lebar dan tata letak. 
  • DialogFieldManager : digunakan untuk menguraikan Dialog dan Status layar 

Mengatur Tata Letak (Layout) Aplikasi Blackberry dengan Eclipse_


Untuk API versi 5.0 tersedia
  • GridFieldManager : mengatur tata letak component dalam bentuk grid atau tabel. 
baca juga: Membuat Aplikasi Hitung Luas Untuk Blackberry dengan Eclipse

Seperti smartphone kebanyakan, BlackBerry menggunakan memori flash untuk menyimpan data antara aplikasi dan perangkat. Perangkat BlackBerry memiliki memori flash internal, dan sebagian model juga mendukung SDcard eksternal. Beberapa tipe hanya melaui memori internal saja, sementara beberapa bekerja dengan baik melalui memori flash internal dan SDcard yang terpasang ke perangkat.

BlackBerry menawarkan beberapa cara untuk menyimpan data yaitu:

  • Record Management System (RMS) : RMS didukung oleh BlackBerry, format DBMS yang memungkinkan aplikasi untuk menyimpan array byte. Secara umum, tidak ada alasan untuk menggunakan RMS kecuali anda memiliki legacy code atau mengembangkan sebuah MIDlet bukannya aplikasi BlackBerry.
  • BlackBerry Persistent Store : BlackBerry Store Persistent menyediakan fitur mirip dengan RMS, namun, dirancang untuk menyediakan antarmuka penyimpanan data yang fleksibel dan kuat. Dengan BlackBerry Persistent Store API, dapat menyimpan seluruh objek Java ke memori tanpa harus serialize data terlebih dahulu.
  • JSR 75 FileConnection : FileConnection API didefinisikan oleh JSR 75 dan dibangun pada Generic Connection Framework dengan komponen utama dari kelas javax.microedition.io.file.FileConnection FileConnection API merupakan paket opsional Java J2ME yang memberikan-enabled mengakses perangkat untuk file sistem yang terletak pada perangkat mobile. Selain itu JSR 75 mendukung penuh penggunaan PIM (Personal Information Management) API adalah Paket opsional J2ME yang memberikan akses ke PIM (Personal Information Management) data.
  • SQLite : sistem database relational (RDBMS) yang berguna untuk menyimpan data terstruktur. BlackBerry SQLite memungkinkan Anda untuk membuat dan mengakses database disimpan pada memori internal perangkat dan eksternal SD card, tapi hanya tersedia untuk perangkat yang menjalankan BlackBerry OS 5.0.


Mengingat sebelumnya menggunakan OS 4.6, penyimpan data objek kedalam memori flash memungkinan dengan PersistentStore. Saat ini biasanya perangkat flash memori memiliki kapasitas sebesar 128 MB, dengan persentase signifikan untuk ruang bebas (free space) setelah memperhitungkan ruang untuk OS, email dan data lainnya. Bukan ide yang baik menyimpan dokumen atau data lainya yang memiliki kapasitas besar kedalam memori flash. Jika untuk mengelola gambar ber-resolusi tinggi, audio, video atau simpan data kapasitas besar pilihan terbaik adalah menggunakan SDcard dengan FileConnection API.

Persistent Store Key

Persistent Store mengelola kunci/key (nilai long) dan objek (instansi dari Persistent Object). Kunci ini bersifat global di semua aplikasi pada perangkat, tetapi kita perlu mengetahui dulu kunci yang sedang dipakai dalam aplikasi. Sehingga kita bisa memakai Persistent Store di aplikasi yang berbeda dengan key tersebut.

Untuk menghasilkan nilai long untuk digunakan sebagai key, Blackberry JDE plugin pada Eclipse menawarkan cara yang mudah. Caranya cukup ketik beberapa teks ke dalam editor, pilih, dan klik kanan. Kemudian pilih Convert String to Long, akan menhasilkan nilai long berdasarkan pada hash dari teks yang dipilih.

PersistentObject

Gunakan method PersistentStore.getPersistentObject menghasilkan objek dari PersistentObject, bahkan jika key belum pernah digunakan sebelumnya. Anda selalu mendapatkan objek PersistentObject, akan tetapi isi dari objek bisa saja null. Artinya tidak ada yang telah disimpan pada key tersebut atau telah mungkin telah dihapus.

PersistentObject persistentObject = PersistentStore.getPersistentObject (0x2a5c4229e4666089L);

Isi/contents PersistentObject diakses melalui metode getContents. Masih sama, method ini akan kembali menghasilkan null:

Object contents = persistentObject.getContents();

Untuk set atau mengganti isi dari PersistentObject, gunakan method setContents:

Hashtable hashtable = new Hashtable();

persistentObject.setContents(hashtable);

Menetapkan isi PersistentObject dengan method commit:

persistentObject.commit();

Untuk mengubah data dalam PersistentObject, hanya perlu memodifikasi objeknya dan tetapkan dengan persistentObject.commit, tidak perlu memanggil setContents lagi, kecuali jika ingin set objek dengan kunci yang berbeda pada persistent:

hashtable.put("Key", "Value");

persistentObject.commit();

Apa yang bisa disimpan ?

PersistentStore hanya bisa menyimpan objek saja, bukan tipe data primitif. Salah satu contoh, kita tidak dapat menyimpan tipe int secara langsung, tetapi dengan membungkus int dalam suatu objek Integer. Seperti berikut:

persistentObject.setContents(new Integer(1234));

Umumnya, setiap objek yang masuk ke setContents harus mengimplementasikan antarmuka net.rim.device.api.util.Persistable. Interface ini tidak mengandung method, hanya penanda untuk OS BlackBerry.

Selain itu, beberapa kelas dasar Java juga diperbolehkan, meskipun mereka tidak secara eksplisit menerapkan Persistable. Kelas-kelas tambahan persistable diperbolehkan adalah:

java.lang.Boolean

java.lang.Byte

java.lang.Characte

java.lang.Integer

java.lang.Long

java.lang.Object

java.lang.Short

java.lang.String

java.util.Vector

java.util.Hashtable

Array dari tipe primitif juga implisit persistable, sebagaimana array jenis persistable lainnya. Jadi, kita dapat menyimpan byte [], char [], int [], String [], Vektor [], dan sebagainya. Perhatikan bahwa persistent menyimpan seluruh objek, termasuk semua objek referensinya. Ini berarti bahwa jika ada objek referensi objek lainnya, objek tersebut harus persistable juga.

Berikut ini contoh yang salah:

public class MyClass {
int someValue;
}
...
hashtable.put("Key", new MyClass());
persistentObject.commit();

Tetapi jika kelas MyClass implements Persistable, maka dapat dilakukan:

public class MyClass implements Persistable {
int someValue;
}
...
hashtable.put("Key", new MyClass());
persistentObject.commit();

Vertical Field Manager

Berikut cara menggunakan VerticalFieldManager 

VerticalFieldManager vfm = new VerticalFieldManager(Manager.VERTICAL_SCROLL);
vfm.add(new LabelField("VerticalFieldManager..."));
vfm.add(new LabelField("default horizontal alignment is left"));
vfm.add(new LabelField("using all width & long label...", LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH));
vfm.add(new LabelField("horizontally centered...",
Field.FIELD_HCENTER));
add(vfm);

Screenshot :


Horizontal Field Manager

Berikut cara menggunakan HorizontalFieldManager

// create the layout manager, and enable scrolling...
HorizontalFieldManager hfm = new orizontalFieldManager(Manager.HORIZONTAL_SCROLL);
// if field is not focusable, then scrolling will not work!
hfm.add(new LabelField("HFM (focusable for scrolling)...",
Field.FIELD_VCENTER | Field.FOCUSABLE));
hfm.add(new LabelField("default VA..."));
add(hfm);

Screenshot



Flow Field Manager

Berikut cara menggunakan FlowFieldManager 

FlowFieldManager ffm = new FlowFieldManager();
ffm.add(new LabelField("bla (bottom)...", LabelField.FIELD_BOTTOM));
ffm.add(new LabelField("bla (top)...", LabelField.FIELD_TOP));
ffm.add(new BitmapField(..));
ffm.add(new LabelField("FlowFieldManager (center)...", Field.FIELD_VCENTER));
ffm.add(new LabelField("default vertical alignment..."));
add(ffm);

Screenshot



Dialog Field Manager

Berikut cara menggunakan DialogFieldManager

DialogFieldManager dfm = new DialogFieldManager();
dfm.setIcon(new BitmapField(..));
dfm.setMessage(new RichTextField("Title of DialogFieldManager"));
dfm.addCustomField(new LabelField("bla (bottom)...", LabelField.FIELD_BOTTOM));
dfm.addCustomField(new LabelField("bla (top)...", LabelField.FIELD_TOP));
dfm.addCustomField(new BitmapField(..));
dfm.addCustomField(new LabelField("bla (center)...", Field.FIELD_VCENTER));
dfm.addCustomField(new LabelField("default vertical alignment..."));
add(dfm);

Screenshot




Grid Field Manager

Contoh GridFieldManager



Masih menggunakan project custom UI, buat PersistentObject menggunakan Hastable untuk menyimpan isi/kontent. Tambahkan variable Hastable, PersistentKey dan key Field Hastable untuk pada kelas AplikasiPertamaMainScreen:

class AplikasiPertamaMainScreen extends MainScreen implements FieldChangeListener {
...
private Hashtable persistentHashtable;
private PersistentObject persistentObject;
static final long KEY_PERSISTENT = 0x7ca5ef0a1ad81231L;
static final String KEY_USERNAME = "usernameData";
static final String KEY_PASSWORD = "passwordData";
static final String KEY_LEVEL = "levelData";
static final String KEY_JOB = "jobData";
static final String KEY_HOBI1 = "hobiProgrammerData";
static final String KEY_HOBI2 = "hobiDokterData";
static final String KEY_HOBI3 = "hobiAkuntanData";
static final String KEY_SEX1 = "sexPriaData";
static final String KEY_SEX2 = "sexWanitaData";
static final String KEY_AGE = "ageData";
static final String KEY_BORN = "bornData";
...

Buat Hastable. jika pertama kali menggunakan PersistentObject. Sebaliknya, hastable akan mengambil isi/kontent dari PersistentObject jika tidak bernilai i:

if(persistentObject.getContents() == null ) {
persistentHashtable = new Hashtable();
persistentObject.setContents(persistentHashtable);
}
else{
persistentHashtable = (Hashtable)persistentObject.getContents();
}

Jika PersistentObject memiliki isi/kontent, maka ambil data dengan Hashtable. Kemudian set value sesuai Field:

if (persistentHashtable.containsKey(KEY_USERNAME)) {
usernameField.setText((String)persistentHashtable.get(KEY_USERNAME));
}
if (persistentHashtable.containsKey(KEY_PASSWORD)) {
passwordField.setText((String)persistentHashtable.get(KEY_PASSWORD));
}
if (persistentHashtable.containsKey(KEY_HOBI1)) {
Boolean booleanObject = (Boolean)persistentHashtable.get(KEY_HOBI1);
chk.setChecked(booleanObject.booleanValue());
}
if (persistentHashtable.containsKey(KEY_HOBI2)) {
Boolean booleanObject = (Boolean)persistentHashtable.get(KEY_HOBI1);
chk2.setChecked(booleanObject.booleanValue());
}
if (persistentHashtable.containsKey(KEY_HOBI3)) {
Boolean booleanObject = (Boolean)persistentHashtable.get(KEY_HOBI1);
chk3.setChecked(booleanObject.booleanValue());
}
if (persistentHashtable.containsKey(KEY_LEVEL)) {
Integer intObject = (Integer)persistentHashtable.get(KEY_LEVEL);
levelField.setSelectedIndex(intObject.intValue());
}
if (persistentHashtable.containsKey(KEY_JOB)) {
Integer intObject = (Integer)persistentHashtable.get(KEY_JOB);
choiceJob.setSelectedIndex(intObject.intValue());
}
if (persistentHashtable.containsKey(KEY_AGE)) {
Integer intObject = (Integer)persistentHashtable.get(KEY_AGE);
ageNumeric.setSelectedValue(intObject.intValue());
}
if (persistentHashtable.containsKey(KEY_SEX1)) {
Boolean booleanObject = (Boolean) persistentHashtable.get(KEY_HOBI1);
radio.setSelected(booleanObject.booleanValue());
}
if (persistentHashtable.containsKey(KEY_SEX2)) {
Boolean booleanObject = (Boolean) persistentHashtable.get(KEY_SEX2);
radio2.setSelected(booleanObject.booleanValue());
}
if (persistentHashtable.containsKey(KEY_BORN)) {
Long longObject = (Long)persistentHashtable.get(KEY_BORN);
bornDate.setDate(longObject.longValue());
}

Pola ini sama untuk semua tipe data primitif. Bungkus mereka di kelas data/objek yang terkait dan memasukkan ke hashtable.

...
public void save() throws IOException {
persistentHashtable.put(KEY_USERNAME, usernameField.getText());
persistentHashtable.put(KEY_PASSWORD, passwordField.getText());
persistentHashtable.put(KEY_HOBI1, new Boolean(chk.getChecked()));
persistentHashtable.put(KEY_HOBI2, new Boolean(chk2.getChecked()));
persistentHashtable.put(KEY_HOBI3, new Boolean(chk3.getChecked()));
persistentHashtable.put(KEY_SEX1, new Boolean(radio.isSelected()));
persistentHashtable.put(KEY_SEX2, new Boolean(radio2.isSelected()));
persistentHashtable.put(KEY_LEVEL, new Integer(levelField.getSelectedIndex()));
persistentHashtable.put(KEY_JOB, new Integer(choiceJob.getSelectedIndex()));
persistentHashtable.put(KEY_AGE, new Integer(ageNumeric.getSelectedIndex()));
persistentHashtable.put(KEY_BORN, new Long(bornDate.getDate()));
persistentObject.commit();
}
...

PersistentObject akan menyimpan referensi ke Hashtable, kemudian tetapkan dengan commit dan akan menulis baru dari semua data yang direferensikan ke penyimpanan persistent.

Screenshot :




Jalankan aplikasi, lalu isi semua field pada form. Setelah itu tekan tombol back, muncul dialog dan pilih save. Kemudian masuk kembali ke aplikasi, maka terlihat semua field terisi sesuai dengan apa yang kita inputkan sebelumnya.

Latihan
  • Buatlah form biodata mahasiswa menggunakan layout grid manager

Sekian artikel tentang Mengatur Tata Letak (Layout) Aplikasi Blackberry dengan Eclipse

Daftar Pustaka

  • Focust, Bill. 2010. Blackberry Java Development, Second Edition. Pact Publishing.
Nikita Dini
Nikita Dini Blogger, Internet Marketer, Web Designer

Posting Komentar untuk "Mengatur Tata Letak (Layout) Aplikasi Blackberry dengan Eclipse"