5 0 3 MB
Akhi Ha Runi Nur Rahayu, S.Pd. Bait Syaiful Rijal, S.Pd.
PEMROGRAMAN BERORIENTASI OBJEK UNTUK SMK KELAS XII Sesuai Kurikulum 2013 Spektrum 2018
PROGRAM KEAHLIAN : TEKNOLOGI INFORMASI DAN KOMUNIKASI KOMPETENSI KEAHLIAN : REKAYASA PERANGKAT LUNAK
1
KATA PENGANTAR
Tidak ada hal terbaik selain mengucapkan Alhamdulillah, wujud syukur kepada Allahu Ta’ala yang telah memberikan kemudahan dalam penyusunan buku ini. Dengan hadirnya buku Pemrograman Berorientasi Objek ini, penulis berharap dapat memenuhi kebutuhan buku yang sesuai dengan Kurikulum 2013 bagi siswasiswi SMK Kompetensi Keahlian Rekayasa Perangkat Lunak. Pengembangan buku ini tidak terlepas dari Permendikbud No.24 tahun 2016 tentang Kompetensi Inti dan Kompetensi Dasar Pelajaran pada Kurikulum 2013 dan SK Dirjen No. 130 tahun 2017. Hal tersebut dimaksudkan agar buku ini dapat mendukung lulusan Kompetensi Keahlian Rekayasa Perangkat Lunak lebih mampu dan lebih siap kerja dalam rangka memenuhi kebutuhan Dunia Usaha / Dunia Industri dan Instansi Pemerintah secara profesional dalam pengembangan sistem informasi atau aplikasi berbasis objek. Tim penulis menyadari bahwa dalam penyusunan buku ini tentu memiliki kekurangan dan kesalahan. Untuk itu, dengan kerendahan hati tim penulis mengharap masukan dan saran perbaikan dari pembaca demi sempurnanya buku Pemrograman Berorientasi Objek ini. Akhir kata, tim penulis menyampaikan terima kasih kepada semua pihak yang telah memberikan dukungan sehingga buku ini dapat diselesaikan sebagaimana mestinya. Semoga buku ini bermanfaat dan menjadi jembatan bagi generasi bangsa untuk mewujudkan sumber daya manusia yang professional di bidang IT.
Penulis
2
DAFTAR ISI
Halaman KATA PENGANTAR................................................................................................... 2 DAFTAR ISI ............................................................................................................... 3 DAFTAR GAMBAR .................................................................................................... 5 DAFTAR TABEL ........................................................................................................ 7 BAB I .......................................................................................................................... 8 A.
Definisi dan dasar-dasar thread............................................................... 10 1.
Definisi Thread ....................................................................................... 10
2.
State dari Thread.................................................................................... 10
3.
Prioritas .................................................................................................. 11
B.
Class Thread.............................................................................................. 12 1.
Constructor ......................................................................................... 12
2.
Constants ............................................................................................. 12
3.
Methods ................................................................................................ 13
C.
Membuat Thread ....................................................................................... 14 1.
Menurunkan (extend) class Thread ...................................................... 15
2.
Mengimplementasikan interface Runnable ......................................... 15
3.
Extend vs Implement ............................................................................. 15
D.
Sinkronisasi ............................................................................................... 16
E.
Komunikasi antar thread (Interthread) .................................................... 17
BAB 2 ....................................................................................................................... 26 A.
Pendahuluan.............................................................................................. 26
B.
Dasar GUI (Graphical User Interfaces) .................................................... 27
C.
Perbedaan AWT Classes dan Swing ....................................................... 27
D.
Membuat Graphical Input and Output Menggunakan Option Panes .... 30
E.
Menggunakan Frame pada GUI................................................................ 35
F.
Buttons, Text Fields, dan Labels ............................................................. 37
G.
Mengubah Tata Letak sebuah Frame ...................................................... 40
H.
Text Areas, Scrollbars, dan Fonts ........................................................... 42 3
I.
Radio Buttons dan Combo Box .................................................................. 44 1.
Radio Button .......................................................................................... 44
2.
Combo Box ............................................................................................. 48
J.
Mouse Events ............................................................................................ 51
K.
Menggambar pada Java Menggunakan JPanel ...................................... 54
L.
Membuat Field Khusus untuk Password ................................................ 57
BAB 3 ....................................................................................................................... 67 A.
Komunikasi Data ....................................................................................... 67
B.
JDBC (Java Database Connectivity) ........................................................ 68
PENILAIAN AKHIR SEMESTER GANJIL ................................................................ 81 BAB 4 ....................................................................................................................... 95 A.
Pendahuluan.............................................................................................. 95
B.
Menampilkan Objek Multimedia berupa Gambar dalam Aplikasi ......... 95
C.
Menampilkan Objek Multimedia berupa Audio dalam Aplikasi ........... 100
BAB 5 ..................................................................................................................... 115 A.
Pengenalan dan Instalasi Code Igniter (CI)........................................... 115 1.
Definisi Framework Code Igniter ........................................................ 115
2.
Cara Instalasi Code Igniter (CI) ........................................................... 116
3.
Alur Kerja Framework Code Igniter (CI) ............................................. 118
B.
Pengenalan Model View Controller (MVC) ............................................ 119 1.
Definisi Model View Controller (MVC) ................................................ 119
2.
Komponen-komponen dari Model View Controller (MVC) ............... 119
C. Penerapan PHP Framework Code Igniter dengan metode Model View Controller (MVC) ............................................................................................... 123 PENILAIAN AKHIR SEMESTER GENAP .............................................................. 147 SUMBER ................................................................................................................ 159 KUNCI JAWABAN ................................................................................................. 160 PROFIL PENULIS ................................................................................................... 162
4
DAFTAR GAMBAR
Gambar 1. Ilustrasi Thread....................................................................................... 10 Gambar 2. Hirarki Kelas pada GUI Programming .................................................... 28 Gambar 3. Screenshot Program GUI Sederhana “Hello, world!” .............................. 31 Gambar 4. Hasil running program ............................................................................ 32 Gambar 5. Hasil running program ............................................................................ 33 Gambar 6. Hasil akhir program ................................................................................ 33 Gambar 7. Hasil running program ............................................................................ 35 Gambar 8. Hasil running program akhir ................................................................... 35 Gambar 9. Membuat Sebuah Frame ........................................................................ 36 Gambar 10. Menampilkan Button dalam Sebuah Frame ......................................... 40 Gambar 11. Contoh Penggunan BorderLayout pada Frame .................................... 42 Gambar 12. Text Areas ............................................................................................ 43 Gambar 13. Scrollbars ............................................................................................. 43 Gambar 14. Modifikasi Fonts ................................................................................... 44 Gambar 15. Radio Buttons ....................................................................................... 48 Gambar 16. Combo Box........................................................................................... 51 Gambar 17. Hasil running program awal .................................................................. 54 Gambar 18. Mouse Event Listener ........................................................................... 54 Gambar 19. Menggambar Doodle Sederhana ......................................................... 57 Gambar 20. Membuat Kolom Password................................................................... 60 Gambar 21. Membuat Project Baru .......................................................................... 96 Gambar 22. Membuat JFrameForm ......................................................................... 96 Gambar 23. Memasukan Label pada Aplikasi .......................................................... 97 Gambar 24. Menambahkan Package ....................................................................... 97 Gambar 25. Label Properties ................................................................................... 98 Gambar 26. Load Image to Application .................................................................... 99 Gambar 27. Menampilkan Gambar dalam Aplikasi .................................................. 99 Gambar 28. Membuat Form Baru untuk Menampilkan Audio ................................ 100 Gambar 29. Memasukan Tombol Audio pada Frame............................................. 101 Gambar 30. Hasil running program audio .............................................................. 102 Gambar 31. Hasil ekstract file codeigniter .............................................................. 117 Gambar 32. Memilih data inti pada codeigniter ...................................................... 117 Gambar 33. Alur Kerja dari Framework CI ............................................................. 118 Gambar 34. Komponen Model View Controller (MVC) ........................................... 123 Gambar 35. Hasil akhir program latihan 1 .............................................................. 126 Gambar 36. Hasil akhir program latihan 2 .............................................................. 127 Gambar 37. Hasil eksekusi program ...................................................................... 130 Gambar 38. Halaman tambah karyawan ................................................................ 133 5
Gambar 39. Halaman edit karyawan ...................................................................... 135 Gambar 40. Hasil update penambahan fitur pada program ................................... 137 Gambar 41. Hasil akhir program telah selesai ....................................................... 138
6
DAFTAR TABEL
Tabel 1. Constructor dari Thread ............................................................................. 12 Tabel 2. Konstanta dalam Thread ............................................................................ 13 Tabel 3. Daftar method dalam class thread.............................................................. 13 Tabel 4. Methods untuk komunikasi Interthread ....................................................... 17 Tabel 5. Perbedaan AWT class dan swing ............................................................... 28 Tabel 6. Tiga Klasifikasi Method JOptionPane ......................................................... 31 Tabel 7. Jenis MouseEvents pada java .................................................................... 51
7
SEMESTER GANJIL
8
BAB I THREAD
KOMPETENSI DASAR
KOMPETENSI DASAR 3.1 Menerapkan dasar dasar thread
4.1 Membuat instruksi - instruksi thread
Pernahkah kamu menulis rangkuman materi di text editor sambil browsing materi tersebut di internet? Apakah dua kegiatan tersebut bisa dilakukan dalam waktu yang bersamaan? Ya, tentu saja bisa! Berdasarkan prinsip sekuensial, seharusnya dua kegiatan tersebut dilakukan secara berurutan. Menulis dulu atau browsing dulu. Namun terdapat satu instruksi di komputer yang memperbolehkan dua kegiatan tersebut dikerjakan secara bersamaan. Persis seperti saat kita berkirim pesan dengan doi via aplikasi chatting sambil mendengarkan musik kesukaan! Instruksi apa itu? Bila pada pembelajaran sebelumnya kita terbiasa dengan program yang berurutan atau sekuensial, maka bab ini akan membahas program yang bekerja secara bersamaan. Sebuah program sekuensial yang dimaksud adalah sebuah program yang hanya memiliki satu aliran eksekusi di mana setiap eksekusi memiliki sebuah titik awal, serangkaian proses, dan titik akhir. Jadi, selama eksekusi (runtime), hanya ada satu proses saja yang dieksekusi. Namun kita tahu bahwa di dunia ini terdapat banyak sekali proses yang terjadi dan berjalan bersama-sama. Komputer pun demikian. Kita dapat mengerjakan beberapa proses (menulis, browsing, mendengarkan musik, dll) secara bersamasama. Namun dengan keterbatasan kita sebagai manusia yang disandingkan dengan beberapa pekerjaan sekaligus, membuat kita harus mampu mengalokasikan energi secara tepat agar semua pekerjaan tersebut bisa terselesaikan semua dengan baik. Oleh karena itu, kita sebagai programmer perlu belajar materi thread ini agar bisa mengontrol processor dan instruksi pada komputer. Hal tersebut tidak lain agar pembagian memori untuk setiap pelaksanaan instruksi (thread) menjadi lebih efisien.
9
A. Definisi dan dasar-dasar thread 1. Definisi Thread Penggunaan sistem operasi modern saat ini telah mendukung kemampuan untuk menjalankan beberapa program. Misalnya, pada saat kamu mengetik sebuah dokumen di komputer menggunakan text editor, dalam waktu yang bersamaan kamu juga dapat mendengarkan musik dan surfing lewat internet. Sistem operasi yang telah terinstal dalam komputermu itulah yang membuatmu bisa melakukan multitasking atau mengerjakan banyak pekerjaan dalam satu waktu. Seperti itu juga dalam sebuah program. Sebuah progam dapat mengeksekusi beberapa proses secara bersama-sama. Di dalam proses terdapat thread yang mengontrol aliran program. Berdasarkan jumlah thread yang terlibat dalam sebuah proses, terdapat dua jenis proses. Pertama, single-thread di mana suatu proses hanya memiliki satu-thread atau proses tunggal. Kedua, multi-thread, di mana suatu proses memiliki lebih dari satu aktivitas atau thread. Mudahnya, dalam aktivitas makan bisa saja makan pisang (single-thread) dan bisa saja makan utama yang terdiri dari nasi, lauk, dan sayur (multi-thread). Contoh aplikasi yang mengizinkan kita melakukan multi-threading adalah HotJava browser di mana kita bisa browsing sekaligus bisa mengunduh objek yang lain, seperti gambar, memainkan animasi, dan juga file audio pada saat yang bersamaan.
Gambar 1. Ilustrasi Thread 2. State dari Thread Sebuah thread memungkinkan untuk memiliki beberapa state:
Running Sebuah thread yang pada saat ini sedang dieksekusi dan di dalam control dari CPU. 10
Ready to run Thread yang sudah siap untuk dieksekusi, tetapi masih belum ada kesempatan untuk melakukannya.
Resumed Setelah sebelumnya diblock atau diberhentikan sementara, state ini kemudian siap untuk dijalankan.
Suspended Sebuah thread yang berhenti sementara, dan kemudian memperbolehkan CPU untuk menjalankan thread lain bekerja.
Blocked Sebuah thread yang di-block merupakan sebuah thread yang tidak mampu berjalan, karena masih menunggu sebuah resource tersedia atau sebuah event terjadi.
3. Prioritas Untuk menentukan thread mana yang akan menerima control dari CPU dan akan dieksekusi pertama kali, setiap thread akan diberikan sebuah prioritas. Sebuah prioritas adalah sebuah nilai integer dari angka 1 sampai dengan 10, dimana semakin tinggi prioritas dari sebuah thread, berarti semakin besar kesempatan dari thread tersebut untuk dieksekusi terlebih dahulu. Sebagai contoh, asumsikan bahwa ada dua buah thread yang berjalan bersamasama. Thread pertama diberikan prioritas nomor 5 kemudian thread kedua diberikan prioritas 10. Anggaplah bahwa thread pertama telah berjalan pada saat thread kedua dijalankan. Karena nilai prioritas yang diberikan lebih besar thread kedua, maka thread kedua akan menerima control dari CPU karena thread tersebut memiliki prioritas yang lebih tinggi dibandingkan thread yang pada saat itu tengah berjalan. Salah satu contoh dari skenario ini adalah context switch. Sebuah context switch terjadi apabila sebagian dari thread telah dikontrol oleh CPU dari thread yang lain. Ada beberapa skenario mengenai bagaimana cara kerja dari context switch. Salah satu skenarionya adalah sebuah thread yang sedang berjalan memberikan kesempatan kepada CPU untuk mengontrol thread lain agar bisa berjalan secara bersamaan. Dalam kasus ini, prioritas tertinggi dari thread adalah thread yang siap untuk menerima kontrol dari CPU. Cara yang lain dari
11
context switch adalah thread yang sedang berjalan diambil alih oleh thread yang memiliki prioritas lebih tinggi seperti yang telah dicontohkan sebelumnya. Hal ini juga mungkin dilakukan apabila lebih dari satu CPU tersedia sehingga lebih dari satu prioritas thread siap untuk dijalankan. Untuk menentukan diantara dua thread yang memiliki prioritas sama untuk menerima kontrol dari CPU, sangat bergantung
kepada
sistem
operasi
yang
digunakan.
Windows
95/98/NT
menggunakan time-slicing dan round-robin untuk menangani kasus ini. Setiap thread dengan prioritas yang sama akan diberikan sebuah jangka waktu tertentu untuk dieksekusi sebelum CPU mengontrol thread lain yang memiliki prioritas yang sama. Sedangkan
Solaris
membiarkan
sebuah
thread
untuk
dieksekusi
sampai
menyelesaikan tugasnya atau sampai secara suka rela membiarkan CPU untuk mengontrol thread yang lain. B. Class Thread 1. Constructor Marilah kita lihat bersama beberapa constructor yang terdapat pada class Thread. Tabel 1. Constructor dari Thread Thread Constructor Thread()
Keterangan Membuat sebuah object Thread yang baru.
Thread(String name)
Membuat sebuah object thread dengan memberikan penamaan yang spesifik.
Thread(Runnable target)
Membuat sebuah object Thread yang baru berdasar pada object Runnable. Target
menyatakan
sebuah
object
dimana method run dipanggil. Thread(Runnable target, String name)
Membuat sebuah object Thread yang baru dengan nama yang spesifik dan berdasarkan pada object Runnable.
2. Constants Class Thread juga menyediakan beberapa constants sebagai nilai prioritas. Tabel berikut ini adalah rangkuman dari class Thread. 12
Tabel 2. Konstanta dalam Thread Thread Constants
Keterangan
public final static int MAX_PRIORITY
Nilai prioritas maksimum, 10
public final static int MIN_PRIORITY
Nilai prioritas minimum, 1.
public final static int NORM_PRIORITY
Nilai default prioritas, 5.
3. Methods Method- method inilah yang disediakan dalam class Thread. Tabel 3. Daftar method dalam class thread Thread Methods public static Thread currentThread()
Keterangan Mengembalikan
sebuah
reference
kepada thread yang sedang berjalan. public final String getName()
Mengembalikan nama dari thread.
public final void setName(String name)
Mengulang
pemberian
nama
thread
sesuai dengan argument name. Hal ini dapat menyebabkan SecurityException. public final int getPriority()
Mengembalikan nilai prioritas yang telah diberikan kepada thread tersebut.
public final boolean isAlive()
Menunjukkan
bahwa
thread
tersebut
sedang berjalan atau tidak. public final void join([long millis, [int Sebuah overloading method. Sebuah nanos]])
thread yang sedang berjalan, harus menunggu sampai thread tersebut selesai (jika tidak ada parameter-parameter spesifik), atau sampai waktu yang telah ditentukan habis.
public static void sleep(long millis)
Menunda thread dalam jangka waktu milis. Hal ini dapat menyebabkan InterruptedException.
public void run()
Eksekusi thread dimulai dari method ini.
public void start()
Menyebabkan
eksekusi
dari
thread
berlangsung dengan cara memanggil 13
method run. C. Membuat Thread Sebelum masuk dalam tahapan membuat sebuah thread mari kita perhatian salah satu contoh sebuah thread. Berikut adalah implementasi sebuah tread dalam bentuk program penghitung sederhana. import javax.swing.*; import java.awt.*; class CountDownGUI extends JFrame { JLabel label; CountDownGUI(String title) { super(title); label = new JLabel("Start count!"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().add(new Panel(), BorderLayout.WEST); getContentPane().add(label); setSize(250,200); setVisible(true); } void startCount() { try { for (int i = 10; i > 0; i--) { Thread.sleep(100); label.setText(i + ""); } Thread.sleep(100); label.setText("Count down complete."); Thread.sleep(100); } catch (InterruptedException ie) { } label.setText(Thread.currentThread().toString()); } public static void main(String args[]) { CountDownGUI cdg = new CountDownGUI("Hitung Mundur"); cdg.startCount(); }}
14
Sebuah thread dapat diciptakan dengan dua model cara, yaitu: menurunkan (extend) class Thread atau dengan mengimplementasikan sebuah interface Runnable. 1. Menurunkan (extend) class Thread Untuk menjalankan thread, dapat dilakukan dengan memanggil method start(). Saat start() dijalankan, maka sebenarnya method run() dari class akan dijalankan. Jadi untuk membuat thread, harus mendefinisikan method run() pada definisi class. Konstruktor dari cara ini adalah : SubThread namaObject = new SubThread(); namaObject.start();
2. Mengimplementasikan interface Runnable Cara
lain
untuk
membuat
sendiri
sebuah
thread
adalah
dengan
mengimplementasikan interface Runnable. Hanya satu method yang dibutuhkan oleh interface Runnable yaitu method run. Cara ini merupakan cara yang paling sederhana dalam membuat thread. Runnable merupakan unit abstrak, yaitu kelas yang mengimplementasikan interface ini hanya cukup mengimplementasikan fungsi run(). Dalam mengimplementasi fungsi run(), kita akan mendefinisikan instruksi yang membangun sebuah thread. Konstruktor dari cara ini adalah : MyThread myObject= new MyThread(); Thread namaObject = new Thread(myObject); Atau dengan cara singkat seperti : New Thread(new ObjekRunnable());
MyThread merupakan class yang mengimplementasikan interface dari Runnable, dan object dari class MyThread akan menjadi parameter instansi object class Thread.
3. Extend vs Implement Dari dua cara untuk menciptakan thread seperti diatas, memilih salah satu dari kedua cara tersebut bukanlah sebuah permasalahan. Implementasi sebuah interface 15
Runnable menyebabkan lebih banyak pekerjaan yang harus dilakukan karena kita harus mendeklarasikan sebuah object Thread dan memanggil method Thread dari object ini. Sedangkan menurunkan (extend) sebuah class Thread, menyebabkan class yang kamu buat tidak dapat menjadi turunan dari class yang lainnya karena Java tidak memperbolehkan adanya multiple inheritance. Sebuah pilihan antara mudah tidaknya untuk diimplementasikan (implement) dan kemungkinan untuk membuat turunan (extend) adalah sesuatu yang harus kamu tentukan sendiri. Perhatikan mana yang lebih penting bagi kamu karena keputusan ada ditanganmu.
D. Sinkronisasi Sampai sejauh ini, kamu telah melihat contoh-contoh dari thread yang berjalan Bersama-sama tetapi tidak bergantung satu dengan yang lainnya. Thread tersebut adalah thread yang berjalan sendiri tanpa memperhatikan status dan aktifitas dari thread lain yang sedang berjalan. Pada contoh tersebut, setiap thread tidak membutuhkan resource atau method dari luar sehingga tidak membutuhkan komunikasi dengan thread lain. Namun dalam situasi tertentu, thread yang berjalan bersama-sama terkadang membutuhkan resource atau method dari luar. Oleh karena itu, mereka butuh untuk berkomunikasi satu dengan yang lain sehingga dapat mengetahui status dan aktifitas mereka. Sinkronisasi adalah method atau blok yang memiliki tambahan keyword synchronized,sehingga apabila dijalankan maka hanya satu thread pada suatu waktu yang dapat menjalankan method atau blok program. Thread lain akan menunggu thread yang sedang mengeksekusi method ini hingga selesai. Mekanisme sinkronisasi penting apabila terjadi pembagian sumber daya maupun data di antara thread-thread. Sinkronisasi juga melakukan penguncian pada sumber daya atau data yang sedang diproses. Sinkronisasi dapat dilakukan pada dua bagian yaitu
Sinkronisasi Blok Sintak untuk sinkronisasi blok adalah sebagai berikut : synchronized
}
()
{
Sinkronisasi Method Sintak untuk sinkronisasi method adalah sebagai berikut: synchronized TypeBalikanMethod NamaMethod ( parameter) { }
E. Komunikasi antar thread (Interthread) Dalam implementasi penggunaan thread pada pemrogaman, dimungkinkan untuk sebuah thread melakukan komunikasi dengan thread lainnya. Pada bagian ini, akan mempelajari mengenai method-method dasar yang digunakan thread untuk berkomunikasi dengan thread lain yang sedang berjalan.
Tabel 4. Methods untuk komunikasi Interthread Methods untuk komunikasi Interthread public final void wait()
Keterangan Menyebabkan
thread
ini
menunggu
sampai thread yang lain memanggil notify atau notifyAll method dari object ini.
Hal
ini
dapat
menyebabkan
InterruptedException. public final void notify()
Membangunkan
thread
yang
telah
memanggil method wait dari object yang sama. public final void notifyAll()
Membangunkan
semua
thread
yang
telah memanggil method wait dari object yang sama.
17
RANGKUMAN 1. Thread adalah rangkaian eksekusi dari sebuah aplikasi java dan setiap program java minimal memiliki satu buah thread. Sebuah thread bisa berada di salah satu dari 5 status, yaitu running, ready to run, resumed, suspended dan blocked. 2. Pembentukan sebuah thread dapat dilakukan dengan dua cara, yaitu dengan extends class thread dan implements interface thread. 3. Dalam Java, kita dapat membuat prioritas suatu thread relative terhadap thread yang lain sehingga thread yang mempunyai prioritas lebih tinggi mempunyai kesempatan lebih besar untuk mengakses suatu sources. 4. Sinkronisasi adalah method atau blok yang memiliki tambahan keyword synchronized. Apabila method synchronized tersebut dijalankan, maka hanya satu thread pada suatu waktu yang dapat menjalankan method atau blok program.
TUGAS TIDAK TERSTRUKTUR (KELOMPOK) Silakan membentuk kelompok yang terdiri masing-masing empat anak. Buatlah masing-masing 5 contoh program yang didalamnya terdapat thread, dimana thread tersebut dibuat dengan cara: Extends class thread
Implements interface thread
18
TUGAS TERSTRUKTUR (MANDIRI) Buatlah sebuah banner sederhana yang akan mencetak string yang diinputkan oleh user. String akan ditampilkan secara berulang-ulang dan bergerak dari kiri ke kanan (Agar proses perpindahannya tidak terlalu cepat, gunakan method sleep dari class Thread).
UJI KOMPETENSI DASAR 1 SOAL PILIHAN GANDA
19
1. Dibawah ini yang tidak termasuk dalam jenis status pada thread adalah... A. Playing B. Running C. Resumed D. Suspended E. Blocked
2. Sebuah instruksi yang akan dieksekusi didalam sebuah program tertentu disebut... A. Method B. Thread C. Class D. Object E. Constructor
3. Nilai default prioritas yang terdapat pada thread constanta public final static int NORM_PRIORITY adalah... A. 0 B. 10 C. 5 D. 1 E. 15
4. Constructor Thread(String name) digunakan untuk... A. Membuat sebuah object Thread yang baru dengan nama yang spesifik dan berdasarkan pada object Runnable. B. Membuat sebuah object Thread yang baru berdasar pada object Runnable. Target menyatakan sebuah object dimana method run dipanggil. C. Membuat sebuah object Thread yang baru. D. Membuat sebuah object thread dengan memberikan penamaan yang spesifik. E. Membuat sebuah object Interface 20
5. Thread methods yang digunakan untuk menunjukkan bahwa thread tersebut sedang berjalan atau tidak adalah. .. A. public void run() B. public final void setName(String name) C. public static void sleep(long millis) D. public final void join([long millis, [int nanos]]) E. public final boolean isAlive()
6. Thread methods public static Thread currentThread() digunakan untuk ... A. Mengembalikan nama dari thread. B. Eksekusi thread dimulai dari method ini. C. Mengembalikan nilai prioritas yang telah diberikan kepada thread tersebut. D. Mengembalikan sebuah reference kepada thread yang sedang berjalan. E. Menunjukkan bahwa thread tersebut sedang berjalan atau tidak.
7. SubThread namaObject = new SubThread(); namaObject.start(); Script diatas dapat digunakan jika kita ingin ... A. Mengimplementasikan interface Runnable B. Sinkronisasi Blok C. Menurunkan (extend) class Thread D. Sinkronisasi Method E. Komunikasi antar thread 8. Method yang memiliki tambahan keyword synchronized,sehingga apabila dijalankan maka hanya satu thread pada suatu waktu yang dapat menjalankan method atau blok program disebut sebagai.. A. Blocked B. Sinkronisasi C. Suspended D. Thread E. Inheritance 21
9. SInkronisasi thread dapat dilakukan dengan dua cara yaitu ... A. Blok dan Method B. Class dan Runable C. Blok dan Class D. Method dan Suspended E. Runable dan Suspended
10. Methods Interthread yang digunakan untuk Membangunkan thread yang telah memanggil method wait dari object yang sama.adalah ... A. public final void notifyAll() B. public final void notify() C. public void run() D. public void start() E. public final void wait()
11. Thread merupakan bagian dari proses suatu program. Menurut jenisnya, thread dibedakan menjadi ... A. Single-thread dan multi-thread B. Singular-thread dan particular-thread C. Void thread dan non void thread D. Synchronized thread dan opposite thread E. Controlled thread dan uncontrolled thread 12. Sebuah thread yang sedang dieksekusi oleh CPU berada pada state ... A. Running B. Ready to run C. Resumed D. Suspended E. Blocked
13. Thread yang sudah siap untuk dieksekusi namun masih dalam daftar tunggu berada dalam state ... 22
A. Running B. Ready to run C. Resumed D. Suspended E. Blocked
14. Blocked thread yang siap untuk dijalankan berada pada state ... A. Running B. Ready to run C. Resumed D. Suspended E. Blocked
15. Apabila sebuah thread berhenti sementara dan mengizinkan thread yang lain untuk dikerjakan terlebih dahulu, berarti thread tersebut sedang berada pada state ... A. Running B. Ready to run C. Resumed D. Suspended E. Blocked
16. Memori komputer sangat terbatas. Thread yang menunggu resource tersedia agar bisa berjalan berarti thread tersebut sedang berada pada state ... A. Running B. Ready to run C. Resumed D. Suspended E. Blocked
23
17. Sebuah thread berjalan dan memiliki prioritas default yaitu 5. Kemudian ada sebuah thread juga yang akan dieksekusi dengan nilai prioritas 10. Maka, apa yang terjadi? A. Thread pertama akan memiliki nilai prioritas 1 B. Thread pertama akan memiliki nilai prioritas 10 C. Thread kedua akan memiliki nilai prioritas 5 D. Thread pertama akan dieksekusi sampai selesai terlebih dahulu E. CPU menjalankan thread kedua karena nilai prioritasnya lebih tinggi
18. Yang menjadi penentu pemberian nilai prioritas thread untuk menerima kontrol dari CPU adalah ... A. Processor B. RAM C. OS D. HDD E. ROM
19. Method thread yang digunakan untuk mengembalikan nilai prioritas yang tela diberikan kepada thread tersebut adalah ... A. currentThread() B. getName() C. getPriority() D. isAlive() E. setPriority()
20. Thread (String name) merupakan sebuah object thread dengan ciri ... A. Objek baru B. Nama yang spesifik C. Objek bersifat runnable D. Prioritas bernilai 10 E. Nama yang dikembalikan dari thread sebelumnya F. 24
SOAL URAIAN 1. Apa yang kamu ketahui tentang thread? 2. Sebutkan dan jelaskan cara untuk membuat sebuah thread! 3. Jelaskan konsep prioritas dalam thread! 4. Apa keuntungan dilakukannya sebuah proses sinkronisasi pada thread? 5. Sebutkan dan jelaskan 3 method pada class thread yang kamu ketahui!
REMEDIAL 1. Apa perbedaan proses dengan thread? 2. Dalam sebuah proses, bisa saja memiliki beberapa thread. Bagaimana bentuk komunikasi antarthread tersebut? 3. Sebutkan dan jelaskan state yang dimiliki oleh thread ! 4. Bagaiaman thread bekerja dalam sebuah program? 5. Tuliskan sintak sederhana untuk membuat constructor Runnable target !
PENGAYAAN Setelah kamu mengetahui apa itu thread, coba buatlah sebuah program sederhana yang mengimplementasikan syncronized thread!
25
BAB 2 Graphical User Interfaces (Perancangan Antar Muka)
KOMPETENSI DASAR
KOMPETENSI DASAR 3.2
Merancang antar muka atau
4.2
User Interface (UI) 3.3
Merancang
User
Membuat kode program untuk antar muka atau User Interface (UI)
Interface 4.3
menggunakan library
Mendesain
User
Interface
menggunakan library
A. Pendahuluan Ungkapan “don’t judge a book by the cover” sangatlah benar. Namun dalam praktiknya, kita sering melihat sesuatu dari luarnya terlebih dahulu. Realita tersebut mendorong developer untuk memahami pula tampilan luar sebuah program agar pengguna tertarik untuk menggunakan program tersebut. Bukankah selain program tersebut bermanfaat, user juga memperhatikan seberapa eye-catching bila dilihat? Coba kamu bayangkan bila sebuah program terdiri dari 2 warna pokok yaitu merah menyala dan biru elektrik. Kemudian tombol menu utama terletak di pojok kanan bawah. Kira-kira, apakah pengguna akan nyaman dengan warna dan tata letak program tersebut? Tentu tidak. Itulah yang menjadi tujuan utama dari perancangan antar muka pengguna (Graphical User Intefaces) yaitu untuk mencari tahu cara memposisikan dan menata komponen antarmuka pengguna agar mudah dipahami oleh pengguna. Semakin sederhana sebuah user interface dan semakin mudah dimengerti, maka user interface tersebut akan semakin baik. Dan user interface yang baik akan memberikan kemudahan bagi pengguna untuk dapat berinteraksi dengan program. Selain itu, tujuan dari user interface terletak pada sisi seni atau aestetik dari program. 26
B. Dasar GUI (Graphical User Interfaces) GUI merupakan entitas yang berpotensi sangat kompleks karena melibatkan banyak object dan class yang saling berinteraksi. Setiap komponen pada layar dan window diwakili oleh suatu objek, sehingga seorang programmer yang memulai dengan GUI harus banyak belajar hal baru mengenai class, method, dan package name. Selain itu, jika GUI melakukan tugas-tugas yang rumit, object harus berinteraksi satu sama lain dan memanggil method satu sama lain. Hal ini akan mengakibatkan masalah komunikasi dan cakupan pemrograman yang rumit. Faktor lain yang membuat penulisan GUI sulit adalah bahwa jalur eksekusi kode menjadi tidak dapat dipastikan. Ketika program GUI sedang berjalan, pengguna dapat mengklik salah satu tombol dan berinteraksi dengan komponen layar lainnya dengan urutan apa pun. Karena eksekusi program dilakukan karena serangkaian peristiwa yang terjadi, dapat dikatakan bahwa program dengan GUI didorong karena adanya perlakuan dari pengguna (sebuah peristiwa). Dalam bab ini, kamu akan belajar cara menangani masukan pengguna sehingga program GUI yang dibuat dapat merespons interaksi pengguna dengan tepat.
C. Perbedaan AWT Classes dan Swing Abstract Windowing Toolkit (AWT) atau disebut juga “Another Windowing Toolkit” adalah pustaka windowing, memiliki kelebihan multiplatform serta menyediakan sejumlah kelas untuk membuat GUI di Java. Dengan class AWT ini, developer dapat membuat window, gambar, manipulasi gambar, dan menggunakan komponen seperti Button, Scrollbar, Checkbox, TextField, dan menu pull-down. Cara penulisan AWT menggunakan native code. Swing merupakan perbaikan kelemahan pada AWT. Secara keseluruhan ditulis menggunakan bahasa pemrogaman Java. Banyak kelas swing menyediakan komponen alternatif dari AWT. Sebagai contoh, kelas JButton swing menyediakan fungsionalitas lebih banyak dibanding kelas Button. Selain itu komponen swing umumnya diawali dengan huruf “J”, misalnya JButton,
27
JTextField, JFrame, JLabel, JTextArea, JPanel, dan sebagainya. Teknologi swing menggunakan dan memperluas gagasan-gagasan pada AWT.
Tabel 5. Perbedaan AWT class dan swing Java.awt
Javax.swing
Frame
JFrame
Panel
JPanel
Button
JButton
TextField
JTextField
List
JList
Label
JLabel
Choice
JComboBox
Check Box
JCheckBox
Gambar 2. Hirarki Kelas pada GUI Programming 28
Lebih lengkapnya, berikut adalah kelas-kelas pada AWT: 1. Komponen Merupakan bagian utama dari semua kelas AWT, berupa kelas abstrak untuk objek yang ditampilkan pada console dan berinteraksi dengan pengguna. 2. Kontainer Merupakan subclass abstrak dari kelas Komponen. Berfungsi menampung komponen yang lain. 3. Panel Merupakan turunan dari kelas Kontainer namun merupakan superclass dari kelas Applet. Panel berupa frame atau window tanpa titlebar dan menubar. 4. Window Merupakan turunan lain dari kelas Kontainer. Kelas ini tidak memiliki border dan menubar. Bersifat top level window yang berarti tidak bisa dimasukkan dalam objek yang lainnya. Untuk mengatur ukuran window dapat menggunakan method setSize: void setSize(int lebar, int tinggi) Default dari Window adalah not visible sehingga kita perlu mengatur visibility menjadi true. Sintaknya seperti ini? void setVisible(boolean b)
5. Frame Merupakan turunan dari kelas Window. Frame merupakan subclass Window yang memiliki judul, menubar, border, dan pengatur ukuran pada titik-titik sudutnya. Memiliki empat konstruktor, dua diantaranya yang sering digunakan: a. frame(), berfungsi mengkonstruksi frame baru yang awalnya invisible. b. frame(String title), berfungsi mengkonstruksi frame baru yang awalnya invisible dengan title yang sudah ditentukan.
29
D. Membuat Graphical Input and Output Menggunakan Option Panes Cara paling sederhana untuk membuat jendela GUI pada Java adalah dengan membuat option pane pop up. Option pane adalah kotak pesan sederhana yang muncul di layar dan menyajikan pesan atau permintaan untuk input kepada pengguna. Class pada Java yang digunakan untuk menampilkan Option Panes disebut “JOptionPane”. JOptionPane berada dalam paket javax.swing
sehingga
kamu
harus
mengimpor
paket
ini
untuk
menggunakannya. "Swing" adalah nama salah satu pustaka GUI Java. Nama paket dimulai dengan “javax” kali ini, bukan java lagi.
import javax.swing.*; // for GUI components
JOptionPane dapat dianggap setara dengan keluaran System.out.println dan input Scanner. Program berikut ini membuat pesan "Hello, world!" di layar dengan menggunakan JOptionPane:
// A graphical equivalent of the classic "Hello world" program. import javax.swing.*; // for GUI components
public class HelloWorld { public static void main(String[] args) { JOptionPane.showMessageDialog(null, "Hello, world!"); } }
30
Berikut adalah tampilan kode program di atas (Screenshot dari kode program “Hello, world!”):
Gambar 3. Screenshot Program GUI Sederhana “Hello, world!”
JOptionPane dapat digunakan untuk menampilkan pesan (seperti yang baru saja ditunjukkan), menyajikan daftar pilihan kepada pengguna, dan meminta
pengguna
untuk
mengimplementasikan
ketiga
mengetik perilaku
input. ini
Tiga
adalah
metode
yang
showMessageDialog,
showConfirmDialog, dan showInputDialog. Metode-metode ini dirinci dalam Tabel 6: Tabel 6. Tiga Klasifikasi Method JOptionPane Method
Penjelasan
ShowConfirmDialog
Menampilkan sebuah kotak pesan berisi pilihan “Yes/No/Cancel”
ShowInputDialog
Menampilkan kotak input yang berisi pesan
yang
diberikan
mengembalikan
nilai
di
input
layar
dan
pengguna
sebagai sebuah String
ShowMessageDialog
Menampilkan
string
pesan
yang
dimasukan dalam kotak input ke layer
31
Pada kode program di bawah ini dicontohkan ketiga klasifikasi dari option pane:
Gambar 4. Hasil running program
// Shows several JOptionPane windows on the screen.
import javax.swing.*; // for GUI components public class UseOptionPanes { public static void main(String[] args) { // read the user's name graphically String name = JOptionPane.showInputDialog(null, "What is your name?"); // ask the user a yes/no question int choice = JOptionPane.showConfirmDialog(null, "Apakah anda siswa SMK? " + name + "?"); // show different response depending on answer if (choice == JOptionPane.YES_OPTION) { JOptionPane.showMessageDialog(null, 32
"Iya! Saya Siswa SMK"); } else { // choice == NO_OPTION or CANCEL_OPTION JOptionPane.showMessageDialog(null, "Bukan, Saya Bukan Siswa SMK"); } } }
Gambar 5. Hasil running program
Gambar 6. Hasil akhir program
33
Salah
satu
keterbatasan
pada
JOptionPane
adalah
pada
perintah
showConfirmDialog hanya menerima input dari user berupa String saja. Jika input yang diberikan oleh pengguna berupa number, maka String perlu dikonversikan terlebih dahulu ke dalam bentuk number menggunakan method Integer.parseInt atau Double.parseDouble. Berikut adalah contoh kode program untuk menerima input berupa number: 1 // Uses JOptionPane windows for numeric input. 2 3 import javax.swing.*; // for GUI components 4 5 public class UseOptionPanes2 { 6 public static void main(String[] args) { 7 String ageText = JOptionPane.showInputDialog(null, 8 "Berapa umurmu?"); 9 int age = Integer.parseInt(ageText); 10 11 String moneyText = JOptionPane.showInputDialog(null, 12 "Berapa uangmu?"); 13 double money = Double.parseDouble(moneyText); 14 15 JOptionPane.showMessageDialog(null, 16 "Jika kamu bisa menabung,\n" + 17 "Maka kamu akan memiliki " + (money * 32) + 18 "uang pada umur " + (age + 5) + "!"); 34
19
}
20 }
Gambar 7. Hasil running program
Gambar 8. Hasil running program akhir E. Menggunakan Frame pada GUI JOptionPane sangatlah berguna, tetapi method ini tidak fleksibel dan tidak mumpuni untuk membuat antarmuka pengguna dengan komponen yang kompleks. Untuk mengatasi hal ini, maka harus dipelajari tentang berbagai jenis widget atau komponen yang dapat digunakan pada Java. Secara teknis, Frame juga merupakan komponen karena Frame membentuk window yang tertampil pada layar. Frame juga memiliki banyak metode yang tidak ditemukan dalam component lain. 1 // Sets several properties of a window frame. 2 35
3 import java.awt.*; // for Dimension 4 import javax.swing.*; // for GUI components 5 6 public class SimpleFrame { 7 public static void main(String[] args) { 8 JFrame frame = new JFrame(); 9 frame.setForeground(Color.WHITE); 10 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 11 frame.setLocation(new Point(10, 50)); 12 frame.setSize(new Dimension(300, 120)); 13 frame.setTitle("Ini adalah frame"); 14 frame.setVisible(true); 15
}
16 }
Gambar 9. Membuat Sebuah Frame
36
F. Buttons, Text Fields, dan Labels Komponen pertama yang akan dibahas adalah Button (tombol). Button merupakan komponen pada layar yang dapat diklik dan menimbulkan sebuah aksi. Button direpresentasikan dengan JButton class. Setiap objek JButton yang dibuat merupakan lambang dari setiap button pada layar. Jika ada tiga button pada satu layar maka diperlukan tiga JButton objects yang diletakkan pada satu frame. Button dapat dibuat tanpa parameter (sebuah tombol tanpa keterangan teks), dapat dimodifikasi ukurannya dengan method setSize, teks keterangannya dengan method setText, dan dapat pula diubah warna background tombolnya dengan method: JButton button1 = new JButton(); button1.setText("I'm the first button"); JButton button2 = new JButton("The second button"); button2.setBackground(Color.YELLOW); Textfield adalah suatu komponen pada Jframe yang berfungsi untuk menginput data secara langsung oleh user. Textfield ini biasanya digunakan untuk mengisi data-data ke dalam sistem seperti nama, alamat, email, dan lainlain. Sebagai komponen dengan fasilitas input, textfield kemudian dijadikan sarana komunikasi antara user dengan developer sehingga developer dapat mengubah form sesuai dengan kebutuhan user. Cara pembuatan textfield dapat dilihat dari potongan kode program di bawah ini: //membuat objek tf JTextField tf = new JTextField();
//memasukkan textfield ke dalam frame Frame.add(tf);
//mengatur posisi textfield di dalam frame tf.setBounds(100,10,200,20); //x, y, width, height
37
Label adalah salah satu komponen pada Jframe yang berguna untuk memberi keterangan atau variable di dalamnya. Variable tersebut disesuaikan dengan kebutuhan pengguna. Dengan adanya label, keterangan atas suatu objek dapat digambarkan secara singkat sehingga pengguna dapat dengan mudah mengoperasikan program yang telah dikembangkan oleh developer. Pembuatan label dapat dilihat dari potongan kode program di bawah ini: //membuat objek label Jlabel label = new Jlabel(“Masukkan nomor kartu perpustakaan”);
//menentukan layout frame frame.setLayout(null);
//memasukkan label ke dalam frame Frame.add(label);
//mengatur posisi label di dalam Frame Label.setBounds(15,15,125,20) //x, y, width, height
Membangun sebuah tampilan merupakan kegiatan penggabungan dari berbagai komponen. Beberapa komponen tersebut digabungkan ke dalam satu frame. Frame berguna sebagai wadah untuk menampung berbagai macam komponen. Untuk menambahkan komponen ke dalam frame maka diperlukan method JFrame dan masukkan komponen sebagai parameter. Berikut adalah contoh kode program untuk membuat frame dan menempatkan dua tombol di dalamnya: 1 // Creates a frame containing two buttons. 2 3 import java.awt.*; 4 import javax.swing.*; 5 38
6 public class ComponentsExample { 7 public static void main(String[] args) { 8 JFrame frame = new JFrame(); 9 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 10 frame.setSize(new Dimension(300, 100)); 11 frame.setTitle("A frame"); 12 13 JButton button1 = new JButton(); 14 button1.setText("I'm a button."); 15 button1.setBackground(Color.BLUE); 16 frame.add(button1); 17 18 JButton button2 = new JButton(); 19 button2.setText("Click me!"); 20 button2.setBackground(Color.RED); 21 frame.add(button2); 22 23 frame.setVisible(true); 24
}
25 }
39
Gambar 10. Menampilkan Button dalam Sebuah Frame
Pada gambar di atas, tampilan layar tidak sesuai dengan apa yang dituliskan pada source code. Karena pada source code dideklarasikan dua tombol namun yang tertampil pada layar hanya satu tombol saja yaitu tombol kedua. Hal tersebut muncul karena tombol kedua menutupi tombol pertama pada layar. Posisi letak tombol pertama adalah sama dengan tombol kedua sehingga terjadi adalah penumpukan antara kedua tombol tersebut. Pada subbab selanjutnya akan dibahas mengenai penyusunan layout komponen pada suatu frame. Hal ini sangat berguna agar tampilan GUI dapat mudah dipahami dan dikases oleh pengguna. G. Mengubah Tata Letak sebuah Frame Permasalahan pada program di sub-bab sebelumnya adalah mengenai tata letak (layout) komponen pada sebuah frame. Komponen memiliki tata letak seperti posisi komponen, ukuran komponen, urutan penempatan komponen dan lain-lain. Pada program di sub-bab sebelumnya belum didefinisikan mengenai tata letak komponen yang ada di dalamnya. Maka hal yang perlu dilakukan agar tombol pertama dan kedua tidak saling menumpuk adalah dengan mendefinisikan tata letak kedua tombol tersebut. Pada Java dikenal beberapa package pengaturan tata letak salah satunya adalah dengan java.awt package. import java.awt.*; // for layout managers import javax.swing.*; // for GUI components
40
Tata letak yang sering digunakan pada Java adalah BorderLayout. BorderLayout membagi sebuah Frame menjadi lima bagian: utara, selatan, barat, timur, dan tengah. Ketika BorderLayout digunakan untuk menambahkan komponen ke dalam Frame, yang dilakukan adalah melalui dua parameter: komponen yang akan ditambahkan dan konstanta yang mewakili wilayah di mana menempatkannya. Konstanta tersebut adalah BorderLayout.NORTH, BorderLayout.SOUTH,
BorderLayout.WEST,
BorderLayout.EAST,
dan
BorderLayout.CENTER. Jika kamu tidak memberikan parameter kedua yang mewakili letak posisi, Java akan menempatkan komponen di tengah secara otomatis. Berikut adalah contoh penggunaan manajer tata letak BorderLayout: 1 import java.awt.*; 2 import javax.swing.*; 3 public class ContohBorderLayout { 4 public static void main(String[] args) { 5 JFrame frame = new JFrame(); 6 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 7 frame.setSize(new Dimension(210, 200)); 8 frame.setTitle("Contoh Border Layout"); 9 frame.setLayout(new BorderLayout()); 10 frame.add(new JButton("Utara"), BorderLayout.NORTH); 11 frame.add(new JButton("Selatan"), BorderLayout.SOUTH); 12 frame.add(new JButton("Barat"), BorderLayout.WEST); 13 frame.add(new JButton("Timur"), BorderLayout.EAST); 14 frame.add(new JButton("Tengah"), BorderLayout.CENTER); 15 frame.setVisible(true); 41
16
}
17 }
Gambar 11. Contoh Penggunan BorderLayout pada Frame H. Text Areas, Scrollbars, dan Fonts Text fields sangat berguna untuk melakukan input berupa single-line text, namun text fields tidak dapat menampung input ketika teks yang diinputkan banyak dan lebih dari satu baris. Kelemahan pada text fields ini dapat diatasi oleh Text Areas. Text Areas dapat menampung inputan berupa multiple lines text, Text Areas pada java dideklarasikan dengan JTextArea object.
JTextArea area = new JTextArea(5, 20);
42
Gambar 12. Text Areas Pada gambar di atas merupakan contoh penggunaan Text Area dengan jumlah baris adalah 5 baris. Namun masalah akan timbul ketika pengguna melakukan input data yang jumlah barisnya adalah lebih dari 5 baris. Teks pada baris ke-6 dan selanjutnya pasti tidak tertampil dalam Text Area tersebut, untuk mengatasi masalah ini maka diperlukan Scrollbars. Scrollbars pada java dideklarasikan dengan JScrollPane object. // use scrollbars on this text area frame.add(new JScrollPane(area));
Gambar 13. Scrollbars Selain menambah scrollbars pada text area, pengembang juga bisa melakukan modifikasi pada jenis font beserta ukuranya. Pemilihan jenis font 43
yang baik akan membuat audiens tertarik untuk berinteraksi dengan program yang dibuat. Pada java, Font direpresentasikan sebagai Font object, font dapat diubah jenisnya, style (bold atau italic), dan ukurannya (font size). Sebagai contoh, berikut adalah pengubahan font pada text area dengan jenis font Times New Roman, style Bold dan, font size 14. area.setFont(new Font("Times New Roman", Font.BOLD, 14));
Gambar 14. Modifikasi Fonts I. Radio Buttons dan Combo Box 1. Radio Button Radio button adalah salah satu elemen form dasar dalam pembuatan GUI. Radio button biasa digunakan pada saat ada dua atau lebih pilihan yang eksklusif, dan user hanya diperbolehkan untuk memilih hanya salah satu dari pilihan tersebut. Dengan kata lain, jika memilih salah satu pilihan dalam form radio button tersebut, maka secara otomatis akan mengeliminasi pilihan lain yang mungkin dipilih sebelumnya. Fungsi dari button ini sangatlah membantu dalam tujuan menghindarkan user memasukan data yang rentan salah, karena dalam form tersebut hanya ditampilkan pilihan yang valid. Radio Button pada java dideklarasikan dengan JRadioButton, berikut adalah contoh kode program penerapan Radio Button pada sebuah frame:
import java.awt.*; import java.awt.event.*; import javax.swing.*; 44
class RadioButtonFrame extends JFrame implements ActionListener { RadioButtonFrame() { setTitle("Radio Buttons"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); topPanel = new JPanel(); ButtonGroup g = new ButtonGroup(); hijauButton
=
addRadioButton(topPanel,
g,
"Hijau",
kuningButton
=
addRadioButton(topPanel,
g,
"Kuning",
false);
false); unguButton
=
addRadioButton(topPanel,
g,
false); getContentPane().add(topPanel, "North"); panel = new JPanel(); getContentPane().add(panel, "Center"); JMenuBar mb = new JMenuBar(); JMenu file = new JMenu("MyFile"); JMenuItem quit = new JMenuItem("Quit"); file.add(quit); quit.addActionListener(this); mb.add(file); JMenu color = new JMenu("Color"); JMenuItem greenItem = new JMenuItem("Hijau"); 45
"Ungu",
color.add(greenItem); greenItem.addActionListener(this); JMenuItem yellowItem = new JMenuItem("Yellow"); color.add(yellowItem); yellowItem.addActionListener(this); JMenuItem magentaItem = new JMenuItem("Magenta"); color.add(magentaItem); magentaItem.addActionListener(this); mb.add(color); setJMenuBar(mb); } JRadioButton
addRadioButton(JPanel
jp,
ButtonGroup
String name, boolean v)
{ JRadioButton b = new JRadioButton(name, v); b.addActionListener(this); g.add(b); jp.add(b);return b; }
public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == hijauButton) setColor(Color.green); else if (source == kuningButton) setColor(Color.yellow); else if (source == unguButton) setColor(Color.magenta); else { 46
g,
JMenuItem selection = (JMenuItem)source; String cmd = selection.getText(); if (cmd.equals("Quit")) System.exit(0); else if (cmd.equals("Hijau")) { setColor(Color.green); hijauButton.setSelected(true); } else if (cmd.equals("Kuning")) { setColor(Color.yellow); kuningButton.setSelected(true); } else if (cmd.equals("Ungu")) { setColor(Color.magenta); unguButton.setSelected(true); } } }
private void setColor(Color c) { panel.setBackground(c); panel.repaint(); topPanel.setBackground(c); topPanel.repaint(); }
private JPanel panel, topPanel; private JRadioButton hijauButton, kuningButton, unguButton; 47
}
public class RadioButtons { public static void main(String[] args) { JFrame jf = new RadioButtonFrame(); jf.setSize(500, 300); jf.setVisible(true); } }
Gambar 15. Radio Buttons 2. Combo Box Combo Box merupakan kombinasi dari text box dan list box dimana masukan data dapat dilakukan dengan pengetikan maupun pemilihan. Pada kasus di bawah ini akan dicontohkan penggunaan list box dan check box dalam satu frame:
import java.awt.*; import java.awt.event.*; 48
import javax.swing.*; import javax.swing.event.*; public class States extends JFrame implements ActionListener, ListSelectionListener { States() { setTitle("Kota"); setSize(600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JComboBox choice = new JComboBox(); choice.addItem("Red"); choice.addItem("Orange"); choice.addItem("Green"); choice.addItem("Black"); choice.addItem("Blue"); choice.addItem("Cyan"); choice.addActionListener(this); String
[]
items
=
{
"Palembang",
"Yogyakarta",
"Surabaya", "Jakarta", "Bandung", "Bogor", "Semarang", "Manado" }; JList words = new JList(items); JScrollPane sPane = new JScrollPane(words); words.addListSelectionListener(this); JPanel jp = new JPanel(); jp.setLayout(new BoxLayout(jp, BoxLayout.Y_AXIS)); jp.add(sPane); jp.add(choice); getContentPane().add(jp, "East"); show = new Show(); show.setBackground(Color.white); getContentPane().add(show, "Center"); } private Color color = Color.red; private String [] states = { }; // initialized if color chosen first 49
private Show show; public void actionPerformed(ActionEvent e) { JComboBox source = (JComboBox)e.getSource(); Object item = source.getSelectedItem(); if (item.equals("Red")) color = Color.red; else if (item.equals("Green")) color = Color.green; else if (item.equals("Blue")) color = Color.blue; else if (item.equals("Orange")) color = Color.orange; else if (item.equals("Black")) color = Color.black; else if (item.equals("Cyan")) color = Color.cyan; show.updatePanel(color, states); } public void valueChanged(ListSelectionEvent e) { JList source = (JList)e.getSource(); Object [] values = source.getSelectedValues(); states = new String [values.length]; for (int k=0; k> Event >> Action >> actionPerformed sehingga tombol tersebut memiliki aksi apabila diklik.
Di dalam method jButton1ActionPerformed tambahkan kode program di bawah ini: Private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: DefaultPieDataset objek = new DefaultPieDataset(); objek.setValue("Satu", new Integer(10)); objek.setValue("Dua", new Integer (20)); objek.setValue("Tiga", new Integer (30)); JFreeChart chart = ChartFactory.createPieChart("Pie Chart", objek); ChartFrame
frame
=
new
chart); frame.setSize(300,300); frame.setVisible(true); }
106
ChartFrame("Contoh
Pie
Chart",
Perlu diketahui bahwa kode program di atas akan menghasilkan error dikarenakan ada library yang belum diimpor. Maka pada bagian setelah package, import terlebih dahulu library di bawah ini: import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.data.general.DefaultPieDataset;
6. Proses pembuatan grafik sederhana telah selesai. Lakukan Run program dan akan dihasilkan Grafik Pie seperti gambar di bawah ini:
107
RANGKUMAN 1. Multimedia adalah gabungan dari beberapa komonen yaitu teks, grafik, suara, video dan animasi untuk menghasilkan presentasi yang menarik. 2. Cara standar untuk mengelola dan menamplikan gambar dalam sebuah aplikasi berbasis Java adalah dengan menggunakan method getResource(). 3. Audio dalam aplikasi berbasi Java dapat ditampilkan jika format audio tersebut adalah .wav (waveform audio format).
TUGAS TERSTRUKTUR (MANDIRI) Carilah referensi tentang mengelola media berupa video dalam sebuah aplikasi java. Catat dan pahami prosedur untuk memasukan sebuah video dalam aplikasi berbasis java. Lalu diskusikanlah dengan guru kalian!
TUGAS TIDAK TERSTRUKTUR (KELOMPOK) Buatah kelompok terdiri dari 4 orang. 1. Pahami prosedur untuk memasukkan media animasi ke dalam aplikasi berbasis Java. Lalu praktikkan bersama anggota kelompokmu! 2. Buatlah sebuah project berrsama untuk mengembangkan sebuah program yang didalamnya dapat mengolah multimedia berupa gambar, audio, dan video dalam satu Form!
Uji Kompetensi Dasar 5 Soal Pilihan Ganda 1. Fungsi dari IDE GUI Builder adalah... A. Memanggil method lain B. Membuat frame C. Menampilkan komponen multimedia D. Membuat button E. Mendesai user interface
2. Cara mengelola dan menampilkan gambar dalam sebuah aplikasi berbasis Java adalah dengan menggunakan method.... 108
A. getResource() B. panggilgambar() C. getsource() D. postResource() E. voidResource()
3. Salah satu tools yang disediakan oleh perangkat Netbeans yang bertujuan untuk menampilkan suatu output yang berguna bagi user adalah.... A. JFrame B. JOption C. Label D. Button E. Textfield
4. Berikut adalah ekstensi untuk file gambar, kecuali... A. PNG B. JPG C. TIFF D. BMP E. WAV
5. Fungsi dari JavaPackage adalah... A. Membuat project baru B. Membuat tempat penyimpanan file C. Membuat method memanggil program D. Membungkus class Java kedalam grup-grup tertentu yang telah ditentukan E. Media output
6. Salah satu alat pada Jframe yang berguna untuk menempatkan suatu variable di dalamnya adalah fungsi dari... A. Button B. Label 109
C. Form D. Package E. Icon
7. Ekstensi file audio yang dapat dieksekusi dalam program java adalah... A. WAV B. MP3 C. AAC D. MPEG E. WMA
8. Untuk mengeksekusi audio dalam program, diperlukan setting pada button berupa penambahan... A. Method B. Class C. Label D. Event E. Resource
9. Perusahaan pengembang format audio WAV adalah... A. Oracle B. Apple C. Microsoft D. Google E. SUN
10. Perhatikan potongan code berikut: in = new FileInputStream(new File ("C:\\Music\\lagu-lagu.wav"));
Merupakan sebuah potongan code yang berguna untuk... A. Menjalankan program audio B. Membuat button C. Membaca file dari lokasi tertentu D. Memberikan event 110
E. Memanggil resource
11. Multimedia secara istilah diartikan sebagai .. A. Media teks, grafik, suara, video, dan animasi B. Gabungan beberapa media sekaligus C. Informasi komputer yang disajikan ke dalam bentuk grafik D. Pembuatan presentasi E. Mengolah foto dan video
12. Library gratis yang disediakan untuk mendukung Java dalam menampilkan Grafik adalah ... A. JDBC B. IDE Builder C. JFreeChart D. JChart E. Media Framework
13. Fungsi grafik pada sebuah aplikasi adalah ... A. User senang menggunakan aplikasi tersebut B. User lmudah memahami alur aplikasi tersebut C. User mudah memahami informasi dalam aplikasi tersebut D. Untuk menampilkan data berupa angka-angka E. Memberikan gambaran umum alur aplikasi tersebut
14. Apabila kita ingin menyisipkan video ke dalam Form, maka library yang harus dipanggil adalah ... A. JDBC B. IDE Builder C. JFreeChart D. JChart E. Media Framework
111
15. Grafik lingkaran yang menunjukkan ukuran dari suatu item dalam suatu rangkaian data secara proporsional terhadap jumlah dari keseluruhan item disebut grafik ... A. Column B. Pie C. Line D. Bar E. Area
16. Grafik yang sangat ideal untuk menampilkan tren data pada interval waktu yang sama adalah ... A. Column B. Pie C. Line D. Bar E. Area
17. XY chart digunakan untuk ... A. Menunjukkan hubungan dari suatu bagian dengan keseluruhan data namun dapat berisi lebih dari satu rangkaian data B. Membandingkan nilai keseluruhan dari sejumlah rangkaian data C. Menggambarkan fluktuasi harga stok D. Menunjukkan hubungan antara nilai numerik pada beberapa rangkaian data E. Menekankan besarnya perubahan dai waktu ke waktu
18. Stock chart digunakan untuk ... A. Menunjukkan hubungan dari suatu bagian dengan keseluruhan data namun dapat berisi lebih dari satu rangkaian data B. Membandingkan nilai keseluruhan dari sejumlah rangkaian data C. Menggambarkan fluktuasi harga stok D. Menunjukkan hubungan antara nilai numerik pada beberapa rangkaian data 112
E. Menekankan besarnya perubahan dai waktu ke waktu
19. Berikut media yang tidak didukung untuk disisipkan ke dalam Form ... A. Grafik B. Gambar C. Video D. Audio E. Note
20. Perhatikan potongan sintak di bawah ini. objek.setValue("Satu", new Integer(10)); Sintak tersebut digunakan untuk ... A. Membuat objek baru B. Memberi nilai objek dengan nama Satu dan porsi 10 C. Memberi nilai objek dengan nama Satu dan porsi 10% dari keseluruhan D. Mengubah nilai objek dari 1 menjadi 10 E. Mengkonversi nilai objek dari String ke integer
Soal Uraian 1. Apa yang kamu ketahui tentang multimedia? 2. Jelaskan langkah-langkah untuk mengolah file gambar dalam program berbasis java! 3. Jelaskan langkah-langkah untuk mengolah file audio dalam program berbasis java! 4. Jelaskan langkah-langkah untuk menyisipkan grafik dalam Form ! 5. Jelaskan langkah-langkah untuk menyisipkan video dalam Form !
113
REMEDIAL 1. Sebutkan beberapa media yang bisa digunakan untuk menambah daya tarik suatu aplikasi. Sebutkan keunggulan masing-masing media tersebut ! 2. Apa ekstensi file gambar dan audio yang dapat diakses oleh Form? 3. Carilah jenis-jenis grafik yang dapat digunakan untuk menggambarkan suatu data. Sebutkan dan jelaskan minimal 5 jenisnya! 4. Library apa saja yang harus kita panggil agar bisa menyisipkan Grafik dalam Form? 5. Bagaimana library Media Framework bekerja dalam Form?
PENGAYAAN Buatlah sebuah project untuk mengembangkan sebuah program yang didalamnya dapat mengolah multimedia berupa gambar, audio, video, grafik, dan animasi dalam satu Form!
114
BAB 5 MODEL VIEW CONTROLLER (MVC)
Kompetensi Dasar 3.6.
3.7.
Kompetensi Dasar
Memahami Model Vew Controller 4.6.
Mempresentasikan Model View
(MVC) dalam pemrograman
Controller (MVC) dalam
berorientasi objek
pemrograman berorientasi objek
Menerapkan aplikasi berbasis
4.7.
Membuat aplikasi dengan Model
MVC dalam aplikasi dengan
View Controller (MVC) dengan
pelbagai hasil
hasil final (meta-data)
Materi ini akan membahas tentang Model View Controller (MVC) dalam pemrograman berorientasi obyek. Namun, sebelum lebih lanjut mempelajari MVC ini, siswa diharapkan untuk mengulang kembali pembelajaran terhadap konsep dasar Pemrograman Berorientasi Obyek (PBO) karena pemahaman siswa terkait dengan
pemrograman berorientasi obyek merupakan langkah awal untuk
mempermudah
dalam
mempelajari,
memahami
dan
menerapkan
metode
pengembangan aplikasi dengan konsep MVC. Dalam penerapan MVC ini kita akan menggunakan PHP Framework dengan Code Igniter (CI). Dengan demikian pembahasan pada materi ini dimulai dari mempelajari cara instalasi CI dan bekerja dalam metode MVC.
A. Pengenalan dan Instalasi Code Igniter (CI) 1. Definisi Framework Code Igniter Dalam membangun sebuah aplikasi web, tentu kita akan membutuhkan suatu framework. Framework merupakan suatu kerangka kerja yang berupa sekumpulan folder yang memuat file-file php yang menyediakan class libraries, helpers, plugins dan lainnya.
Dengan adanya framework maka akan mempercepat dan
mempermudah pembangunan dari sebuah aplikasi web. Selanjutnya adalah menentukan framework yang akan kita gunakan, dalam materi ini kita akan menggunakan framework Code Igniter (CI). Framework Code Igniter merupakan salah satu framework PHP yang paling banyak di gunakan oleh web developer untuk 115
membangun sebuah aplikasi berbasis website karena Code Igniter merupakan sebuah web application network yang bersifat open source yang digunakan untuk membangun aplikasi php dinamis. Code Igniter memiliki banyak kelebihan diantaranya adalah Free yaitu dapat didownload secara gratis pada situs resminya yaitu www.codeigniter.com Ringan dan cepat Sangat mudah dalam menggunakannya yaitu hanya mengekstrak isi folder codeigniter pada project yang sedang dibuat dilocalhost Syntax yang terstruktur Codeigniter ini menyediakan fasilitas yang sangat lengkap yang disertai dengan tutorial penggunaannya serta implementasin kodenya Keamanan user atau pengakses aplikasi tidak berhubungan langsung dengan database.
2. Cara Instalasi Code Igniter (CI) Sebelum melakukan instalasi maka ada beberapa hal yang perlu diperhatikan yaitu pastikan kita sudah menginstall server local seperti XAMPP, kemudian memiliki program editor PHP seperti PHP Storm, Dreamweaver, dll. Jika sudah maka kita maka kita akan lanjut pada tahap selanjutnya yaitu melakukan instalasi Code Igniter: Download CodeIgniter Extract file zip CodeIgniter dan simpan di folder root server local kalian masingmasing. Jika menggunakan xampp maka akan tersimpan pada bagian htdocs. Kemudian ubahlah nama folder menjadi “codeigniter”.
116
Gambar 31. Hasil ekstract file codeigniter
Bukalah folder tersebut, karena didalam folder tersebut memiliki banyak folder dan file maka pilihlah folder application, system, dan file index.php, kemudian yang lainnya bisa dihapus.
Gambar 32. Memilih data inti pada codeigniter
Lakukanlah
pengaksesan
pada
browser
dengan
menuliskan
“localhost/codeigniter”, maka akan ada tampilan “Welcome to CodeIgniter!”. 117
Dengan demikian, proses instalasi sudah selesai tinggal menjalankan cara kerja Code Igniter menggunakan metode MVC.
3. Alur Kerja Framework Code Igniter (CI) Berikut adalah uraian alur kerja dari framework CI:
Gambar 33. Alur Kerja dari Framework CI (Sumber: idcloudhost.com) Index.php: Index.php disini berfungsi sebagai file pertama dalam program yang akan dibaca oleh program. The Router: Router akan memeriksa HTTP request untuk menentukan hal apa yang harus dilakukan oleh program. Cache File: Apabila dalam program sudah terdapat “cache file” maka file tersebut akan langsung dikirim ke browser. File cache inilah yang dapat membuat sebuah website dapat di buka dengan lebih cepat. Cache file dapat melewati proses yang sebenarnya harus dilakukan oleh program codeigniter. Security: Sebelum file controller di load keseluruhan, HTTP request dan data yang disubmit oleh user akan disaring terlebih dahulu melalui fasilitas security yang dimiliki oleh codeigniter. Controller: Controller akan membuka file model, core libraries, helper dan semua resources yang dibutuhkan dalam program tersebut. View: Hal yang terakhir akan dilakukan adalah membaca semua program yang ada dalam view file dan mengirimkannya ke browser supaya dapat dilihat. 118
Apabila file view sudah ada yang di “cache” maka file view baru yang belum tercache akan mengupdate file view yang sudah ada.
B. Pengenalan Model View Controller (MVC) 1.
Definisi Model View Controller (MVC) Model View Controller (MVC) yang sering disingkat dengan sebutan MVC
merupakan sebuah metode, konsep dalam mengembangkan aplikasi yang memisahkan antara data (model) dari tampilan (view) dan cara bagaimana melakukan pemrosesannya (controller). Model View Controller (MVC) merupakan salah satu solusi arsitektur dalam memudahkan pengembangan perangkat lunak seperti dilakukannya maintenance baik dalam penambahan, perbaikan serta pengurangan kode-kode program. Oleh karena itu, MVC ini banyak digunakan untuk membangun dan mengembangkan aplikasi web saat ini.
2.
Komponen-komponen dari Model View Controller (MVC) Berikut adalah uraian tentang komponen-komponen pada MVC, yaitu:
a. Model Model memegang peran pada bagian kode program yaitu menangani query atau database, mewakili struktur data yang biasa berisi fungsi-fungsi dalam pengelolaan database atau manipulasi data seperti melakukan penambahan data (insert), mengubah data (update) atau menghapus data (delete). Selanjutnya, mari kita coba perhatikan bagaimana contoh dari sintak sebuah model dapat dibuat. Berikut adalah contoh sebuah dengan ilustrasi untuk menampilkan data dari table user. Misal buat sebuah model dengan nama terserah kamu.(model dibuat di dalam folder model di application/model). Disini dicontohkan membuat sebuah model dengan nama “contoh_data.php”.