Kayak gini nih suatu Project yang udah menerapkan Swing make over
jadi cantikkan tampilannya : :)
selamat mencoba, hehe.. ^_^)
Tampilkan postingan dengan label Java Moklet. Tampilkan semua postingan
Tampilkan postingan dengan label Java Moklet. Tampilkan semua postingan
Kamis, 26 April 2012
Swing Make Over
SwingMakeOver merupakan teknik memanipulasi tampilan User Interfaces (Java Swing). Teknik ini dilakukan dengan menggunakan penggambaran agar tampilan komponen-komponen Java Swing seperti TextField, Button dan lain-lain menjadi lebih cantik kelihatannya.
Apa kelebihan SwingX? SwingX menawarkan fitur-fitur ekstra yang tidak ditemui di Swing secara siap jadi. Sebagai contoh, ada yang disebut sebagai Highlighter, untuk memberi highlight (bisa berupa warna background berbeda dan sebagainya) pada sel tertentu di JXTable, JXList, JXTree, dan sebagainya. Komponen yang diawali JX kebanyakan adalah turunan dari komponen Swing standar, misalnya JXTable adalah turunan dari JTable. Demikian juga, JXComboBox adalah turunan dari JComboBox. JXComboBox sudah mendukung fitur highlight dengan adanya fungsi addHighlighter(). Jika kita ingin menampilkan nilai dibawah 50 dengan background merah di JXComboBox, kita dapat menggunakan ColorHighlighter.
sementara ini dulu postingan singkat tentang Java Swing Make Over.
tunggu tutorial yang akan datang :)
sumber :
http://eecchhoo.wordpress.com/tag/java-swing-make-over/
http://thesolidsnake.wordpress.com/category/java-technology/java-framework-api/
Kamis, 08 Maret 2012
Widget-widget SWT
Pada bagian ini akan kita bahas widget-widget yang disediakan oleh SWT. Kelas
Berikut ini adalah metode-metode yang dimiliki oleh seluruh widget turunan dari kelas abstrak
Event ini terdapat pada semua kelas turunan dari kelas abstrak
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.Metode | Penjelasan |
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. |
Widget
Kelas Event (event bertipe) | Interface/Kelas Listener (listener bertipe) | Metode (listener bertipe) | Jenis event (event tanpa tipe) | Penjelasan |
DisposeEvent | DisposeListener | widgetDisposed(DisposeEvent) | SWT.Dispose | Widget 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 :
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.
Gaya suatu widget bisa kita ambil setelah widget tersebut dibuat dengan menggunakan metode instansi
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
Jika metode
Memanggil metode
Ada dua aturan yang penting untuk diingat :
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)
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);
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");
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 :


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
Stream, Reader, dan Writer
Tanpa bisa berinteraksi dengan dunia lain, suatu program tidak ada gunanya. Interaksi suatu program dengan dunia lain sering disebut input/output atau I/O. Sejak dulu, salah satu tantangan terbesar untuk mendesain bahasa pemrograman baru adalah mempersiapkan fasilitas untuk melakukan input dan output. Komputer bisa terhubung dengan beragam jenis input dan output dari berbagai perangkat. Jika bahasa pemrograman harus dibuat secara khusus untuk setiap jenis perangkat, maka kompleksitasnya akan tak lagi bisa ditangani.
Salah satu kemajuan terbesar dalam sejarah pemrograman adalah adanya konsep (atau abstraksi) untuk memodelkan perangkat I/O. Dalam Java, abstraksi ini disebut dengan aliran (stream). Bagian ini akan memperkenalkan tentang aliran, akan tetapi tidak menjelaskan dengan komplit. Untuk lebih lengkapnya, silakan lihat dokumen resmi Java.
Ketika berhubungan dengan input/output, kita harus ingat bahwa ada dua kategori data secara umum : data yang dibuat oleh mesin, dan data yang bisa dibaca manusia. Data yang dibuat mesin ditulis dengan model yang sama dengan bagaimana data tersebut disimpan di dalam komputer, yaitu rangkaian nol dan satu. Data yang bisa dibaca manusia adalah data dalam bentuk rangkaian huruf. Ketika kita membaca suatu bilangan 3.13159, kita membacanya sebagai rangkaian huruf yang kita terjemahkan sebagai angka. Angka ini akan ditulis dalam komputer sebagai rangkaian bit yang kita tidak mengerti.
Untuk menghadapi kedua jenis data ini, Java memiliki dua kategori besar untuk aliran : aliran byte untuk data mesin (byte stream), dan aliran karakter (character stream) untuk data yang bisa dibaca manusia. Ada banyak kelas yang diturunkan dari kedua kategori ini.
Setiap objek yang mengeluarkan data ke aliran byte masuk sebagai kelas turunan dari kelas abstrak
OutputStream
. Objek yang membaca data dari aliran byte diturunkan dari kelas abstrak InputStream
. Jika kita menulis angka ke suatu OutputStream
, kita tidak akan bisa membaca data tersebut karena ditulis dalam bahasa mesin. Akan tetapi data tersebut bisa dibaca kembali oleh InputStream
. Proses baca tulis data akan menjadi sangat efisien, karena tidak ada penerjemahan yang harus dilakukan : bit yang digunakan untuk menyimpan data di dalam memori komputer hanya dikopi dari dan ke aliran tersebut.Untuk membaca dan menulis data karakter yang bisa dimengerti manusia, kelas utamanya adalah
Reader
dan Writer
. Semua kelas aliran karakter merupakan kelas turunan dari salah satu dari kelas abstrak ini. Jika suatu angka akan ditulis dalam aliran Writer
, komputer harus bisa menerjemahkannya ke dalam rangkaian karakter yang bisa dibaca maunsia. Membaca angka dari aliran
Reader
menjadi variabel numerik juga harus diterjemahkan, dari deretan karakter menjadi rangkaian bit yang dimengerti komputer. (Meskipun untuk data yang terdiri dari karakter, seperti dari editor teks, masih akan ada beberapa terjemahan yang dilakukan. Karakter disimpan dalam komputer dalam nilai Unicode 16-bit. Bagi orang yang menggunakan alfabet biasa, data karakter biasanya disimpan dalam file dalam kode ASCII, yang hanya menggunakan 8-bit. Kelas Reader
dan Writer
akan menangani perubahan dari 16-bit ke 8-bit dan sebaliknya, dan juga menangani alfabet lain yang digunakan negara lain.)Adalah hal yang mudah untuk menentukan apakah kita harus menggunakan aliran byte atau aliran karakter. Jika kita ingin data yang kita baca/tulis untuk bisa dibaca manusia, maka kita gunakan aliran karakter. Jika tidak, gunakan aliran byte.
System.in
dan System.out
sebenarnya adalah aliran byte dan bukan aliran karakter, karenanya bisa menangani input selain alfabet, misalnya tombol enter, tanda panah, escape, dsb.Kelas aliran standar yang akan dibahas berikutnya didefinisikan dalam paket
java.io
beserta beberapa kelas bantu lainnya. Kita harus mengimpor kelas-kelas tersebut dari paket ini jika kita ingin menggunakannya dalam program kita. Artinya dengan menggunakan "import java.io.*
" di awal kode sumber kita.Aliran tidak digunakan dalam GUI, karena GUI memiliki aliran I/O tersendiri. Akan tetapi kelas-kelas ini digunakan juga untuk file atau komunikasi dalam jaringan. Atau bisa juga digunakan untuk komunikasi antar thread yang sedang bekerja secara bersamaan. Dan juga ada kelas aliran yang digunakan untuk membaca dan menulis data dari dan ke memori komputer.
Listener
Supaya suatu event berarti, suatu program harus bisa mendeteksi event dan bereaksi akan event tersebut. Untuk mendeteksi suatu event, suatu program harus mendengarkannya. Mendengarkan event ini dilakukan oleh objek yang berna,a pendengar event (event listener). Objek listener harus memiliki metode instansi untuk menangani event yang didengarkannya. Bentuknya bervariasi tergantung dari jenis event yang ditanganinya.
Ada beberapa hal detail yang harus diingat untuk bisa bekerja dengan event. Beberapa langkah yang harus diingat :
1. Menambahkan import paket yang dibutuhkan, misalnya "org.eclipse.swt.events"
2. Mendeklarasikan kelas yang mengimplementasikan interface suatu listener
3. Menambahkan aksi yang dilakukan oleh kelas baru tersebut. Aksi ini adalah aksi yang dilakukan untuk menangani suatu event
4. Mendaftarkan event tersebut ke komponen yang mungkin memberikan event.
Objek apapun bisa bertindah sebagai event listener asalkan ia mengimplementasikan interface yang tepat. Suatu komponen dapat mendengarkan event yang dihasilkannya sendiri. Suatu kelas dapat dibuat secara khusus hanya untuk mendengarkan suatu event. Kebanyakan orang menganggap lebih mudah untuk menggunakan kelas bertingkat anonim untuk mendengarkan suatu objek. (Kelas bertingkat anonim telah dibahas sebelumnya di sini).
Seperti hanya Event, SWT memiliki dua jenis listener : tanpa tipe dan bertipe. Masing-masing digunakan untuk menangani event tanpa tipe dan event bertipe.
Listener Tanpa Tipe (untuk menangani event tanpa tipe)
nterface generik yang digunakan untuk menangai event tanpa tipe dinamakan
Metode
Metode ini akan menambah
Contoh berikut mengilustrasikan bagaimana menambah suatu Listener ke dalam suatu widget, yang akan dipanggil ketika event SWT.Dispose terjadi.
Perhatikan bahwa bentuk di atas menggunakan kelas anonim yang langsung diturunkan dari interface Listener. Di dalam kelas anonim tersebut, metode
Jika beberapa listener ditambahkan, maka mereka akan dipanggil dengan urutan ketika mereka ditambahkan (first in first called). Artinya listener pertama diberi kesempatan untuk mengolah event (mungkin untuk memfilter sejumlah data) sebelum listener lain melakukan tugasnya. Kita juga bisa menambah listener yang sama beberapa kali, yang artinya listener tersebut akan dipanggil beberapa kali.
Kita bisa menghapus listener dari suatu widget dengan menggunakan metode
Kita juga bisa memanggil suatu listener untuk melakukan tugas tertentu, yaitu dengan menggunakan metode
Listener Bertipe (untuk menangani Event bertipe)
Karena event bertipe dibuat mengikuti pola listener pada JavaBeans, penggunaan listener bertipe sangat mirip dengan penggunaan listener pada AWT/Swing.
Misalnya untuk mendengarkan event ketika suatu widget dihapus, maka aplikasi bisa menggunakan
Listener bertipe bisa dihapus dengan menggunakan metode penghapus untuk setiap listner. Misalnya, listener untuk event ketika suatu widget dihapus bisa dibuang dengan menggunakan
Tabel berikut merangkum event bertipe, nama interface listener yang menanganinya, serta metode pada interface tersebut, dibandingkan dengan listener tanpa tipe.
Ada beberapa hal detail yang harus diingat untuk bisa bekerja dengan event. Beberapa langkah yang harus diingat :
1. Menambahkan import paket yang dibutuhkan, misalnya "org.eclipse.swt.events"
2. Mendeklarasikan kelas yang mengimplementasikan interface suatu listener
3. Menambahkan aksi yang dilakukan oleh kelas baru tersebut. Aksi ini adalah aksi yang dilakukan untuk menangani suatu event
4. Mendaftarkan event tersebut ke komponen yang mungkin memberikan event.
Objek apapun bisa bertindah sebagai event listener asalkan ia mengimplementasikan interface yang tepat. Suatu komponen dapat mendengarkan event yang dihasilkannya sendiri. Suatu kelas dapat dibuat secara khusus hanya untuk mendengarkan suatu event. Kebanyakan orang menganggap lebih mudah untuk menggunakan kelas bertingkat anonim untuk mendengarkan suatu objek. (Kelas bertingkat anonim telah dibahas sebelumnya di sini).
Seperti hanya Event, SWT memiliki dua jenis listener : tanpa tipe dan bertipe. Masing-masing digunakan untuk menangani event tanpa tipe dan event bertipe.
Listener Tanpa Tipe (untuk menangani event tanpa tipe)
nterface generik yang digunakan untuk menangai event tanpa tipe dinamakan
Listener
. Listener tanpa tipe dapat ditambahkan pada suatu widget dengan menggunakan metode addListener()
.Metode
addListener()
memiliki bentuk sepertiaddListener(int jenisEvent, Listener listener)
listener
ke dalam koleksi listener yang akan dipanggil ketika event tipe tertentu terjadi. Ketika suatu event terjadi, maka listener akan dipanggil dengan menggunakan metode handleEvent()
.Contoh berikut mengilustrasikan bagaimana menambah suatu Listener ke dalam suatu widget, yang akan dipanggil ketika event SWT.Dispose terjadi.
widget.addListener(SWT.Dispose, new Listener() { public void handleEvent(Event event) { // widget was disposed } });
handleEvent()
harus diimplementasikan, di mana implementasinya adalah tugas yang harus dilakukan ketika widget dihapus.Jika beberapa listener ditambahkan, maka mereka akan dipanggil dengan urutan ketika mereka ditambahkan (first in first called). Artinya listener pertama diberi kesempatan untuk mengolah event (mungkin untuk memfilter sejumlah data) sebelum listener lain melakukan tugasnya. Kita juga bisa menambah listener yang sama beberapa kali, yang artinya listener tersebut akan dipanggil beberapa kali.
Kita bisa menghapus listener dari suatu widget dengan menggunakan metode
removeListener()
. Bentuknya adalah sebagai berikutremoveListener(int jenhsEvent, Listener listener)
Untuk menghapus suatu listener, kita harus memberikan instansi yang persisi sama ketika listener tersebut ditambahkan. JIka beberapa instansi listener yang sama sudah ditambahkan sebelumnya, maka kita harus menghapusnya berulang kali sejumlah ia ditambahkan. Secara umum, menghapus suatu listener mungkin tidak diperlukan. Listener akan diambil oleh pemulung memori ketika suatu widget dihapus dan listener ini tidak lagi digunakan di manapun di dalam program.Kita juga bisa memanggil suatu listener untuk melakukan tugas tertentu, yaitu dengan menggunakan metode
notifyListeners
, yang memiliki bentuk sepertinotifyListeners(int jenisEvent, Event event)
jenisEvent
adalah jenis event yang akan dilakukan, dan Event adalah objek yang berisi event yang akan dilakukan. Hal penting yang harus dicatat adalah memanggil metode notifyListeners()
tidak menyebabkan event akan benar-benar terjadi. Misalnya memanggil notifyListeners()
dengan jenis SWT.MouseDown
tidak akan menyebabkan tombol terlihat seperti ditekan. Dan juga memanggil notifyListeners()
tidak menjamin bahwa semua data pada event terinisialisasi seperti pada event sesungguhnya.Listener Bertipe (untuk menangani Event bertipe)
Karena event bertipe dibuat mengikuti pola listener pada JavaBeans, penggunaan listener bertipe sangat mirip dengan penggunaan listener pada AWT/Swing.
Misalnya untuk mendengarkan event ketika suatu widget dihapus, maka aplikasi bisa menggunakan
addDisposeListener()
, yang memiliki bentuk sepertiaddDisposeListener(DisposeListener listener)
Metode ini menambahkan listener ke dalam koleksi listener yang akan dipanggil ketike suatu widget dihapus. Ketika suatu widget dihapus, maka listener akan dipanggil dengan memanggil metode
widgetDisposed()
.Potongan kode berikut digunakan untuk menangani event ketika suatu widget dihapus.
widget.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent dvent) { // widget was disposed } });
DisposeListener
adalah suatu interface. Jika ada lebih dari satu metode yang didefinisikan dalam listener, maka SWT akan secara otomatis menambahkan kelas adapter yang berisi implementasi kosong dari metode-metode yang didefinisikan pada interface tersebut. Misalnya interface SelectionListener
memiliki dua metode, yaitu widgetSelected()
dan widgetDefaultSelected
, yang keduanya mengambil argumen bertipe SelectionEvents
. Dalam hal ini kelas SelectionAdapter
tersedia untuk memberikan implementasi kosong untuk setiap metode. Kelas adapter ini hanyalah sebagai kelas bantu yang sesuai dengan konvensi pada listener JavaBeans.Listener bertipe bisa dihapus dengan menggunakan metode penghapus untuk setiap listner. Misalnya, listener untuk event ketika suatu widget dihapus bisa dibuang dengan menggunakan
removeDisposeListener()
, yang memiliki bentuk removeDisposeListener(DisposeListener listener)
listener
adalah objek listener yang akan dihapus dari koleksi listener yang dipanggil ketika widget dihapus.Tabel berikut merangkum event bertipe, nama interface listener yang menanganinya, serta metode pada interface tersebut, dibandingkan dengan listener tanpa tipe.
Event Bertipe | Interface Listener | Metode | Jenis Event Tanpa Tipe |
ArmEvent | ArmListener | widgetArmed(ArmEvent) | SWT.Arm |
ControlEvent | ControlListener (dan ControlAdapter) | controlMoved(ControlEvent) controlResized(ControlEvent) | SWT.Move SWT.Resize |
DisposeEvent | DisposeListener | widgetDisposed(DisposeEvent) | SWT.Dispose |
FocusEvent | FocusListener (dan FocusAdapter) | focusGained(FocusEvent) focusLost(FocusEvent) | SWT.FocusIn SWT.FocusOut |
HelpEvent | HelpListener | helpRequested(HelpEvent) | SWT.Help |
KeyEvent | KeyListener (dan KeyAdapter) | keyPressed(KeyEvent) keyReleased(keyEvent) | SWT.KeyDown SWT.KeyUp |
MenuEvent | MenuListener (dan MenuAdapter) | menuHidden(MenuEvent) menuShown(MenuEvent) | SWT.Hide SWT.Show |
ModifyEvent | ModifyListener | modifyText(ModifyEvent) | SWT.Modify |
MouseEvent | MouseListener (dan MouseAdapter) | mouseDoubleClick(MouseEvent) mouseDown(MouseEvent) mouseUp(MouseEvent) | SWT.MouseDoubleClick SWT.MouseDown SWT.MouseUp |
MouseEvent | MouseMoveListener | mouseMove(MouseEvent) | SWT.MouseMove |
MouseEvent | MouseTrackListener (dan MouseTrackAdapter) | mouseEnter(MouseEvent) mouseExit(MouseEvent) mouseHover(MouseEvent) | SWT.MouseEnter SWT.MouseExit SWT.MouseHover |
PaintEvent | PaintListener | paintControl(PaintEvent) | SWT.Paint |
SelectionEvent | SelectionListener (dan SelectionAdapter) | widgetDefaultSelected(SelectionEvent) widgetSelected(SelectionEvent) | SWT.DefaultSelection SWT.Selection |
ShellEvent | ShallListener (dan ShellAdapter) | shellActivated(ShellEvent) shellClosed(ShellEvent) shellDeactivated(ShellEvent) shellIconified(ShellEvent) shellDeiconified(ShellEvent) | SWT.Activate SWT.Close SWT.Deactivate SWT.Iconify SWT.Deiconify |
TraverseEvent | TraverseListener | keyTraversed(TraverseEvent) | SWT.Traverse |
TreeEvent | TreeListener (dan TreeAdapter) | treeCollapsed(TreeEvent) treeExpanded(TreeEvent) | SWT.Collapse SWT.Expand |
VerifyEvent | VerifyListener | verifyText(VerifyEvent) | SWT.Verify |
Event
Event adalah inti dari pemrograman GUI. GUI program tidak memiliki alur apa yang akan terjadi ketika program dijalankan, dalam arti langkah per langkah dari awal hingga akhir. Akan tetapi, program harus bisa bereaksi akan berbagai event (kejadian) yang bisa berasal dari mouse atau keyboard. User bisa menekan tombol keyboard apa saja, menggeser mouse, atau menekan tombol mouse. User bisa melakukannya kapan saja, dan komputer harus bisa bereaksi dengan tepat.
Dalam Java, event dilambangkan oleh objek. Ketika suatu event terjadi, sistem akan mengumpulkan informasi yang sesuai dengan even tersebut, kemudian membuat objek yang berisi informasi ini. Jenis even berbeda dilambangkan oleh objek dengan kelas yang berbeda pula. Setelah objek event dibuat, ia akan diberikan sebagai parameter pada subrutin yang ditugaskan untuk menangani event tersebut. Dengan menulis subrutin ini, programmer bisa memberi tahu apa yang harus dilakukan jika mouse diklik atau keyboard ditekan, misalnya.
Sebagai programmer Java, kita hanya melihat even dari sisi yang lebih umum. Banyak sekali hal yang terjadi antara tombol ditekan hingga subrutin yang kita buat melakukan tugasnya. Secara garis besar, dalam metode
main()
kita harus menuliskan perulangan dalam bentuk seperti :ketika program masih berjalan:
Tunggu hingga even berikutnya terjadi
Panggil subrutin untuk menangai event tersebut
Perulangan ini disebut perulangan event. Pada SWT kita harus menulis sendiri perulangan event ini pada metode
main()
kita dalam bentuk while (!shell.isDisposed()) if (!display.readAndDispatch()) display.sleep();
SWT memiliki dua jenis event, yaitu event tanpa tipe dan event bertipe.
Event tanpa tipe diwakili oleh kelas
Event
. Kelas ini menyimpan informasi yang berbeda-beda tergantung dari jenis. Akan tetapi secara umum semua event jenis apapun memiliki informasi berikut :Informasi | Penjelasan |
display | Display di mana event ini terjadi |
widget | Widget di mana event ini terjadi |
type | Jenis event yang terjadi |
Jenis event yang terjadi beserta penjelasannya dirangkum dalam tabel berikut ini :
Jenis Event | Penjelasan |
SWT.KeyDown | Tombol ditekan |
SWT.KeyUp | Tombol dilepaskan |
SWT.MouseDown | Tombol mouse ditekan |
SWT.MouseUp | Tombol mouse dilepaskan |
SWT.MouseMove | Mouse berpindah posisi |
SWT.MouseEnter | Mouse masuk ke wilayah klien |
SWT.MouseHover | Mouse berada di sekitar klien |
SWT.MouseExit | Mouse keluar dari wilayah klien |
SWT.MouseDoubleClick | Mouse di-double click |
SWT.Paint | Suatu widget diberi perintah untuk menggambar dirinya |
SWT.Move | Posisi suatu widget berubah |
SWT.Resize | Ukuran widget berubah |
SWT.Dispose | Widget dihapus |
SWT.Selection | Suatu aksi pemilihan dilakukan dalam widget (misalnya memilih item pada drop down list |
SWT.DefaultSelection | Ada pilihan awal pada suatu widget |
SWT.FocusIn | Widget menerima fokus dari keyboard |
SWT.FocusOut | Widget kehilangan fokus dari keyboard |
SWT.Expand | Item pada pohon dikembangkan |
SWT.Collapse | Item pada pohon ditutup |
SWT.Iconify | Jendela Shell diminimasi |
SWT.Deiconify | Jendela Shell dibuka (restore) |
SWT.Close | Jendela Shell ditutup (dengan tombol X) |
SWT.Show | Widget bisa dilihat |
SWT.Hide | Widget disembunyikan |
SWT.Modify | Teks berubah pada suatu kontrol |
SWT.Verify | Input teks sedang diverifikasi |
SWT.Activate | Widget sedang diaktifkan |
SWT.Deactivate | Widget dimatikan |
SWT.Help | User meminta pertolongan tentang suatu widget |
SWT.DragDetect | Aksi drag-and-drop dideteksi |
SWT.MenuDetect | User menekan tombol kik kanan untuk mengaktifkan menu konteks |
SWT.Arm | Item pada menu digambarkan |
SWT.Traverse | Navigasi pada keyboard dideteksi |
SWT.HardKeyDown | Tombol pada hardware ditekan (untuk perangkat genggam) |
SWT.HardKeyUp | Tombol pada hardware dilepas (untuk perangkat genggam) |
Suatu event juga bisa memiliki tipe. Artinya event yang dihasilkan merupakan objek bertipe suatu kelas, misalnya MouseEvent, bukan hanya bertipe kelas Event yang jenisnya disimpan dalam variabel tertentu. Event bertipe mengikuti pola JavaBeans standar. Kelas-kelas ini terdapat dalam paket
org.eclipse.swt.events
Tabel berikut menggambarkan perbandingan antara event bertipe dan jenis event dari event tanpa tipe.
;tr>Event Bertipe | Jenis Event Tanpa Tipe |
ArmEvent | SWT.Arm |
ControlEvent | SWT.Move SWT.Resize |
DisposeEvent | SWT.Dispose |
FocusEvent | SWT.FocusIn SWT.FocusOut |
HelpEvent | SWT.Help |
KeyEvent | SWT.KeyDown SWT.KeyUp |
MenuEvent | SWT.Hide SWT.Show |
ModifyEvent | SWT.Modify |
MouseEvent | SWT.MouseDoubleClick SWT.MouseDown SWT.MouseUp |
MouseEvent | SWT.MouseMove |
MouseEvent | SWT.MouseEnter SWT.MouseExit SWT.MouseHover |
PaintEvent | SWT.Paint |
SelectionEvent | SWT.DefaultSelection SWT.Selection |
ShellEvent | SWT.Activate SWT.Close SWT.Deactivate SWT.Iconify SWT.Deiconify |
TraverseEvent | SWT.Traverse |
TreeEvent | SWT.Collapse SWT.Expand |
VerifyEvent | SWT.Verify |
Pada versi awal SWT, hanya ada satu jenis yaitu jenis tanpa tipe. Setelah diskusi yang cukup antar beberapa programmer Eclipse, komunitas user SWT dan developernya, maka akhirnya diputuskan untuk menambahkan jenis bertipe seperti pada JavaBeans. Alasannya adalah untuk memudahkan pemrograman SWT bagi programmer yang sudah terlanjur terbiasa dengan AWT/Swing. Jenis tanpa tipe masih tetap ada seperti biasa.
Memulai SWT
- Anda membutuhkan "link" ke pustaka SWT. Ada dua cara untuk melakukannya :
- 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)
- 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.
- 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.
- 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
danLabel
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 menambahkanimport org.eclipse.swt.widgets.Display;
secara otomatis.
- Lakukan hal yang sama pada semua kesalahan, yaitu
Shell
,Label
,RowLayout
danSWT.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.
Package java.lang
Class Math
Java juga menyediakan konstanta dan method untuk menunjukkan perbedaan operasi
matematika seperti fungsi trigonometri dan logaritma. Selama method-method ini
semua static, Anda dapat menggunakannya tanpa memerlukan sebuah objek Math.
Untuk melengkapi daftar konstanta dan method-method ini, lihatlah acuan pada
dokumentasi Java API.
Java juga menyediakan konstanta dan method untuk menunjukkan perbedaan operasi
matematika seperti fungsi trigonometri dan logaritma. Selama method-method ini
semua static, Anda dapat menggunakannya tanpa memerlukan sebuah objek Math.
Untuk melengkapi daftar konstanta dan method-method ini, lihatlah acuan pada
dokumentasi Java API.
berikut adalah contih programnya :
public class LatMath { public static void main(String[] args) { double x, y; x = -37.33; System.out.println(); System.out.println("x = " + x); System.out.println("Math.abs(x) = " + Math.abs(x)); x = 2.356194490192345; System.out.println(); System.out.println("x = " + x); System.out.println("Math.tan(x) = " + Math.tan(x)); x = 21; y = -37; System.out.println(); System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("Math.max(x,y) = " + Math.max(x,y)); x = 2; y = 3; System.out.println(); System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("Math.pow(x,y) = " + Math.pow(x,y)); System.out.println(); System.out.print("Math.random() :"); for(int i=0;i<3;i++) { System.out.print(" " + Math.random()); } System.out.println(); x = 225; System.out.println(); System.out.println("x = " + x); System.out.println("Math.sqrt(x) = " + Math.sqrt(x)); x = 135; System.out.println(); System.out.println("x = " + x); System.out.println("Math.toRadians()= " + Math.toRadians(x)); } }
Setelah terlebih dahulu set variabel lingkungan PATH dan CLASSPATH.
$ javac LatMath.java Jika Anda menjalani langkah-langkah dengan benar, Anda dapat menemukan file LatMath.class di dalam directory yang sama.
Kemudian luncurkan dengan java
$ java LatMath x = -37.33 Math.abs(x) = 37.33 x = 2.356194490192345 Math.tan(x) = -1.0000000000000002 x = 21.0 y = -37.0 Math.max(x,y) = 21.0 x = 2.0 y = 3.0 Math.pow(x,y) = 8.0 Math.random() : 0.04970817076751444 0.40194521371113345 0.003979911650069612 x = 225.0 Math.sqrt(x) = 15.0 x = 135.0 Math.toRadians()= 2.356194490192345
Komponen Swing
Seperti pada package AWT, package dari Swing menyediakan banyak class untuk membuat aplikasi GUI. Package tersebut dapat ditemukan di javax.swing. Perbedaan utama antara keduanya adalah komponen Swing ditulis menyeluruh menggunakan Java. Kesimpulannya, program GUI ditulis menggunakan banyak class dari package Swing yang mempunyai tampilan look and feel yang sama meski dijalankan pada paltform yang berbeda. Lebih dari itu, Swing menyediakan komponen yang lebih menarik seperti color chooser dan option pane.
Nama dari komponen GUI milik Swing hampir sama persis dengan komponen GUI milik AWT.
Perbedaan jelas terdapat pada penamaan komponen. Pada dasarnya, nama komponen Swing
sama dengan nama komponen AWT tetapi dengan tambahan huruf J pada prefixnya. Sebagai
contoh, satu komponen dalam AWT adalah button class. Sedangkan pada Swing, nama
komponen tersebut menjadi Jbutton class. Berikut adalah daftar dari komponen Swing.
- Setting Up Top-Level Containers
Seperti disebutkan diatas, top-level containers seperti Jframe dan Japplet dalam Swing sangat
tidak cocok dengan AWT. Ini adalah syarat menambahkan komponen ke dalam kontainer. Jika
Anda ingin menambahkan langsung sebuah komponen kedalam kontainer sebagai kontainer
AWT, pertama-tama Anda telah mendapatkan content pane dari kontainer. Untuk melakukan
hal tersebut, Anda akan menggunakan method getContentPane dari container.
- Contoh Jframe
import javax.swing.*;
import java.awt.*;
class SwingDemo {
JFrame frame;
JPanel panel;
JTextField textField;
JButton button;
Container contentPane;
void launchFrame() {
/* inisialisasi */
frame = new JFrame("My First Swing Application");
panel = new JPanel();
textField = new JTextField("Default text");
button = new JButton("Click me!");
contentPane = frame.getContentPane();
/* menambahkan komponen-komponen ke panel– menggunakan
FlowLayout sebagai default */
panel.add(textField);
panel.add(button);
/* menambahkan komponen-komponen contentPane– menggunakan
BorderLayout */
contentPane.add(panel, BorderLayout.CENTER);
frame.pack();
//menyebabkan ukuran frame menjadi dasar pengaturan komponen
frame.setVisible(true);
}
public static void main(String args[]) {
SwingDemo sd = new SwingDemo();
sd.launchFrame();
}
}
Perlu diperhatikan pada package java.awt masih saja diimpor karena layout manager yang
digunakan terdapat pada package tersebut. Juga, memberi judul pada frame dan mengepack
komponen di dalam frame dapat juga dilakukan untuk frame AWT.
Komponen GUI pada AWT
- Window Classes Fundamental
Dalam mengembangkan aplikasi GUI, komponen GUI seperti tombol atau textfield diletakkan
di dalam kontainer. Berikut ini adalah daftar dari beberapa class penting pada kontainer yang
telah disediakan oleh AWT.
- Komponen : Abstract Class untuk object yang dapat ditampilkan pada console dan berinteraksi dengang user. Bagian utama dari semua class AWT.
- Kontainer : Abstract Subclass dari Component Class. Sebuah komponen yang dapat menampung komponen yang lainnya.
- Panel : Turunan dari Container Class. Sebuah frame atau window tanpa titlebar, menubar tidak termasuk border. Superclass dari applet class.
- Window : Turunan dari Container class. Top level window, dimana berarti tidak bisa dimasukkan dalam object yang lainnya.Tidak memiliki border dan menubar.
- Frame : Turunan dari window class. Window dengan judul, menubar, border dan pengatur ukuran di pojok. Memiliki empat constructor , dua diantaranya memiliki penulisan seperti :Frame(), Frame(String title)
Untuk mengatur ukuran window, menggunakan method setSize.
void setSize(int width, int height)
mengubah ukuran komponen ini dengan width dan height sebagai parameter.
void setSize(Dimension d)
mengubah ukuran dengan d.width dan d.height berdasar pada spesifikasi Dimension d.
Default dari window adalah not visible atau tak tampak hingga Anda mengatur visibility menjadi true. Inilah syntax untuk method setVisible.
void setVisible(boolean b)
Dalam mendesain aplikasi GUI, Object Frame selalu digunakan. Dibawah ini adalah contoh bagaimana membuat sebuah aplikasi.
import java.awt.*;
public class SampleFrame extends Frame {
public static void main(String args[]) {
SampleFrame sf = new SampleFrame();
sf.setSize(100, 100); //Coba hilangkan baris ini
sf.setVisible(true); //Coba hilangkan baris ini
}
}
perhatikan bahwa tombol tutup pada frame tidak akan bekerja karena tidak ada mekanisme
event handling yang ditambahkan di dalam aplikasi.
- Grafik
Beberapa method grafik ditemukan dalam class Graphic. Dibawah ini adalah daftar dari beberapa method.
Hubungan dari class ini adalah class Color, dimana memiliki tiga constructor.
Dibawah ini adalah contoh program yang menggunakan beberapa method di dalam class
Graphic.
import java.awt.*;
public class GraphicPanel extends Panel {
GraphicPanel() {
setBackground(Color.black); //Konstanta dalam class Color
}
public void paint(Graphics g) {
g.setColor(new Color(0,255,0)); //hijau
g.setFont(new Font("Helvetica",Font.PLAIN,16));
g.drawString("Hello GUI World!", 30, 100);
g.setColor(new Color(1.0f,0,0)); //red
g.fillRect(30, 100, 150, 10);
}
public static void main(String args[]) {
Frame f = new Frame("Testing Graphics Panel");
GraphicPanel gp = new GraphicPanel();
f.add(gp);
f.setSize(600, 300);
f.setVisible(true);
}
}
Agar panel dapat terlihat atau visible, dia harus diletakkan didalam window yang dapat terlihat seperti sebuah frame.
- Komponen AWT
Berikut ini adalah daftar dari kontrol AWT. Kontrol adalah komponen seperti tombol atau textfield yang mengijinkan user untuk berinteraksi dengan aplikasi GUI. Berikut ini semua subclass dari class Components.
Berikut adalah aplikasi membuat sebuah frame dengan kontrol yang telah dimasukkan di dalamnya.
import java.awt.*;
class FrameWControls extends Frame {
public static void main(String args[]) {
FrameWControls fwc = new FrameWControls();
fwc.setLayout(new FlowLayout()); //akan dibahas lebih detail
pada pembahasan berikutnya
fwc.setSize(600, 600);
fwc.add(new Button("Test Me!"));
fwc.add(new Label("Labe"));
fwc.add(new TextField());
CheckboxGroup cbg = new CheckboxGroup();
fwc.add(new Checkbox("chk1", cbg, true));
fwc.add(new Checkbox("chk2", cbg, false));
fwc.add(new Checkbox("chk3", cbg, false));
List list = new List(3, false);
list.add("MTV");
list.add("V");
fwc.add(list);
Choice chooser = new Choice();
chooser.add("Avril");
chooser.add("Monica");
chooser.add("Britney");
fwc.add(chooser);
fwc.add(new Scrollbar());
fwc.setVisible(true);
}
}
Abstract Windowing Toolkit (AWT) vs. Swing
Abstract Windowing Toolkit (AWT) vs. Swing
The Java Foundation Class (JFC), merupakan bagian penting dari Java SDK, yang termasuk dalam koleksi dari API dimana dapat mempermudah pengembangan aplikasi JAVA GUI. JFC termasuk diantara 5 bagian utama dari API yaitu AWT dan Swing. Tiga bagian yang lainnya dari API adalah Java2D, Accessibility, dan Drag dan Drop. Semua itu membantu pengembang dalam mendesain dan mengimplementasikan aplikasi visual yang lebih baik.
AWT dan Swing menyediakan komponen GUI yang dapat digunakan dalam membuat aplikasi Java dan Applet. Anda akan mempelajari applet pada bab berikutnya. Tidak seperti beberapa komponen AWT yang menggunakan native code, keseluruhan Swing ditulis menggunakan bahasa pemrograman Java. Swing menyediakan implementasi platform-independent dimana aplikasi yang dikembangkan dengan platform yang berbeda dapat memiliki tampilan yang sama. Begitu juga dengan AWT menjamin tampilan look and feel pada aplikasi yang dijalankan pada dua mesin yang berbeda menjadi terlihat sama. Swing API dibangun dari beberapa API yang mengimplementasikan beberapa jenis bagian dari AWT. Kesimpulannya, komponen AWT dapat digunakan bersama komponen Swing.
Sabtu, 03 Maret 2012
Enkripsi & Dekripsi pada Java
Enkripsi merupakan proses penggunaan algoritma yang kompleks untuk mengkonversi pesan ( plaintext atau cleartext ) ke suatu pesan terenkripsi ( chipertext ).
> Hal ini ditujukan untuk mengamankan suatu informasi dengan membuat informasi tersebut tidak dapat dibaca tanpa bantuan pengetahuan khusus .
> Enkripsi dapat digunakan untuk tujuan keamanan , tetapi teknik lain masih diperlukan untuk membuat komunikasi yang aman , terutama untuk memastikan integritas dan autentukasi dari sebuah pesan .
> Enkripsi adalah sebuah proses data encoding atau pemecahan kode data yang hanya dapat dibaca bila kita memiliki sebuah kunci khusus. Dulu enkripsi hanya berkembang di dunia spionase / perang, tetapi saat ini teknologi tersebut telah merambah ke sektor bisnis dan kalangan pengguna rumahan: Enkripsi adalah tool terbaik untuk melindungi data, privasi, dan rahasia Anda.
> Sebuah program enkripsi, baik itu yang berdiri sendiri (stand-alone) atau sudah terdapat pada aplikasi e-mail client anda, dan memiliki proses yang sama:
Data melewati sebuah formula matematis yang disebut algoritma, kemudian mengubahnya menjadi data terenkripsi yang disebut sebagai ciphertext. Formula ini memerlukan sebuah variabel dari anda–yang disebut kunci–untuk mengembalikan data tersebut kembali ke bentuk asal, sehingga sangat sulit, bahkan hampir tidak mungkin, seseorang dapat memecahkan kode enkripsi tersebut. Tetapi tentu saja hal ini tidak berlaku jika orang tersebut berhasil mencuri kode enkripsi dari Anda. Jadi, berhati-hatilah dengan kode enkripsi yang Anda miliki.
> Ada dua jenis enkripsi:
1. Simetris
Dengan enkripsi simetris, Anda menjalankan sebuah file melalui program dan membuat sebuah kunci yang mengacak file. Kemudian Anda mengirim file terenkripsi melalui e-mail ke si penerima dan secara terpisah mentransmit kunci dekodingnya (mungkin berupa sebuah password atau file data lainnya). Si penerima, dengan menjalankan aplikasi enkripsi yang sama, menggunakan kunci yang Anda berikan untuk menyatukan kembali file yang telah diacak. Enkripsi simetris sangat mudah dan sangat cepat dalam penggunaannya, tetapi tidak seaman enkripsi asimetris, karena seseorang dapat saja mencegat kunci dan mendekoding pesan tersebut. Tetapi karena kecepatannya itu, saat ini enkripsi simetris banyak digunakan pada transaksi e-commerce.
2. Asimetris (juga disebut sebagai public key).
Enkripsi asimetris sangat kompleks–tetapi jauh lebih aman. Diperlukan dua buah kunci yang saling berhubungan: sebuah kunci publik dan sebuah kunci pribadi. Anda membuat kunci publik anda tersedia bagi siapa saja yang ingin anda kirim informasi terenkripsi. Kunci tersebut hanya dapat mengenkoding data, ia tidak dapat mendekodingnya. Kunci pribadi anda terjaga dengan aman. Saat orang-orang hendak mengirim informasi terenkripsi pada anda, mereka mengenkripsinya menggunakan kunci publik anda. Saat anda menerima chipertext tersebut, anda akan mendekripsikannya dengan menggunakan kunci pribadi anda. Enkripsi asimetris menambahkan tingkat keamanan pada data anda, tetapi akibatnya lebih banyak lagi waktu komputasi yang dibutuhkan, sehingga prosesnya menjadi sangat panjang dan lebih lama.
Contoh sederhana encripsi dan decripsi pada java :
#include <cstdlib>
#include <iostream>
#include <string.h>
#define maks 500
using namespace std;
class Enkripsi{
public:
Enkripsi();
void enkripsi();
void deskripsi();
void output();
private:
char chiper[maks];
int key;
char plain[maks];
};
Enkripsi::Enkripsi(){
cout<<"Masukkan kata : ";
cin.getline(chiper,sizeof(chiper));
cout<<"Masukkan key : ";
cin>>key;
cout<<endl;
}
void Enkripsi::enkripsi(){
for(int i=0;i<strlen(chiper);i+=1){
cout<<chiper[i]<<"("<<int(chiper[i])<<") ";
chiper[i] = (chiper[i]+key)%128;
}
}
void Enkripsi::deskripsi(){
for(int i=0;i<strlen(chiper);i+=1){
plain[i] = (chiper[i]-key)%128;
chiper[i] = plain[i];
}
}
void Enkripsi::output(){
for(int i=0;i<strlen(chiper);i+=1){
cout<<chiper[i];
}
}
int main(int argc, char *argv[])
{
Enkripsi Deskripsi;
Deskripsi.enkripsi();
cout<<"\n\nSetelah diEnkripsi : ";
Deskripsi.output();
Deskripsi.deskripsi();
cout<<"\n\nKembali diDeskripsi : ";
Deskripsi.output();
cout<<endl<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Langganan:
Postingan (Atom)