Tampilkan postingan dengan label SWT. Tampilkan semua postingan
Tampilkan postingan dengan label SWT. Tampilkan semua postingan

Kamis, 08 Maret 2012

Widget-widget SWT

Pada bagian ini akan kita bahas widget-widget yang disediakan oleh SWT. Kelas Widget merepresentasikan semua objek user interface. Kelas ini adalah kelas abstrak yang tidak bisa langsung diinstansiasi.
Berikut ini adalah metode-metode yang dimiliki oleh seluruh widget turunan dari kelas abstrak Widget yang mencakup hampir seluruh widget SWT.
MetodePenjelasan
dispose()Menghapus widget dari memori.
isDisposed()Mengembalikan true jika widget ini sudah dihapus dari memori
setData(Object o)Menambahkan data tambahan (terserah kita) ke dalam suatu widget. Data ini disebut data aplikasi. Data ini tidak akan ditampilkan pada widget.
getData()Mengembalikan Object yang merupakan data yang bisa kita tambahkan ke dalam widget
setData(String key, Object o)Jika kita akan menambahkan banyak data ke dalam objek, akan lebih mudah jika kita menandai data tersebut dengan suatu kunci key. Data ini tidak akan ditampilkan pada widget.
getData(String key)Mengembalikan Object yang merupakan data tambahan ke suatu widget, yang memiliki kunci key
getStyle()Mengembalikan int yang merupakan bit gaya suatu widget.
Event ini terdapat pada semua kelas turunan dari kelas abstrak Widget
Kelas Event (event bertipe)Interface/Kelas Listener (listener bertipe)Metode (listener bertipe)Jenis event (event tanpa tipe)Penjelasan
DisposeEventDisposeListenerwidgetDisposed(DisposeEvent)SWT.DisposeWidget dihapus

Pengenalan Konsep Widget pada SWT

Secara tradisional, widget bisa dibayangkan seperti perangkat abstrak yang berguna untuk melakukan tugas tertentu. Istilah ini popules dalam bidan ekonomi. Para pembuat software meminjam istilah ini untuk menyebut suatu paket program pembuat GUI (grahical user interface). SWT adalah kepanjangan dari Standard Widget Toolkit karena widget merupakan dasar pembangun suatu aplikasi yang dibangun dengan menggunakan SWT.
Apa itu widget?
Widget adalah elemen GUI yang dapat berinteraksi dengan user. Widget mengatur dan menentukan kondisinya sendiri dengan memggunakan kombinasi beberapa operasi grafik. Dengan menggunakan mouse atau keyboard, user bisa mengubah kondisi suatu widget. Ketika kondisi suatu widget berubah, baik diubah oleh user ataupun diubah oleh suatu kode program, maka widget akan menggambar dirinya kembali untuk merefleksikan hasil perubahannya.
Siklus hidup widget
Widget memiliki siklus hidup sendiri. Widget dibuat oleh programmer dan dibuang ketika tidak lagi dibutuhkan. Karena siklus hidup suatu widget sangat penting untuk memahami SWT, maka kita akan bahas lebih jauh pada bagian ini.
1. Membuat Widget
Widget dibuat dengan menggunakan konstruktornya, atau dengan kata lain membuat instansi suatu kelas. Ketika widget dibuat, widget akan mengambil sumber daya komputer (memori, prosesor) dari sistem operasi. Artinya semua widget akan berada di level sistem operasi, sehingga unjuk kerja dan pengaturan memori akan lebih optimal.
Konstruktor akan mengambil argumen yang biasanya tidak akan bisa diubah setelah widget dibuat. Ada 4 kemungkinan konstruktor dari suatu jenis widget :
  • Widget()
  • Widget(Widget induk)
  • Widget(Widget induk, int bitGaya)
  • Widget(Widget induk, int bitGaya, int posisi)
Widget tidak bisa dibuat tanpa induk. Ini bisa dilihat dari pengenalan tentang widget di bagian sebelumnya bagaimana widget tersusun secara hirarkis. Jenis induknya tergantung dari jenis widgetnya. Misalnya, induk dari suatu menu harus berupa menu, dan tidak bisa berupa tombol. Kompiler akan mengecek apakah induk suatu widget sesuai dengan tipenya, jika tidak, kompiler akan menampilkan pesan kesalahan. (Pada beberapa platform, kita dibolehkan untuk mengubah induk suatu widget. Akan tetapi SWT tidak memiliki metode getParent() pada kelas-kelas Widgetnya. Ini disebabkan karena kompleksitasnya yang mengharuskan kita untuk melakukan type cast kepada tipe induk yang benar.)
Bit gaya (style) adalah nilai bit integer yang digunakan untuk mengatur perilaku dan tampilan suatu widget. Biasanya bit gaya hanya dibutuhkan pada saat widget dibuat, misalnya memilih jenis editor multi baris atau baris tunggal. Karena atribut ini tidak bisa diubah setelah widget dibuat, maka gaya suatu widget juga tidak bisa diubah setelah widget diinstansikan.
Semua gaya widget dikumpulkan sebagai konstanta pada kelas org.eclipse.swt.SWT. Kita bisa menggambungkan beberapa gaya dengan menggunakan operasi OR. Misalnya kode berikut akan membuat widget teks multi baris yang memiliki tepi serta scroll bar horizontal dan vertikal.
Text teks = new Text (induk, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);
Gaya suatu widget bisa kita ambil setelah widget tersebut dibuat dengan menggunakan metode instansi getStyle(). Untuk mengujinya, kita bisa menggunakan operasi AND yang jika hasilnya tidak nol, maka widget tersebut memiliki gaya yang diuji. Misalnya, kode berikut menguji apakah suatu widget teks memiliki tepi, kemudian mencetak hasilnya pada konsol.
if ((teks.getStyle() & SWT.BORDER) != 0)
    System.out.println("teks memiliki tepi");
else
    System.out.println("teks tidak memiliki tepi");
Paremeter posisi memungkinkan kita membuat widget baru pada suatu induk di posisi tertentu. Jika tidak diberikan, maka secara otomatis widget baru akan ditempatkan di akhir posisi. Hal ini akan lebih memudahkan kita untuk membuat widget pada urutan tertentu, misalnya membuat menu dengan urutan tertentu.
2. Membuang widget
Ketika widget tidak lagi dibutuhkan, termasuk ketika program selesai, maka widget harus dihapus secara eksplisit dengan menggunakan metode instansi dispose(). Metode ini akan menyembunyikan widget, menghapus widget yang ditampungnya, dan membuat semua referensi di dalamnya menjadi null.
Jika metode dispose() tidak dipanggil setelah program selesai dijalankan, maka hal ini akan menyebabkan kebocoran memori, di mana memori pada sistem operasi lambat laun akan habis dipenuhi oleh widget yang tidak dihapus setelah program selesai.
Memanggil metode dispose() untuk widget yang sudah dibuang, akan melemparkan pengecualian SWTException. Untuk mengetahui apakah suatu widget sudah dihapus, kita bisa menggunakan metode instansi isDisposed().
Ada dua aturan yang penting untuk diingat :
  • Jika Anda membuat widget, maka pastikan Anda menghapusnya. Atau dengan kata lain, semua widget yang Anda buat dengan konstruktor wajib dihapus. Akan tetapi jika Anda mendapatkan widget dari metode instansi suatu widget, misalnya Font huruf = kontrol.getFont(), maka Anda tidak perlu menghapusnya
  • Jika Anda menghapus suatu widget, maka semua widget di bawahnya akan dihapus juga. Atau dengan kata lain, jika Anda menghapus suatu Shell, maka isi seluruh Shell akan dihapus secara otomatis. Demikian juga halnya dengan menu, jika Anda menghapus menu utama, maka semua sub-menu akan otomatis dihapus.

Mengkompilasi dan Membuat Program SWT Berjalan di Luar Eclipse

Untuk bisa membuat program kita berguna untuk orang lain, kita harus bisa mengkompilasi dan membuat program tersebut sebagai satu "paket". Proses ini disebut menyebarkan (deploy). Pada Eclipse, program yang telah kita buat bisa kita deploy dalam format JAR (Java Archive), yang menggabungkan semua file kelas yang sudah dikompilasi beserta pustaka yang dibutuhkan untuk bisa menjalankan program tersebut.
Mari kita lihat contoh program HelloSWT yang sudah dibahas sebelumnya. Untuk men-deploy program ini sehingga bisa dijalankan di luar Eclipse, lakukan langkah-langkah berikut :
  • Klik kanan pada nama proyek Anda, kemudian pilih Export. Setelah itu kotak dialog akan terbuka. Kemudian pilih Runnable JAR File dari dalam folder Java.
  • Pilih HelloSWT - HelloSWT pada Launch configuration dan juga masukkan di mana file JAR hasilnya akan ditempatkan. Jika nama direktori tidak diberikan, Eclipse akan meletakkan file JAR tersebut pada direktori di mana workspace berada, yaitu di mana data proyek ditempatkan. (Misalnya, di komputer saya proyek HelloSWT berada pada direktori C:\belajarjava.lyracc.com\HelloSWT, maka file JAR tersebut akan diletakkan pada direktori C:\belajarjava.lyracc.com\)

  • Klik Finish, kemudian OK untuk setiap pertanyaan yang mungkin muncul berikutnya. Sekarang, gunakan Windows Explorer untuk mencari di mana file JAR hasilnya berada. Double click pada file tersebut dan Anda akan bisa menjalankannya langsung seperti aplikasi lainnya. Anda bisa juga mengirimkan file ini melalui email atau mengkopinya melalui flash disk ke teman atau kerabat Anda tanpa perlu menyertakan Eclipse.

  • CATATAN : Ingat bahwa SWT bergantung penuh pada sistem operasi yang Anda gunakan, karena SWT menggunakan widget bawaan sistem operasi seperti dijelaskan pada bagian sebelumnya. Ketika Anda membuat program ini pertama kali, Anda menambahkan pustaka SWT yang spesifik terhadap sistem operasi di mana Eclipse berjalan. Artinya, jika Anda menambahkan pustaka org.eclipse.swt.win32.win32.x86_3.4.1.v3449c, maka program JAR Anda hanya akan bisa dijalankan pada sistem operasi Windows. Untuk bisa menjalankannya pada sistem operasi lain, misalnya Linux, maka Anda harus menambahkan pustaka SWT khusus Linux yang bisa diunduh secara terpisah atau menggunakan Eclipse pada Linux.
  • Berikut ini adalah screen shot hasil jalannya program

Memulai SWT

  • Anda membutuhkan "link" ke pustaka SWT. Ada dua cara untuk melakukannya :
  1. Menggunakan pustaka SWT bawaan dari Eclipse. Untuk ini Anda tidak perlu mendownload apa-apa. Pustaka SWT bawaan eclipse terdapat pada direktori Eclipse Anda, misalnya pada Windows (C:\eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar) atau pada Linux (eclise/plugins/org.eclipse.swt.gtk.linux.x86_3.4.1.v3452b.jar)
  2. Menggunakan pustaka SWT beserta sumber kodenya untuk dokumentasi lebih lengkap. Pustaka SWT ini bisa diunduh pada alamat berikut : http://www.eclipse.org/swt/. Pilih Releases -> Stable -> (platform Anda, misalnya Windos atau Linux). Setelah diunduh, import ke dalam Eclipse seperti Anda mengimport proyek-proyek pada website ini, yaitu dengan File -> Import -> General -> Existing Projects Into Workspace -> Select Archieve File -> (file zip SWT hasil download) -> Finish. Langkah ini hanya dilakukan satu kali saja.
  • Buat proyek baru dari Eclipse, File -> New -> Java Project, kemudian isi Project Name dengan HelloSWT dan click Next
  • Kita harus menambahkan pustaka SWT ke dalam proyek kita.
  1. Jika Anda menggunakan SWT bawaan Eclipse seperti di atas, pilih halaman Libraries. Klik Add External JAR, kemudian navigasi ke direktori plugin di dalam instalasi Eclipse Anda. Misalnya di komputer saya, direktori itu berada di C:\eclipse\plugins. Pilih JAR untuk SWT pada direktori tersebut. Namanya tergantung dari sistem operasi Anda, misalnya pada Windows file ini bernama org.eclipse.swt.win32.win32.x86_3.4.1.v3449c. Klik OK setelah file ini ditambahkan di dalam folder Libraries.
  1. Jika Anda mengunduh proyek SWT, pilih halaman Projects. Klik Add, kemudian tambahkan org.eclipse.swt. Kemudian klik OK setelah proyek ini ditambahkan.
  • Folder proyek baru akan dibuat, seperti pada gambar berikut. 
  • Kemudian klik kanan pada folder src, dan pilih New -> Class. Isi nama kelas dengan HelloSWT, nama package dengan helloswt, dan tik "public static void main(String[] args)" untuk membuat metode main() secara otomatis.
  • Ketik kode berikut ini di dalam metode main()
Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout( new RowLayout());
        Label label = new Label(shell, SWT.NONE);
        label.setText("Hello, World!");
        shell.pack();
        shell.open();
        while (!shell.isDisposed())
            if (!display.readAndDispatch())
                display.sleep();
        display.dispose();
        label.dispose();
  • Perhatikan bahwa Display, Shell, RowLayout dan Label diberi tanda merah sebagai tanda bahwa kesalahan program terjadi.
  • Sekarang pindahkan mouse Anda pada kesalahan pada kelas Display. Eclipse akan memberi tahu Anda kesalahan apa yang terjadi. Pada contoh ini, kelas 'Display' belum diketahui oleh Eclipse. Klik pada pilihan Import 'Display' (org.eclipse.swt.widgets).  Lihat sekarang di awal program Anda Eclipse menambahkan import org.eclipse.swt.widgets.Display; secara otomatis.
  • Lakukan hal yang sama pada semua kesalahan, yaitu Shell, Label, RowLayout dan SWT.NONE, sehingga tidak ada lagi kesalahan yang dilaporkan oleh Eclipse.
  • Untuk menjalankan program Anda, klik tombol Run seperti pada gambar berikut.
  • Berikut ini adalah tampilan program SWT pertama Anda.