Anda di halaman 1dari 96

Bab 1:

Konsep OOP
1.1 Kopetensi Dasar
Pada pembahasan Bab 1 ini penulis mengajak mendiskusikan mengenai apa itu bahasa
pemrograman Java. Kopetensi dasar secara umum, agar pembaca bisa mendeskripsikan dapat

mendeskripsikan penggunaan konsep pemrograman berbasis objek. Penulis berharap, diakhir pembahasan, para pembaca bisa : a. Mengenal Program Java dan Membuat Program Java pada Editor Java. b. Menterjemahkan dan Menjalankan Program Java c. Konsep Pemrograman Berbasis Objek d. Karakteristik Pemrograman Berbasis Objek. 1.1.1 Class
Dalam konsep PBO, class adalah merupakan wadah yang berisi abstraksi atau model dari suatu object atau class dapat dikatakan sebagai kumpulan obyek yang mempunyai data atau atribut dan metoda yang sama. Contoh yang menjelaskan hubungan antara class dan obyek secara sederhana adalah misal karyawan adalah suatu class, sedangkan Tono, Tini, Tina adalah nama-nama anggota atau obyek dari kelas keryawan. Di Java terdapat dua macam kelasyaitu :

1. Kelas dan method yang standard atau dasar/fundamental, artinya kelas-kelas ini telah dibuatkan (built-in) oleh Java sehingga kita tinggal menggunakannya, contoh kelas String, kelas Panel, kelas Jframe terutama kelas-kelas untuk aplikasi GUI sudah ada sehingga dapat digunakan langsung pada aplikasi yang kita kembangkan. Method yang dapat langsung kita panggil yang terdapat pada kelas standard tersebut dinamakan API (Application Programming Interface). 2. Kelas dan method yang didefinisikan dan dikembangkan oleh pemrogram sendiri yaitu kelaskelas yang dibuat oleh pemrogram sendiri. Ekstensi file dalam kelas di Java adalah .java yang selanjutnya jika dikompilasi dengan benar hasilnya akan berubah dengan berekstensi file .class Untuk dapat menciptakan anggota atau obyek suatu kelas, maka kelas harus dapat diinstansiasikan dengan kata kunci new atau memanggil konstruktor kelas tersebut. Class ini bisa di-instantiate, dengan memanggil constructor-nya. Instance dari sebuah class disebut sebagai obyek. Kelas (Class) adalah inti dan hal yang penting didalam java. class adalah konstruksi logika dimana seluruh program java akan dibuat karena class mendefinisikan bentuk dan sifat dari sebuah objek.

Bentuk umum deklarasi suatu kelas TANPA konstruktor adalah sbb ;


Class nama_class { //deklarasi atribut atau data atau variabel Type instance_variabel1; Type instance_variabel2;

//deklarasi method yang dimiliki kelas Type nama_method1(daftar_parameter) { // isi method } //deklarasi method yang dimiliki kelas Type nama_method2(daftar_parameter) { // isi method }

Data atau variable-variabel yang didefinisikan dalam class disebut instance variable. Kode program dimuat atau ditulis dalam sebuah method. Variabel dan method yang didefinisikan di dalam class disebut anggota class. Semua method memiliki bentuk umum yang sama seperti main() yang telah sering kita gunakan di modul 1 Tetapi class java tidak harus selalu memakai method main() sebab kelas-kelas java yang tidak memakai method main() nantinya akan dipanggil dalam main(). Berikut adalah contoh kelas sederhana yang hanya terdiri 2 atribut atau variabel tanpa disertai deklarasi method :
Class balok { double panjang; double lebar; }

Untuk Membuat Objek digunakan statement sebagai berikut:


balok baloksaya = new balok();

Nama kelas variabel bebas ATAU balok baloksaya;

instansiasi dengan new

// Mendeklarasikan referensi ke objek

baloksaya new balok (); // mengalokasikan ke sebuah objek

1.1.2

Method

Method adalah implementasi operasi yang bisa dilakukan oleh Class dan Object. Operasi-operasi yang dilakukan oleh Methode, diantaranya, yaitu : 1. Suatu Method bisa menerima dan memanipulasi data atau field didalam diri Method tersebut. 2. Suatu Method bisa mempengaruhi nilai suatu Object lain.

Berikut bentuk penulisan deklarasi Method:


Tipe_Akses Tipe_Return NamaMethod(Argumen1, Argumen2,...,Argumen-N) { ... Badan / Tubuh Method .. }

Berikut penjelasan deklarasi Methode diatas :


1. Tipe Akses, menyatakan tingkatan akses untuk memproteksi akses terhadap data-data

didalam Method, tipe akses ini bersifat opsional. 2. Tipe Return, menyatakan nilai hasil yang diolah oleh Method akan dikembalkan atau akan mengirimkan kepada objek yang memanggil Method. Bentuk Tipe Return, bisa berupa tipe data primitive yaitu integer, float, double dan lain-lain. Apabila Method tidak akan mengembalikan nilai kepada objek yang memanggilnya, maka bisa dituliskan didepan nama Method dengan perintah void.

1.1.3. Objek Di dalam Pemrograman Berorientasi Obyek (PBO) dengan Java, modul program dimodelkan, dirancang dan ditulis sebagai obyek. Kerangka berpikirnya berbeda dengan pemrograman prosedural. Pemrograman prosedural memisahkan antara data, dan prosedur yang mengolah data tersebut. Sedangkan di dalam Java, data dan prosedur ini dipadukan sebagai sebuah obyek. Praosedur disini sering disebut dengan berbagai istilah seperti kapasitas, kemampuan, fungsi, metoda, perilaku dan lain sebagainya yang menggambarkan kemampuan kelas atau kelas untuk melakukan sesuatu tindakan.
Hal ini akan terasa lebih alami. Di alam, berbagai benda, baik yang real maupun abstrak, mempunyai dua hal yang terpadu yaitu ukuran dan tingkah laku. Sebuah perusahaan mempunyai ukuran seperti jumlah karyawan, dan mempunyai tingkah laku seperti mengangkat karyawan. Seekor burung yang sedang terbang mempunyai ukuran seperti ketinggian, dan bisa menukik sebagai tingkah laku. Sebuah windows pada layar komputer mempunyai ukuran, warna, letak koordinat sebagaid data dan mempunyai tingkah laku seperti mengubah warna, mengubah posisi, mengubah ukuran dan lain sebagainya.

Sebagaimana obyek di alam yang mempunyai ukuran dan tingkah laku, sebuah obyek di dalam program juga bisa mempunyai data dan prosedur. Di dalam Java, rancangan sebuah obyek ditulis dalam sebuah class. Di dalam class data diimplementasikan sebagai member variable, sedangkan prosedur yang mengolah data tersebut diimplementasikan dalam method. 1.1.4. Latihan
Sebagai latihan untuk pemahaman anda mengenai bahasa pemrograman java. Sebagai tugas anda, buatlah artikel pada blog anda masing-masing mengenai Bahasa Pemrograman Java. Gunakan bahasa

yang releks, setelah itu kirimkan URL blog anda ke email dosen anda.

Lembar ini sengaja dikosongkan

Bab 2:

Penerapan Parameter dan Method


2.1 Parameter

Parameter merupakan bagian dari antar muka dengan suatu subrutin. Jika subrutin adalah kotak hitam, maka parameter merupakan alat atau mekanisme untuk memberikan informasi dari dunia luar ke dalam kotak. Dengan menggunakan parameter, kita dapat mengatur perilaku subrutin sesuai dengan input yang diberikan. Parameter adalah suatu bagian dari method yang mana harus diberi type data, yang bisa menentukan suatu nilai atau merubah suatu nilai saat program java dijalankan (Running) atau ditampilkan dengan method yang sudah ada di java. Sebagai contoh analogi, kita ambil contoh AC. AC memiliki parameter, yaitu tombol remote yang digunakan untuk memasukkan suhu yang diinginkan. AC akan selalu melakukan tugas yang sama, yaitu mengatur suhu ruangan. Akan tetapi, tugas persisi yang dilakukan tergantung suhu yang diterima dari remote control. Contoh :
public static double ambilDouble(String pertanyaan) { String strbilangan = null; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); double bilangan; System.out.print(pertanyaan); try { strbilangan = br.readLine(); } catch (IOException ioe) { System.out.println("Kesalahan IO, program berhenti"); System.exit(1); } bilangan = Double.parseDouble(strbilangan); return bilangan; }

Subrutin ambilDouble memiliki parameter tunggal yang bertipe String dan bernama pertanyaan. Ketika subrutin ini dipanggil, suatu nilai harus ikut disertakan, dan nilai ini dimasukkan dalam parameter pertanyaan. Misalnya, subrutin dapat dipanggil dengan
a=ambilDouble("hallo");. Ketika komputer menjalankan perintah ini, komputer akan memasukkan hallo ke dalam parameter pertanyaan, kemudian subrutin

ambilDouble menjalankan semua perintah di dalamnya. Jika parameter yang diberikan berupa variable, misalnya str berisi kabar, kemudian subrutin ambilDouble panggil dengan perintah ambilDouble (str), maka isi dari str akan dikopi ke dalam parameter pertanyaan terlebih dahulu sebelum seluruh perintah dalam subrutin ambilDouble dilaksanakan.

Perlu dicatat bahwa istilah parameter digunakan dalam dua konsep berbeda tetapi berkaitan. Yang pertama adalah parameter digunakan untuk mendefinisikan suatu subrutin. Parameter yang digunakan pada definisi suatu subrutin disebut parameter formal. Parameter yang digunakan untuk memanggil suatu subrutin disebut parameter actual. Ketika suatu subrutin dipanggil, parameter actual akan dievaluasi, dan hasilnya akan dimasukkan ke dalam parameter formal. Parameter formal berbentuk seperti pengenal atau nama, dan berdifat halnya variable dan memiliki tipe, misalnya int, double, atau String. Parameter actual berdifat seperti nilai atau angka, jadi bisa berbentuk ekspresi atau perintah yang menghasilkan nilai atau angka. Sewaktu kita memanggil subrutin, kita harus member parameter actual untuk setiap parameter formal yang didefinisikan.
static void lakukanSesuatu(int N, double d, boolean b) { ... // perintah lainnya di sini }

Subrutin ini bisa saja dipanggil dengan instruksi berikut.


lakukanSesuatu(1, Math.random() * 3, x == 3);

Ketika komputer mengevaluasi subrutin ini, pada dasarnya sama dengan melakukan perintahperintah berikut :
{ int N; double d; boolean b; N = d = b = ... } 1; Math.random() * 3; (x == 3); // perintah lainnya di sini

Untuk memanggil subrutin, yang kita perlukan adalah nama, berapa banyak parameter formal yang dimilikinya, dan tipe dari parameter formal tersebut. Informasi ini disebut juga tanda subrutin. Tanda subrutin lakukanSesuatu dapat ditulis sebagai lakukanSesuatu(int,double,Boolean). Perhatikan bahwa tanda subrutin tidak memiliki nama parameter; sebetulnya jika kita hanya ingin menggunakan subrutin tersebut, nama parameter tidaklah penting, karena nama bukan merupakan bagian dari antar muka subrutin.

Java agak sedikit berbeda karena memungkinkan dua atau lebih subrutin yang berbeda dalam kelas yang sama memiliki tanda subrutin yang berbeda. Subrutin yang seperti ini disebut subrutin yang dibebankan (overloaded). Misalnya,
void void void void taruh(String s) { ... } taruh(int i) { ... } taruh(double d) { ... } taruh(boolean b) { ... }

Kita sudah menggunakan subrutin yang dibebankan ini misalanya pada System.out.println(). Jika kita coba System.out.println pada Eclipse, maka akan membantu kita untuk melihat parameter apa saja yang dibutuhkan, termasuk juga dapat menunjukkan apakah suatu subrutin dibebankan.

Catatan : Overloaded tidak berlaku pada tipe keluaran subrutin. Dua atau lebih subrutin dengan nama sama dalam satu kelas tetapi memiliki tipe keluaran yang berbeda tidak diperbolehkan dalam Java. Misalnya, kalau kita coba definisikan 2 fungsi seperti berikut, maka Java akan member pernyataan kesalahan sintaks.
int ambil(String s) { ... } boolean ambil(String s) { ... } double ambil(String s) { ... }

Hingga saat ini kita sudah mengenal 3 jenis variable: variable local, yang didefinisikan di dalam suatu blok, variable static, yang didefinisikan di dalam suatu class, dan parameter formal yang didefinisikan pada definisi subrutin di dalam suatu class. Variabel local tidak memiliki hubungan dengan dunia luar sama sekali. Parameter digunakan untuk berhubungan dengan dunia luar sebagai alat untuk menerima nilai atau angka dari dunia luar. Perubahan nilai pada variable local dan parameter tidak mempengaruhi variable itu sendiri karena sifatnya terisolasi. Hal yang sama sekali berbeda akan terjadi apabila suatu subrutin menggunakan variable yang didefinisikan di luar subrutin itu. Variable tersebut hidup secara terpisah dari subrutin, dan bisa diakses oleh apapun di luar subrutin itu. Variable ini disebut variable global. Variable ini terlihat oleh semua subrutin dalam class tersebut. Perubahan yang terjadi di sini dapat mempengaruhi cara kerja subrutin lain yang menggunakan variable tersebut. 2.2 Method

Method adalah implementasi operasi yang bisa dilakukan oleh class dan objek. Operasioperasi yang dilakukan oleh method diantaranya, yaitu: 1. 2. 2.2.1 Suatu method bisa menerima dan memanipulasi data atau field di dalam diri method tersebut. Suatu method bisa mempengaruhi nilai suatu objek lain. Membuat Method Untuk membuat atau menciptakan method terdapat 4 bagian yang mendasar, yaitu : 1. 2. 3. 4. Nama method Daftar parameter-parameter Tipe objek atau tipe primitive (tipe data) yang dikembalikan oleh method Badan program method

Berikut bentuk penulisan deklarasi Method:


Tipe_Akses Tipe_Return NamaMethod(Parmater1,...,Argumen-N) { ... Badan / Tubuh Method .. }

Berikut penjelasan deklarasi Methode diatas : 1. Tipe Akses, menyatakan tingkatan akses untuk memproteksi akses terhadap data-data didalam Method, tipe akses ini bersifat opsional. 2. Tipe Return, menyatakan nilai hasil yang diolah oleh Method
akan dikembalikan atau akan

mengirimkan kepada objek yang memanggil Method. Bentuk Tipe Return, bisa berupa tipe

data primitive yaitu integer, float, double dan lain-lain.


Apabila Method tidak akan mengembalikan nilai kepada objek yang memanggilnya, maka bisa

dituliskan didepan nama Method dengan perintah void. 2.2.2 Menerapkan Method pada Class

Berikut contoh program membuat class dengan penggunaan method, secara selengkapnya seperti

dibawah ini:
import java.util.*; class Hitung { int tambah; int setHitung(int nil1, int nil2) {

tambah = nil1 + nil2 ; return tambah;


} }

class Lat202 { public static void main(String[] args) { int a, b, hasil; Hitung ngitung = new Hitung(); Scanner input = new Scanner(System.in);
System.out.print("Masukan Nilai A = ");

a = input.nextInt();
System.out.print("Masukan Nilai B = ");

b = input.nextInt(); hasil = ngitung.setHitung(a, b); System.out.println("Hasilnya " + hasil); } }

Output yang dihasilkan dari program Lat702.java diatas, seperti dibawah ini :

Gambar 2.2 Hasil Program Lat702.java

Berikut penjelasan program Lat702.java, diatas : a. Pada baris 8 sampai 16, mendeklarasikan pembuatan class dengan nama Hitung, didalamnya memiliki sebuah method dengan nama setHitung untuk menampung nilai-nilai kiriman dari class 702 yang bertipe integer, sekaligus melakukan proses perhitungan. b. Pada baris 24, terdapat pernyataan
Hitung ngitung = new Hitung();

digunakan untuk membuat objek dengan nama ngitung, yang berdasarkan class Hitung. c. Pada baris 27 sampai 30, terdapat pernyataan burung_elang.jenis = "Elang Jawa";
burung_elang.warna = "Coklat"; burung_elang.usia = 5 System.out.print("Masukan Nilai A = "); a = input.nextInt();
System.out.print("Masukan Nilai B = ");
b = input.nextInt();

Pernyatan tersebut digunakan untuk memberikan menginput nilai kepada variabel a dan b. d. Pada baris 32, terdapat pernyataan
hasil = ngitung.setHitung(a, b);

Pernyatan tersebut digunakan untuk memanggil method setHitung serta mengirimkan nilai variabel a dan b, dan hasil return dari method setHitung akan ditampung pada variabel hasil.

2.2.3

This

This adalah sebuah keyword yang digunakan untuk menunjukan class instan saat ini, this dapat

dipergunakan pada variabel atau method.. Berikut contoh penggunaan kata kunci this, selengapnya seperti program di bawah ini :

/* -------------------------------Nama File : Lat203.java Author : Frieyadie ----------------------------------- */ class Gelas { String isigelas, warnagelas; void setGelas(String isi, String warna) { this.isigelas = isi; this.warnagelas = warna; } } class Lat203 { public static void main(String[] args) { Gelas Mug = new Gelas(); Mug.setGelas("Coca Cola","Putih"); System.out.println("Isi Gelas : " + Mug.isigelas); System.out.println("Warna Gelas : " + Mug.warnagelas); } }

Output yang dihasilkan dari program Lat703.java diatas, seperti dibawah ini :

Gambar 7.3 Hasil Program Lat203.java Penjelasan program : Pada baris 12 dan 13, terdapat perintah : this.isigelas = isi; this.warnagelas = warna; digunakan untuk menyatakan variable instans saat ini yaitu isigelas dan warnagelas. Pada baris 25 dan 26, terdapat perintah : System.out.println("Isi Gelas : " + Mug.isigelas);
System.out.println("Warna Gelas : " + Mug.warnagelas);

Digunakan untuk menampilkan nilai yang ada didalam variabel instan tersebut.

2.2.4

Latihan

Buatlah program menghitung luas dan keliling lingkaran dengan menggunakan class dan method. Method yang harus dibuat yaitu : luas() untuk menghitung luas lingkaran dan keliling() untuk mengitung keliling lingkaran.

Bab 3:

Penerapan Encapsulation dan Construktor


3.1 Kopetensi Dasar

Pada pembahasan Bab 3 ini, penulis mengajak mendiskusikan penggunaan Costructor pada bahasa pemrograman java. Kopetensi dasar secara umum, agar mahasiswa/I atau pembaca bisa mendeskripsikan dan memahami penggunaan Constructor dan Encapsulation pada bahasa pemrograman Java. 3.2 Constructor

Constructor merupakan suatu method yang akan memberikan nilai awal pada saat suatu obyek dibuat. Pada saat program dijalankan, constructor akan langsung memberikan nilai awal pada saat perintah new, membuat suatu objek. Pada saat kita bekerja dengan constructor, hal mendasar yang perlu diperhatikan yaitu : a. Nama constructor sama dengan nama class. b. Tidak ada return type yang diberikan ke dalam constructor signature. c. Tidak ada return statement di dalam tubuh constructor. Untuk lebih jelasnya sekarang bisa anda lihat pada program seperti di bawah ini :
class Lat801 { float nilakhir; Lat301(int nilai_akhir) { nilakhir = nilai_akhir; } public String grade() { String nilgrade; if(nilakhir >= 80) nilgrade = "A"; else if(nilakhir >= 68) nilgrade = "B";

else if(nilakhir >= 56) nilgrade = "C"; else if(nilakhir >= 49) nilgrade = "D"; else nilgrade = "E"; return nilgrade; } public void cetak() { System.out.println("Grade Nilainya = " + grade()); } public static void main(String[] args) { Lat301 hasil = new Lat801(67); hasil.cetak(); } }

Output yang dihasilkan dari program Lat301.java diatas, seperti dibawah ini :

Gambar 3.1 Hasil Program Lat801.java Berikut penjelasan Lat301.java di atas : a. Pda baris 10 sampai 13, mendeklarasikan pembuatan Constructor. Bisa anda lihat bahwa nama methodnya sama dengan nama class yaitu sama-sama Lat301. Pada constructor Lat301 ini menangkap argument yang dikirimkan dari main method. b. Pada baris 39, terdapat pernyataan Lat301 hasil = new Lat301(67); Digunakan untuk membuat objek dengan nama hasil, sekaligus mengirimkan argument ke constructor. 3.2.1 Constructor Overloading

Overloading adalah suatu cara membuat lebih constructor pada suatu class. Supaya pengaksesan constructor tersebut lancer, maka sebagai pembedanya adalah tipe parameter dan atau jumlah parameternya. Untuk jelasnya anda bisa lihat program dibawah ini :

class Lat302 { float nilakhir, a; Lat302(int nilai_akhir){ nilakhir = nilai_akhir; } Lat302(int nil1, int nil2){ nilakhir = ab + ac; } public String grade() { String nilgrade; if(nilakhir >= 80) nilgrade = "A"; else if(nilakhir >= 68) nilgrade = "B"; else if(nilakhir >= 56) nilgrade = "C"; else if(nilakhir >= 49) nilgrade = "D"; else nilgrade = "E"; return nilgrade; } public void cetak() { System.out.println("Grade Nilainya = " + grade()); } public static void main(String[] args) { Lat302 hasil = new Lat302(67); hasil.cetak(); Lat302 hasilnya = new Lat302(45, 35); hasilnya.cetak(); } }

Output yang dihasilkan dari Lat302.java di atas, seperti di bawah ini :

Gambar 3.2 Hasil Program Lat802.java

Berikut penjelasan program Lat302.java di atas : a. Pada baris 10 sampai 18, mendeklarasikan pembuatan 2 buah constructor. Bisa anda lihat bahwa nama methodnya masing-masing sama dengan nama class yaitu Lat302. Perbedaan pada masing-masing constructor hanya pada parameterya saja. Pada constructor Lat302 ini menangkap argument yang dikirimkan dari main method. b. Pada baris 44 dan 46, terdapat pernyataan Lat302 hasil = new Lat3023(67); Lat302 hasilnya = new Lat302(45, 35); Digunakan untuk membuat objek dengan nama hasil, sekaligus mengirimkan argument ke constructor.

3.2.2

Method Overloading

Method Overloading adalah suatu cara membuat lebih dari method pada suatu class. Supaya pengaksesan method tersebut lancer, maka sebagai pembedanya adalah tipe parameter dan atau jumlah parameternya. Untuk lebih jelasnya anda bisa lihat program di bawah ini :
class Perhitungan { static public int hitung(int a, int b) { return a + b; } static public double hitung(double a, double b, double c) { return (a + b)/c; } } public class Lat803 { public static void main(String[] args) { Perhitungan Ngitung = new Perhitungan(); int hitung; double bagi; hitung = Ngitung.hitung(4, 8); bagi = Ngitung.hitung(55, 69, 2); System.out.println("Hasil Perhitungan = " + hitung); System.out.println("Hasil Pembagian = " + bagi); } }

Output yang dihasilkan dari program Lat303.java di atas, seperti di bawah ini :

Gambar 3.3 Hasil Program Lat803.java Berikut penjelasan program Lat303.java di atas : a. Pada baris 8 sampai 16, mendeklarasikan pembuatan 2 buah Method. Bisa anda lihat bahwa nama methodnya sama dengan nama method yang lainnya, yaitu sama-sama hitung. Perbedaan pada masing-masing method hanya pada parameternya saja. Pada method hitung ini menangkap argument yang dikirimkan dari main method. b. Pada baris 44 dan 46, terdapat pernyataan hitung = Ngitung.hitung(4,8); bagi = Ngitung.hitung(55,69, 2); digunakan untuk mengirimkan nilai parameter ke masing-masing method yang dituju, dan kemudian nilai baliknya ditampung ke masing-masing variable, dimana parameter tersebut dikirmkan.

3.3

Encapsulation Encapsulation dalam pemrograman berbasis objek, merupaka suatu cara bagaimana

menyembunyikan sedemikian rupa suatu proses ke dalam system, hal ini berguna untuk menghindari interfensi dari luar system dan juga lebih untuk menyederhanakan system itu sendiri. Kita ambil contoh, pada saat anda mengganti chanel TV menggunakan remote TV, apakah anda mengetahui proses yang terjadi di dalam TV tersebut? Maka jawabannya tidak tahu, dan anda pun sebagai pembeli TV tidak mau dipusingkan dengan proses yang terjadi. Maka hal tersebut menyederhanakan system. Pada Enkapsulasi, segala jenis pengaksesan property class, harus melalui method, inilah cara kerja enkapsulasi, sehingga proses yang mencegah class variable-variabel yang sedang dibaca, dimodifikasi oleh class lainnya.

3.4 3.4.1

Kontrol Akses pada Enkapsulasi Akses Default Variable atau metode bisa dideklarasikan tanpa control akses modifier yang tersedia untu

setiap class lainnya dalam satu paket. Java Class Library pada Java disusun dalam paket seperti javax.swing seperti class window, terutama untuk digunakan dalam pemrograman GUI (Graphical User Interface) dan java.util yang berguna untuk kelompok class utilitas. Setiap variable dideklarasikan tanpa modifier dapat dibaca atau diubah oleh yang lain di kelas satu paket. Metode apapun dapat dinyatakan dengan cara yang sama dan dapat dipanggil oleh kelas lain dalam satu paket.
class hitung { int c = 8; } class Lat1001 { public static void main(String[] args) { int hasil; hitung tambah = new hitung(); System.out.println("Hasil Pertambahan = " + tambah.c); } }

Penjelasan : Pada class hitung di atas tidak terdapat akses control modifier yang digunakan. Kemudian pada class Lat1001, variable c, juga bisa langsung digunakan. Berikut output yang dihasilkan dari program Lat1001.java

Gambar 3.4. Hasil Program Lat901.java

3.4.2

Akses Private

Secara utuh menyembunyikan variable atau metoda yang akan digunakan oleh kelaskelas lain,dengan menggunakan modifier private. Satu-satunya tempat dimana variable-variabel atau metode-metode ini dapat diakses yaitu dari dalam kelasnya sendiri. Sebagai contoh variable instan private, bisa digunakan oleh metode-metode di dalam kelas kepunyaannya, akan tetapi bukan oleh objek dari Class lainnya. Method private dapat dipanggil oleh metode-metode lain di dalam kelas mereka sendiri tetapi tidak bisa dipanggil oleh lainnya. Variable-variabel private akan bermanfaat pada 2 keadaan : 1. Apabila kelas-kelas lain tidak punya alasan untuk menggunakan variabelnya. 2. Apabila kelas lain bisa menghadirkan nilai dengan mengubah variable pada satu cara yang tidak sesuai.
class hitung { private int c = 8; } class Lat1002 { public static void main(String[] args) { int hasil; hitung tambah = new hitung(); System.out.println("Hasil Pertambahan = " + tambah.c); } }

Di dalam contoh kode ini, format variable class hitung yaitu private, maka sama sekali classclass lainnya tidak bisa untuk mendapat kembali atau menetapkan nilainya secara langsung. Maka jika decompile, akan terjadi kesalahan seperti gambar di bawah ini :

Gambar 3.5. Pesan Kesalahan Akses Data Private Cara untuk mengakses variable c yang bersifat private, maka dengan cara menambahkan metode yang digunakan untuk mengakses variable tersebut. Modifikasi programnya seperti di bawah ini:

class hitung { private int c = 8; public int getVAR() { return this.c; } } class Lat1003 { public static void main(String[] args) { int hasil; hitung tambah = new hitung(); System.out.println("Nilai C = " + tambah.getVAR()); } }

Maka dengan cara menambahkan method getVAR, sekarang variable c yang bersifat public bisa diakses.

Gambar 3.6. Hasil Pengaksesan Variabel Private Menggunakan modifier private adalah cara utama suatu objek mengenkapsulasi dirinya. 3.4.3 Akses Public

Dalam beberapa hal, anda mungkin ingin variable atau metoda dalam suatu kelas untuk dengan sepenuhnya tersedia bagi kelas lain yang ingin menggunakannya. Sebagai contoh, class warna di dalam paket java.awt, mempunyai variable-variabel publik untuk warna-warna umum seperti hitam. Variable ini digunakan apabila suatu class ingin gunakan warna hitam, dan tidak perlu punya kendali akses sama sekali. Proses ke dalam system, hal ini berguna untuk menghindari interfensi dari luar system dan juga lebih untuk menyederhanakan system itu sendiri. Modifier public membuat suatu variable atau metoda dengan sepenuhnya dapat diakses oleh semua class. Kita sudah sering menggunakannya di dalam tiap-tiap aplikasi yang kita tulis sejauh ini, dengan statement seperti berikut :

public static void main(String[] args) { //code here ... }

Method main(), haruslah bersifat public, karena tidak akan bisa dipanggil oleh Java Interpreter untuk menjalankan class. Oleh karena itu subclass menerima warisan, semua variable dan method dari suatu class. 3.4.4 Akses Protected

Protected digunakan untuk membatasi variable dan metoda untuk digunakan oleh dua kelompok berikut, yaitu : Sub Class dari satu class Class-class lain di dalam paket yang sama

Tingkat kendali akses ini bermanfaat jika kita ingin membuat itu lebih mudah untuk subclass untuk diterapkan sendiri. Akses protected member subclass untuk menolong variable atau metoda ketika suatu class yang bukan hubungannya berusaha untuk menggunakan hal tersebut.
Package Latpack public class Paket1 { protected int a = 75; public void info() { System.out.println("Ini Kelas Paket1"); } }

Simpan dengan nama Paket1.java, kemudian compile-lah file Paket1.java. selanjutnya buatlah class yang kedua, seperti di bawah ini :
Package Latpack public class Paket2 { public void info() { System.out.println("Ini Kelas Paket2"); } }

Simpan dengan nama Paket2.java, kemudian compile-lah file Paket2.java. selanjutnya buatlah class yang ketiga seperti di bawah ini :

import Latpack.Paket1; import Latpack.Paket2; public class Lat1004 { public static void main(String[] args) { Paket1 objekPaket1 = new Paket1(); objekPaket1.info(); System.out.println("Nilai A = " + objekPaket1.a); Paket2 objekPaket2 = new Paket2(); objekPaket2.info(); } }

Penjelasan : Pada program Paket1.java, terdapat deklarasi variable Protected int a = 75; Kemudian pada program Lat1004.java, terdapat pemanggilan secara langsung variable a, dari program Lat1004.java System.out.println("Nilai A = " + objekPaket1.a);
Maka dalam hal ini, jika decompile, maka akan terjadi error, seperti di bawah ini :

Gambar 3.7. Error pada Pengaksesan Langsung Solusi yang bisa dilakukan yaitu dengan cara membuat method untuk pengaksesan variable yang menggunakan modifier protected();

3.5 1.

Latihan Buatlah program untuk menghitung volume Silinder. Gunakan konsep Enkapsulasi. Nilai Radius diinput melalui keyboard.
Buatlah program untuk menghitung penjumlahan, pengurangan, perkalian dan pembagian

2.

dengan mengunakan konsep Enkapsulasi. Nilai Satu dan Dua diinput. 3.


Buatlah program untuk menghitung nilai akhir dan mencari nilai grade dengan cara Pewarisan. Gunakan Konsep Enkapsulasi. Ketentuan lainnya nilai UTS dikali dengan 40% untuk mendapatkan nilai murni UTS dan untuk mendapatkan nilai murni UAS yaitu 60% dikali

dengan nilai UAS.

Bab 4 :

Penerapan Inheritance
4.1 Inheritance Pewarisan bahasa kerennya Inheritance. Dalam pemrograman berbasis objek, Inheritance

memungkinkan suatu Class bisa mewariskan atribut dan Method kepada Class yang lainnya atau subclass, sehingga membentuk Class hirarki. Inheritance merupakan suatu aspek atau pengarah pokok kecerdasan manusia untuk mencari, mengenali, dan menciptakan hubungan antar konsep. Kita membangun hirarki, matriks, jaringan, dan hubungan timbale balik lain untuk menjelaskan dan memahami tata cara di mana hal-hal saling berhubungan. Tanpa Inheritance, kelas-kelas merupakan sebuah unit berdiri sendiri. Inheritance akan membentuk suatu konsep dimana jika konsep yang di atas berubah, maka perubahan akan berlaku di bawahnya. Inheritance sangat mirip dengan hubungan orang tua dengan anak. Manakala suatu kelas menerima warisan dari semua anggota data dan fungsi menerima warisan, walaupun tidak semua diantara mereka akan dapat diakses oleh anggota fungsi dari kelas. Sebagai contoh, pada saat kita bicara mengenai Binatang, maka Binatang tersebut bisa mewariskan kepada Binatang yang lain berupa usia, bobot, makan, tidur dan lain sebagainya.
BINATANG USIA BOBOT

MACAN

MERAUNG MENERKAM

Gambar 4.1. Mewariskan Class

Dilihat pada gambar di atas, Class Macan akan mewariskan seluruh method dan variable instan dari Class Binatang yang bersifat public. Berarti Class Binatang disebut sebagai SuperClass atau Class Induk dan Class Macan disebut sebagai SubClass atau Class Anak atau Class Turunan. Terkadang akan menemukan dimana kondisi suatu nama method pada class anak sama dengan nama method pada SuperClass nya, hal seperti ini disebut dengan Override. 4.1.1 Penentu Akses Pada Inheritance

Penentuan akses pada Inheritance ada tiga macam, yaitu : a. Public Penentuan akses berbasis public, menyebabkan anggota dari public sebuah class utama akan menjadi anggota public class turunan dan menyebabkan juga anggota protect class utama menjadi anggota protect class turunan, tetapi untuk anggota class private tetap pada private class utama. Private Penetuan akses berbasis private, menyebabkan anggota dari anggota public sebuah class utama akan menjadi anggota protect class turunan dan menyebabkan anggota dari class utama menjadi anggota private dari class turunan. Anggota private dari class utama tidak dapat diakses kecuali oleh class utama Protected Penentu akses berbasis protect menyebabkan anggota dari anggota protect dan public class utama akan menjadi anggota private dari class turunan. Anggota private dari class utama selalu menjadi anggota private class utama. Mulai Melakukan Pewarisan Untuk melakukan pewarisan suatu class, yang perlu diperhatikan yaitu kita harus menggunakan keyword extends. Extends digunakan untuk mendeklarasikan suatu class adalah turunan dari class lainnya. Terpenting yang perlu diingat, sebuah class tidak diperbolehkan mempunyai lebih dari satu class induk atau superclass. Supaya lebih jelas bagaimana melakukan pewarisan class, sekarang perhatikan beberapa program di bawah ini :

b.

c.

4.1.2

class Matematika { private int a, b; public Matematika() { a = 1; b = 2; } public int tambah() { return a + b; } public int kali() { return b * 3; } }

Setelah selesai, membuat program di atas, simpan dengan nama : Matematika.java. pada class Matematika mempunyai 2 buah method, yaitu tambah dan kali dan 2 buah variable yaitu a dan b. kemudian compile program Matematika.java tersebut. Kemudian, berdasarkan class Matematika di atas, sekarang kita akan buat sebuah class baru yang merupakan class turunan dari class Matematika. Bentuk penulisan class turunan seperti di bawah ini :
class
{ Badan class turunan }

Nama_Class_Turuan

extends

Class_Induk

Penjelasan : a. b. Nama_Class_Turunan, adalah nama class yang akan dibuat sebagai class turunan atau subclass. Class_Induk, adalah class yang ditunjuk sebagai SuperClass untuk class turunan.

Berikut contoh pembuatan subclass Hitung


class Hitungan extends Matematika { private int x, y; public Hitungan() { x = 1; y = 2; }

public Hitungan(int i, int j) { x = i; y = j; } public int tambah() { return x + y; } public int kali() { return y * 3; } }

Pada program Hitungan.java, diperuntukan untuk melakukan proses perhitungan, jika dilihat disini terdapat 2 constructor dan penggunaan method yang sama dengan method class induknya. Lakukan compile program Hitungan.java. selanjutnya kita akan membuat program utama, untuk menampilkan hasil proses yang dilakukan oleh class Matematika dan class Hitungan. Berikut program utamanya :
class Lat804 { public static void main(String[] args) { Hitungan ngitung = new Hitungan(5, 6); System.out.println(" Hasil Pertambahannya = " + ngitung.tambah()); System.out.println(" Hasil Perkaliannya = " + ngitung.kali()); } }

Program Lat804.java, kita bisa melakukan pengiriman nilai kedalam class Hitungan. Selanjutnya memanggil method tambah() dan kali() untuk ditampilkan hasilnya.

Gambar 4.1. Hasil Program Lat804.java a. Menggunakan Method SuperClass Method yang berada di dalam SuperClass juga bisa digunakan atau dipanggil dari SubClass nya. Hal tersebut bisa dilakukan dengan menggunakan keyword super, yang memiliki

pengertian SuperClass. Bentuk penulisan penggunaan method SuperClass, seperti di bawah ini :
super.nama_method();

Untuk lebih jelasnya, sekarang bukalah program Hitungan.java, kemudia tambahkan beberapa perintah seperti di bawah ini :
class Hitungan extends Matematika { private int x, y; public Hitungan() { x = 1; y = 2; } public Hitungan(int i, int j) { x = i; y = j; } public int tambah() { return (x + y) + super.kali(); } public int kali() { return (y * 3 - super.tambah()); } }

Sudah dijelaskan sebelumnya class Hitungan, merupakan class turunan dari class Matematika, sekarang perhatikan pada baris 24, perintahnya ditambah menjadi
return (x + y) + super.kali();

Pada baris 29, juga tambahkan pula, menjadi :


return (y * 3) super.tambah(); Kedua penambahan tersebut, yaitu memanggil method kali dan method tambah, yang berada didalam SuperClass. Sekarang compile kembali program Hitungan.java dan running kembali program

Lat804.java.

Gambar 4.2. Hasil Program Lat804.java

b.

Menggunakan Constructor SuperClass

Constructor yang berada didalam SuperClass juga bisa digunakan atau dipanggil dari SubClass nya. Hal tersebut bisa dilakukan dengan menggunakan Constructor SuperClass, seperti dibawah ini :
super(parameter1, parameter2, ..., parameter-n);

keyword

super,

yang

digunakannya seperti pada saat menggunakan method. Bentuk penulisan penggunakan

Untuk lebih jelasnya, sekarang bukalah program Hitungan.java, kemudian tambahkan, beberapa perintah, seperti dibawah ini :
class Aritmatika { private int a, b; public Aritmatika(int x, int y) { this.a = x; this.b = y; } public int kali() { return a * b; } public void hasil() { System.out.println("Nilai A = " + this.a);
System.out.println("Nilai B = " + this.b);

} }

Program pertama diatas, kita anggap sebagai class induk yang akan dipergunakan pada subclass pada program dibawah ini. Pada program diatas, terdapat sebuah constructor yang mendeklarasikan nilai awal a dan b. Setelah itu compile lah program Aritmatika.java.
class Perhitungan extends Aritmatika { protected int z; public Perhitungan(int z, int x, int y) { super(x, y); this.z = z; } public int Hitung() { return z + super.kali(); } public void hasil() { System.out.println("Nilai Z = " + this.z); super.hasil(); } }

Pada program utama, membuat objek berdasarkan dari class perhitungan, dikarenakan yang akan diproses adalah class turunan yaitu class Perhitungan, dan sekaligus mengirimkan nilai parameter ke class Perhitungan. Pada baris 11, juga terdapat pemanggilan method hasil() dari class Perhitungan, yang gunakanya untuk menampilkan nilai-nilai yang ada pada class Perhitungan. Pada baris 12, juga melakukan pemanggilan method Hitung(), yang akan ditampilkan hasil perhitungannya. Sekarang simpanlah program Lat805.java diatas pada folder kerja anda masing-masing Kemudian compile dan running, maka akan tampil hasil program Lat805.java seperti dibawah ini:

Gambar 4.3. Hasil Program Lat805.java

4.2 1.

Latihan Buat class MatematikaCanggih yang merupakan inherit dari class Matematika a. Tambahkan method modulus(int a, int b) yang mengitung modulus dari a dan b. operator modulus adalah %. Buat class MatematikaCanggihBeraksi yang memanggil method pertambahan, perkalian dan modulus.

2.

Bab 5:

Polymorphism
5.1 Polymorphism

Karakteristik dari polymorphism yaitu memungkinkan suatu objek dapat memiliki berbagai bentuk atau banyak bentuk. Bentuk dari objek ini bisa sebagai Object dari Classnya sendiri atau Object dari superClassnya. Pada polymorphism kita akan sering menjumpai 2 (dua) istilah yang sering digunakan dalam pemrograman berbasis objek, istilah tersebut yaitu : a. Overloading Overloading yaitu menggunakan 1 (satu) nama objek untuk beberapa Method yang berbeda ataupun bisa juga beda parameternya. Overriding Overriding akan terjadi apabila ketika pendeklarasian suatu Method subclass dengan nama objek dan parameter yang sama dengan Method dari superClassnya.

b.

class Binatang { String namaBinatang; Binatang() { } Binatang(String namaBinatang) { this.namaBinatang = namaBinatang; } public void cetakjenis() { System.out.println("Nama Binatang : "+ namaBinatang); } }

Pada program Binatang.java, terdapat constructor, untuk memberikan nilai awal. Berikutnya buatlah class baru seperti di bawah ini :
class suara extends Binatang { String suara; suara() { super(); }

public void cetakjenis() { suara="Mengaum"; System.out.println("Suara : " + suara); } }

Pada program suara.java, sebagai subclass dari class binatang, juga terdapat constructor suara, untuk memberikan nilai awal, dan terdapat overriding cetakjenis(). Berikutnya buatlah class baru seperti di bawah ini :
class jenisBinatang extends Binatang { String jenisBinatang; jenisBinatang(String jenisBinatang) { super(jenisBinatang); } public void cetakjenis() { super.cetakjenis(); jenisBinatang="Predator"; System.out.println("Jenis Binatang : " + jenisBinatang); } }

Pada program jenisBinatang.java, sebagai subclass dari class binatang, juga terdapat constructor jenisBinatang, untuk memberikan nilai awal, dan terdapat overriding cetkjenis(). Berikutnya buatlah class utama seperti di bawah ini save dengan nama Lat806.java :
class Harimau { public static void main(String[] args) { suara binatang = new suara(); jenisBinatang suara = new jenisBinatang("Harimau"); suara.cetakjenis(); binatang.cetakjenis(); } }

Berikut hasil program Lat806, seperti di bawah ini :

Gambar 5.1. Hasil Program Lat806.java

5.2 1. 2.

Latihan Kembangkan class Matematika dan MatematikaBeraksi Lakukan overloading pada Method yang ada (pertambahan, pengurangan, perkalian, pembagian). Tambahkan method baru bertipe data double (pecahan) dan memiliki 3 parameter. Uji di kelas MatematikaBeraksi dengan parameter pecahan: 12.5, 28.7, 14.2 Misalnya: pertambahan(12.5, 28.7, 14.2) pertambahan(23, 34)

3. 4. 5.

Matematika.java class Matematika{ void pertambahan (int a, int b){ int hasil= a + b; System.out.println(hasil: + hasil); } void pertambahan (double a, double b, double c){ int hasil= a + b + c; System.out.println(hasil: + hasil); } ... }

Bab 6 :

Penerapan Class Abstract


6.1 Abstract Abstract class adalah suatu class yang merupakan suatu kerangka yang dibuat untuk digunakan oleh class yang lain (yang merupakan turunannya). Karena hanya merupakan kerangka, maka tidak ada operasi yang diimplementasikan pada class tersebut. Keyword abstract mengindikasikan bahwa method yang dibuat tidak dapat

dispesifikasikan di class tersebut. Suatu method abstract memastikan bahwa semua turunan (nonabstract) dari class tersebut akan mengaplikasikan method tersebut. Suatu method abstract memastikan bahwa semua turunan (non-abstract) dari class tersebut akan mengaplikasikan method tersebut. abstract class KeluargaKucing extends Hewan { public void berjalan() {} } Suatu abstract class tidak dapat dibuat objeknya. Kita masih dapat membuat object variable dari abstract class tapi referensinya harus menunjuk ke objek non-abstract dari subclassnya. Pesan psn = new PesanSuara(salam.wav); Contoh : Class PesanTertulis(String dari, String t) extends Pesan{ super(dari); teks = t; public void Penyampaian(){ System.out.println(teks); } Private String teks; }

Bab 7:

Penerapan Interface
7.1 Interface Interface adalah satu kontrak dalam wujud metoda dan deklarasi-deklarasi tetap. Bila suatu kelas menerapkan interface, maka hal tersebut untuk menerapkan semua metoda yang dideklarasikan di dalam interface. Interface sering digunakan sebagai pengganti kelas abstract walaupun tidak ada implementasi secara default untuk menerima inheritance yaitu, tidaka da field-field dan tidak ada implementasi-implementasi metoda secara default. Seperti kelas-kelas abstrak publik, interface
adalah jenis-jenis publik secara khusus, sehingga secara normal dideklarasikan di dalam file-file dengan

sendirinya, yaitu dengan nama yang sama sebagai interface dan nama file java. Inteface pada java
merupakan satu koleksi perilaku abstrak yang dapat diadopsi oleh kelas manapun tanpa menerima

inheritance dari suatu superclass.

7.2

Membuat Interface Untuk membuat interface, dengan cara mendeklarasikannya sama seperti

mendeklarasikan class. Pendeklarasian interface terlebih dahulu dengan kata kunci interface, seperti dibawah ini:
public interface { //tubuh interface } nama_interface

Penjelasan :
Public bertujuan bahwa interface bisa diakses oleh class manapun, apabila tidak dideklarasikan secara public, maka hanya bisa diakses oleh class-class yang berada didalam satu paket yang

sama saja. Tubuh Inteface, berisikan konstanta dan method yang berada didalam interface.

Berikut contoh mendeklarasikan dan membuat interface.


interface Trayek { public static final String PERGI = "Blok M"; public static final String PULANG = "Ciledug"; public a bstract void tarikpergi(); public abstract void tarikpulang(); }

7.3

Menggunakan Interface
Untuk menggunakan interface pada sebuah class, anda bisa dengen menggunakan kata kunci

implement, dengan bentuk penulisan seperti dibawah ini:


interface Trayek { public static final String PERGI = "Blok M"; public static final String PULANG = "Ciledug"; public abstract void tarikpergi(); public abstract void tarikpulang(); } class Bus implements Trayek { private String statusBus = "Ciledug"; public void tarikpergi() { if(this.statusBus.equals(PULANG)) { this.statusBus = PERGI; System.out.println("Narik Ke Blok M"); } else { System.out.println("Sudah Narik Ke Blok M"); } } public void tarikpulang() { if(this.statusBus.equals(PERGI)) { this.statusBus = PULANG; System.out.println("Narik Ke Ciledug"); } else { System.out.println("Sudah Narik Ke Ciledug"); } } }

class Lat1002 { public static void main(String[] args) { Bus MetroMini = new Bus(); MetroMini.tarikpergi(); MetroMini.tarikpergi(); MetroMini.tarikpulang(); MetroMini.tarikpulang(); } }

Penjelasan Program : Pada baris 6 13, telah dideklarasikan sebuah interface dengan nama Trayek. Pada interface
Trayek ini, terdapat pendeklarasian konstanta, yaitu PERGI dan PULANG. Konstanta ini dapat dipergunakan secara langsung pada class Bus, seperti contoh pada pengimpelentasian

method tarikpergi() :
this.statusBus = PERGI; Pada barus 15 45, telah dideklarasikan sebuah class dengan nama Bus menggunakan interface

Trayek. class Bus implements Trayek Kompilasi dan Jalankan program Lat1002.java diatas, maka akan tampil seperti gambar dibawah ini :

Gambar 7.1. Hasil Program Lat1002.java

Lembar ini sengaja dikosongkan

Bab 8 :

Penerapan Exception
8.1 Kopetensi Dasar Pada pembahasan Bab 8 ini penulis mengajak mendiskusikan mengenai penanganan Eksepsi pada Bahasa Pemrograman Java. Kopetensi dasar secara umum, agar mahasiswa/i atau pembaca bisa mendeskripsikan dapat memahami penanganan Eksepsi pada bahasa pemrograman Java. Penulis berharap, diakhir pembahasan, para pembaca bisa : Melakukan Penanganan Eksepsi
Menggunakan try, throw dan catch untuk mendeteksi, menandai adanya dan penanganan

eksepsi secara berturut-turut. 8.2 Apa Itu Penanganan Eksepsi


Eksepsi adalah suatu indikasi masalah yang terjadi selama pelaksanaan program atau eksekusi program. Nama "Exception" menyiratkan bahwa masalah jarang terjadi jika aturan suatu statemen secara normal dilaksanakan dengan tepat, maka eksepsi digunakan untuk mengatur masalah yang

terjadi. Penanganan eksepsi memberdayakan para programmer untuk membuat aplikasi-aplikasi yang
dapat memecahkan atau menangani eksepsi-eksepsi. Dalam banyak kesempatan, menangani Eksepsi mengijinkan suatu program untuk melanjut jalannya program, seolah-olah tidak ada masalah.

8.3

Memulai Penangan Eksepsi Didalam penanganan eksepsi ini, ada hal yang perlu diketahui, yaitu menangkap eksepsi.

Untuk menangkap eksepsi dengan menggunakan pernyataan try. Bentuk Penulisan memiliki 2(dua) bentuk penulisan. a. Bentuk penulisan Penanganan Eksepsi yang pertma :
try { //blok penangkap eksepsi } catch(parameter Eksepsi) { //blok jika terjadi eksepsi }

Berikut contoh Penanganan Eksepsi seperti dibawah ini :


import java.util.Scanner; class Lat1101 { public static void main(String[] args) { int a, b; double c=0; Scanner input = new Scanner(System.in); System.out.print("Nilai A = "); a = input.nextInt(); System.out.print("Nilai B = "); b = input.nextInt(); try { c = a / b; } catch (Exception e) { System.err.println("\nTidak Bisa Dibagi 0"); } System.out.println("\nNilai C = " + c); } }

Penjelasan Program : Pada blok try, terdapat proses perhitungan, dimana untuk menangkap apakah pembagian tersebut sesuai atau tidak, disini nilai pembagi tidak diperkenankan bernilai 0 (nol).
Apabila nilai pembagi bernilai 0 (nol), maka terjadi eksepsi. Selanjutnya pada blok catch yang akan

dijalankan dengan menampilkan pesan Tidak Bisa dibagi 0. Berikutnya kompilasilah dan jalankan program diatas, maka akan tampil seperti dibawah ini :

Gambar 8.1. Pemasukan Data Secara Normal


Berikutnya coba anda masukan nilai b sebagai pembagi dengan nilai 0 (nol), maka akan tampil seperti

dibawah ini:

Gambar 8.2. Terjadi Eksepsi pada saat nilai b dimasukkan dengan o (nol) b. Bentuk penulisan Penanganan Eksepsi yang pertma :
try { //blok penangkap eksepsi } catch(tipeEksepsi ObjekEksepsi) { //blok jika terjadi eksepsi } Finally { //blok akhir yang akan dieksekusi setelah blok try dan catch }

Pernyataan finally bermanfaat diluar eksepsi. Hal ini dapat melakukan clean-up kode setelah
pernyataan return, break atau continue didalam perulangan. Berikut contoh program dengan pemakaian

pernyataan finally.
import java.util.Scanner; class Lat1101 { public static void main(String[] args) { int a, b; double c=0; Scanner input = new Scanner(System.in); System.out.print("Nilai A = "); a = input.nextInt(); System.out.print("Nilai B = "); b = input.nextInt(); try { c = a / b; } catch (Exception e) { System.err.print("\nTidak Bisa Dibagi 0 atau "); System.err.println(e.getMessage()); }

finally { System.err.print("\nPembagian telah Dilakukan ... "); } System.out.println("\nNilai C = " + c); } }

Berikut hasil eksekusi program Lat1102.java.

Gambar 8.3. Hasil Pembagian Pertama

Dilihat dari eksekusi program Lat1102.java, diatas proses pembagian dilaksanakan secara normal, dan blok finally juga dijalankan dan ditampilkan. Berikut hasil eksekusi dengan pemasukan data, yang tidak diinjinkan.

Gambar 8.4. Hasil Pembagian Kedua

Dari pemasukan data Nilai A = 48 dan Nilai B = 0, maka blok catch, dijalankan dan blok finnaly juga tetap dilakankan. Hal ini menunjukan bahwa finnaly, akan selalu dijalankan, walaupun waktu terjadi eksepsi maupun tidak terjadi eksepsi. 8.3 Memulai Penangan Eksepsi
Java mengijinkan penggunaan multi catch, yang bisa mengetahui adanya kemungkinan-

kemungkinan kesalahan dan jenis kesalahan yang akan terjadi. Class yang digunakan untuk penanganan eksepsi yaitu Throwable, class ini adalah class tertinggi untuk penanganan eksepsi. Class Throwable

terdapat 2(dua) subclass, yaitu Error dan Exception. Subclass Error, biasanya digunakan untuk penanganan kesalahan seperti : a. OutOfMemmoryError (Error karena Kehabisan Memori) b. StackOverflowError (Error karena Tumpukan Melebihi Kapasitas)

Subclass Exception, biasanya digunakan untuk penanganan kesalahan seperti : a. IOExcetion (Kesalahan pada Input/Output) b. InterruptedException (Kesalahan adanya Interupsi Program). c. NumberFormatExcetion (Kesalahan pada Format Angka) Masih banyak sekali subclass Exception, mungkin anda bisa baca lebih lanjut pada Java Document. Berikut contoh penerapan Multi Catch.
import java.util.Scanner; class Lat1103 { public static void main(String[] args) { String a; int b; Scanner input = new Scanner(System.in); System.out.print("Masukan Suatu Nilai = "); a = input.next(); try { b = Integer.parseInt(a); System.out.println("Nilai Angka"); } catch (NumberFormatException e) { System.out.println("Oops! Salah, itu sih " + e.getMessage()); } catch (Exception e) { System.out.println("Input/output error"); System.out.println(e.getMessage()); } catch (Throwable e) { System.out.println("Program interrupted"); System.out.println(e.getMessage()); } } } yang anda input adalah Benar, berupa

Pada program diatas, digunakan untuk melakukan pengecekan, apakah nilai yang diinputkan
tersebut berupa angka atau String. Terlihat pada catch terakhir terdapat class Throwable, yang bertujuan untuk menangkap eksepsi lain yang tidak tertangkap pada eksepsi yang diletakkan atasnya. Berikut

hasil eksekusi program jika nilai yang dimasukan benar.

Gambar 8.5. Hasil Pemasukan Data Benar

Berikut hasil eksekusi program jika nilai yang dimasukan salah.

Gambar 8.6. Hasil Pemasukan Data Salah

8.4

Melempar Eksepsi Untuk keperluan melempar eksepsi ini java menyediakan pernyataan throw, untuk

keperluan ini. Berikut bentuk penulisan pernyataan throw.


throw variabelObjek;

Variabel Objek adalah variabel objek yang berupa suatu class eksepsi. Pada saat penggunaan throw, maka pembacaannya dengan menggunakan try dan catch. Berikut contoh penerapannya:
import java.util.Scanner; class Lat1104

{
public static void main(String[] args) { String a; int b; Scanner input = new Scanner(System.in); System.out.print("Masukkan Suatu Nilai = "); a = input.next(); try { b = Integer.parseInt(a);

System.out.println("Nilai yang anda input Sudah Benar "); } catch (NumberFormatException nf) { nf = new NumberFormatException(); throw(nf); } } }

Penjelasan Program : Pada baris program 21, terdapat pernyataaan :


b = Integer.parseInt(a);

Pernyataan tersebut adalah menyatakan penkonversiaan nilai String ke integer. Eksepsi yang ada pada catch yaitu NumberFormatException. Pada baris 21, terdapat pernyataan :
nf = new NumberFormatException();

Pernyataan tersebut untuk mengganti keterangan kesepsi, dan pernyataan


throw(nf); Berguna untuk melakukan melemparkan eksepsi. Hasil dari program Lat1104.java diatas, seperti

gambar dibawah ini, jika nilai yang dimasukan berupa string.

Gambar 8.7. Hasil Pemasukan Berupa Data Sting

8.5

Penggunaan throws Pada Method

Kata kunci throws, digunakan untuk menginformasikan, kemungkinan method akan terjadi eksepsi. Berikut bentuk penulisan penggunaan throws pada method.
public namaMethod(parameter)throws jenisException { Blok method dengan eksepsi }

Berikut contoh program pennggunaan throws pada mehtod.

class KelasAja { public void MetodePertama() { System.out.println("Kelas Pertama Tidak Menggunakan Eksepsi!"); } public int MetodeKedua(int f) throws NumberFormatException { return f + 5; } } class Lat1105 { public static void main(String[] args) { int hasil=0; KelasAja ObjekKelas = new KelasAja(); ObjekKelas.MetodePertama(); //penggunaan metode dengan eksepsi try { hasil = ObjekKelas.MetodeKedua(5); } catch (NumberFormatException e) { System.out.println("Adanya Kesalahan"); } System.out.println("Nilai Hasil dengan throws = "+hasil); } }

Hasil dari program Lat1105.java diatas, seperti gambar dibawah ini:

Gambar 8.8. Hasil program Lat1105.java

Bab 9 :

Pemrograman GUI dengan AWT dan Swing


9.1 Kopetensi Dasar

Pada pembahasan Bab 9 ini penulis mengharapkan mahasiswa dapat memahami persamaan dan perbedaan antara AWT dan Swing, mendisain aplikasi komponen dan container, mendesain aplikasi GUI menggunakan AWT, mendesain aplikasi GUI menggunakan Swing, menjelaskan tentang flow layout, border layout dan grid layout dalam komponen GUI dan membuat tampilan yang komplek dalam mendesain aplikasi GUI. 9.2 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 JAV GUI. JFC termasuk diantara 5 bagian utama dari API yaitu AWT dan Swing. Tiga bagian yang lainnya dari API adalah Java2D, Accessibillity, 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 platformindependent dimana aplikasi yang dikembangkan dengan platform yang berbeda dapat dimiliki 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. 9.3 9.3.1 Komponen GUI pada AWT Window Classes Fundamental

Dalam mengembangkan aplikasi GUI, komponen GUI seperti tombol atau textfield diletakkan di dalam container. Berikut ini adalah daftar dari beberapa class penting pada container yang telah disediakan oleh AWT.

Table 9.1. Class Kontainer AWT Deskripsi Abstract class untuk objek yang dapat ditampilkan pada console dan berinteraksi dengan 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 objek 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 di bawah ini: Frame () Frame (String title) Untuk mengatur ukuran window, menggunakan method setSize. Class AWT Komponen

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 menthod 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. Anda akan belajar tentang event handling pada modul selanjutnya.

9.3.2

Grafik Beberapa method grafik ditemukan dalam classs Graphic. Di bawah ini adalah daftar dari

beberapa method. Table 9.2. Beberapa metode dari kelas Graphic drawLine() fillRect() drawRect() clearRect() drawPolyline() drawPolygon() fillPolygon() getColor() setColor() getFont() setFont() drawstring()

Hubungan dari class ini adalah class Color, dimana memiliki tiga constructor. Table 9.3. Class Color Format Constructor Color(int r, int g, int b) Color(float r, float g, float b) Color(int rgbValue) Nilai integer 0 -255 Nilai float 0.0 1.0
24

Deskripsi

Panjang nilai : 0 ke 2 -1 (hitam ke putih). Red: bits 16-23 Green: bits 8-15 Blue: bits 0-7 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); } public void paint(Graphics g) { g.setColor(new Color(0,255,0)); //hijau //Konstanta dalam class Color

g.setFont(new Font("Helvetica",Font.PLAIN,16)); g.drawString("Hello GUI World!", 30, 100); g.setColor(new Color(1.0f,0,0)); g.fillRect(30, 100, 150, 10); } public static void main(String args[]) { Frame f = new Frame("Testing Graphics Panel"); //red

GraphicPanel gp = new GraphicPanel(); f.add(gp); f.setSize(600, 300); f.setVisible(true); } }

Agar panel dapat terlihat atau visible, dia harus diletakkan di dalam window yang dapat terlihat seperti sebuah frame. 9.3.3 Beberapa komponen AWT Berikut ini adalah daftar dari control AWT. Kontrol adalah komponen seperti tombol atau textfield yang mengijinkan user untuk berinteraksi dengan aplikasi GUI. Berikut ini semua subclass dari class Component. Table 9.4. Komponen AWT Label TextField TextArea Button Checkbox CheckboxGroup Choice List Scrollbar

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); } }

9.4.

Layout Manager Posisi dan ukuran suatu komponen ditentukan oleh layout manager. Layout

manager mengatur tampilan dari komponen di dalam kontainer. Berikut ini beberapa layout manager yang terdapat di dalam Java. 1.FlowLayout 2.BorderLayout 3.GridLayout 4.GridBagLayout 5.CardLayout Layout manager dapat diatur menggunakan method setLayout dari class Container. Method ini dapat ditulis sebagai berikut.
void setLayout(LayoutManager mgr)

Jika Anda memilih untuk tidak menggunakan layout manager, Anda dapat mengisi null sebagai argumen untuk method ini. Tetapi selanjutnya, Anda akan mengatur posisi elemen secara manual dengan menggunakan method setBounds dari class Components.
public void setBounds(int x, int y, int width, int height)

Method ini mengatur posisi berdasarkan pada argumen x dan y, dan ukuran berdasarkan argumen width dan height. Hal ini akan cukup menyulitkan dan membosankan untuk aplikasi jika Anda memiliki beberapa objek komponen didalam object container. Anda akan memanggil method ini untuk setiap komponen. 9.4.1 FlowLayout Manager FlowLayout Manager adalah default manager untuk class Panel dan subclassnya, termasuk class applet. Cara meletakkan komponen dari FlowLayout Manager dimulai dari kiri ke kanan dan dari atas ke bawah, dimulai dari pojok kiri atas. Seperti pada saat Anda mengetik menggunakan editor kata pada umumnya. Berikut adalah bagaimana FlowLayout Manager bekerja, dimana memiliki tiga constructor seperti daftar di bawah ini. Table 9.5. Constructor FlowLayout FlowLayout Constructors FlowLayout() Membuat objek baru FlowLayout dengan posisi di tengah dan lima unit horizontal dan vertical gap dimasukkan pada komponen sebagai default. FlowLayout(int align)

Membuat objek baru FlowLayout dengan posisi spesifik dan lima unit horizontal dan vertical gap dimasukkan pada komponen sebagai default. FlowLayout Constructors FlowLayout(int align, int hgap, int vgap) Membuat objek baru FlowLayout dengan argument pertama sebagai posisi pada komponen dan hgap untuk horizontal dan vgap untuk vertical pada komponen. Gap dapat dikatakan sebagai jarak antara komponen dan biasanya diukur dengan satuan pixel. Posisi argument mengikuti penulisan sebagai berikut : 1. FlowLayout.LEFT 2. FlowLayout.CENTER 3. FlowLayout.RIGHT Bagaimanakah output dari program berikut?
import java.awt.*; class FlowLayoutDemo extends Frame { public static void main(String args[]) { FlowLayoutDemo fld = new FlowLayoutDemo(); fld.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10)); fld.add(new Button("ONE")); fld.add(new Button("TWO")); fld.add(new Button("THREE")); fld.setSize(100, 100); fld.setVisible(true); } }

Gambar berikut adalah contoh dari hasil yang berjalan pada platform Window.

Gambar 9.1. Hasil dalam Window 9.4.2 BorderLayout Manager

BorderLayout membagi container menjadi lima bagian diantaranya utara, selatan, timur, barat dan tengah. Setiap komponen dimasukkan ke dalam region yang spesifik. Region utara dan selatan membentuk jalur horizontal sedangkan region timur dan barat membentuk jalur vertical. Dan region tengah berada pada perpotongan jalur horizontal dan vertical. Tampilan ini adalah bersifat default untuk objectWindow, termasuk objek dari subclass Window yaitu tipe Frame dan Dialog.

Table 9.6. Constructor BorderLayout Constructor BorderLayout BorderLayout() Membuat object BorderLayout baru tanpa spasi yang diaplikasikan diantara komponen yang berbeda. BorderLayout(int hgap, int vgap) Membuat object BorderLayout baru dengan spasi unit hgap horizontal dan unit vgap vertikal yang diaplikasikan diantara komponen yang berbeda. Seperti pada FlowLayout Manager, parameter hgap dan vgap disini juga menjelaskan jarak antara komponen dengan kontainer. Untuk menambahkan komponen kedalam region yang spesifik, gunakan method

menambahkan dan melewatkan dua argumen yaitu : komponen yang ingin dimasukkan ke dalam region dan region mana yang ingin dipakai untuk meletakkan komponen. Perlu diperhatikan bahwa hanya satu komponen yang dapat dimasukkan dalam satu region. Menambahkan lebih dari satu komponen pada kontainer yang bersangkutan, maka komponen yang terakhir ditambahkan yang akan ditampilkan. Berikut ini adalah daftar dari kelima region. 1. BorderLayout.NORTH 2. BorderLayout.SOUTH 3. BorderLayout.EAST 4. BorderLayout.WEST 5. BorderLayout.CENTER
Berikut ini adalah contoh program yang menunjukkan bagaimana BorderLayout bekerja.

import java.awt.*; class BorderLayoutDemo extends Frame { public static void main(String args[]) { BorderLayoutDemo bld = new BorderLayoutDemo(); bld.setLayout(new BorderLayout(10, 10)); //may remove bld.add(new Button("NORTH"), BorderLayout.NORTH); bld.add(new Button("SOUTH"), BorderLayout.SOUTH); bld.add(new Button("EAST"), BorderLayout.EAST); bld.add(new Button("WEST"), BorderLayout.WEST); bld.add(new Button("CENTER"), BorderLayout.CENTER); bld.setSize(200, 200); bld.setVisible(true); } }

Berikut ini adalah hasil dari contoh program tersebut. Gambar kedua menunjukkan efek dari mengubah bentuk dari frame.

Gambar 9.2. Hasil Contoh Program 9.4.3 GridLayout Manager Dengan GridLayout manager, komponen juga diposisikan dari kiri ke kanan dan dari atas ke bawah seperti pada FlowLayout manager. GridLayout manager membagi container menjadi baris dan kolom. Semua region memiliki ukuran yang sama. Hal tersebut tidak mempedulikan ukuran sebenarnya dari komponen. Berikut ini adalah daftar dari constructor untuk class GridLayout. Table 9.7. Constructor GridLayout Constructor GridLayout GridLayout() Membuat object GridLayout baru dengan satu baris dan satu kolom sebagai default GridLayout(int rows, int cols) Membuat object GridLayout baru dengan jumlah baris dan kolom sesuai dengan keinginan GridLayout(int rows, int cols, int hgap, int vgap)
Membuat object GridLayout baru dengan jumlah baris dan kolom yang ditentukan. Unit spasi hgap horizontal dan vgap vertikal diaplikasikan ke dalam komponen.

Cobalah program ini.


import java.awt.*; class GridLayoutDemo extends Frame { public static void main(String args[]) { GridLayoutDemo gld = new GridLayoutDemo(); gld.setLayout(new GridLayout(2, 3, 4, 4)); gld.add(new Button("ONE"));

gld.add(new Button("TWO")); gld.add(new Button("THREE")); gld.add(new Button("FOUR")); gld.add(new Button("FIVE")); gld.setSize(200, 200); gld.setVisible(true); } }

Berikut ini adalah output dari program.

Gambar 9.3. Hasil Program 9.4.4 Panel dan Tampilan Kompleks Untuk membuat tampilan yang lebih lengkap, anda dapat menggabungkan layout manager yang berbeda dengan menggunakan panel. Ingatlah bahwa panel adalah kontainer dan komponen pada saat yang sama. Anda dapat memasukkan komponen ke dalam panel dan kemudian menambahkan panel ke dalam region yang Anda inginkan di dalam kontainer. Perhatikan teknik yang digunakan pada contoh berikut.
import java.awt.*; class ComplexLayout extends Frame { public static void main(String args[]) { ComplexLayout cl = new ComplexLayout(); Panel panelNorth = new Panel(); Panel panelCenter = new Panel(); Panel panelSouth = new Panel(); /* Panel utara */ //Panel menggunakan FlowLayout sebagai default panelNorth.add(new Button("ONE")); panelNorth.add(new Button("TWO")); panelNorth.add(new Button("THREE")); /* Panel tengah */ panelCenter.setLayout(new GridLayout(4,4)); panelCenter.add(new TextField("1st")); panelCenter.add(new TextField("2nd")); panelCenter.add(new TextField("3rd")); panelCenter.add(new TextField("4th"));

/* Panel selatan */ panelSouth.setLayout(new BorderLayout()); BorderLayout.CENTER); panelSouth.add(new Checkbox("I'm here!"), BorderLayout.EAST); panelSouth.add(new Checkbox("Pick me!"), BorderLayout.WEST); /* Menambahkan panel pada container Frame*/ //Frame menggunakan BorderLayout sebagai default cl.add(panelNorth, BorderLayout.NORTH); cl.add(panelCenter, BorderLayout.CENTER); cl.add(panelSouth, BorderLayout.SOUTH); cl.setSize(300,300); cl.setVisible(true); } }

Gambar 9.4. Hasil Program 9.5 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. Table 9.8. Komponen Swing Komponen Swing JComponent Penjelasan Class induk untuk semua komponen Swing, tidak termasuk top-level container JButton JCheckBox Tombol push. Berhubungan dengan class button dalam package AWT Item yang dapat dipilih atau tidak oleh pengguna. Berhubungan dengan class checkbox dalam package AWT JFileChooser Mengijinkan pengguna untuk memilih sebuah file. Berhubungan dengan class file chooser dalam package AWT JTextField Mengijinkan untuk mengedit text satu baris. Berhubungan dengan class textfield dalam package AWT JFrame Turunan dan berhubungan dengan class frame dalam package AWT tetapi keduanya sedikit tidak cocok dalam kaitannya dengan menambahkan komponen pada container. Perlu mendapatkan content pane yang terbaru sebelum menambahkan sebuah komponen JPanel Turunan JComponenet. Class container sederhana tetapi bukan top-level. Berhubungan dengan class panel dalam package AWT JApplet Turunan dan berhubungan dengan class Applet dalam package AWT. Juga sedikit tidak cocok dengan class applet dalam kaitannya dengan menambahkan komponen pada container. JOptionPane Turunan JComponent. Disediakan untuk mempermudah menampilkan pop-up kotak dialog. JDialog Turunan dan berhubungan dengan class dialog dalam package AWT. Biasanya digunakan untuk menginformasikan sesuatu kepada pengguna atau prompt pengguna untuk input. JColorChooser Turunn JComponent. Memungkinkan pengguna untuk memilih warna yang diinginkan. Untuk daftar yang lengkap dari komponen Swing, anda dapat melihatnya di dokumentasi API.

9.5.1

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. 9.5.2. Contoh Frame
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.

9.5.3

Contoh JOptionPane

import javax.swing.*; class JOptionPaneDemo { JOptionPane optionPane; void launchFrame() { optionPane = new JOptionPane(); String name = optionPane.showInputDialog("Hi, what's your name?"); optionPane.showMessageDialog(null, "Nice to meet you, " + name + ".", "Greeting...", optionPane.PLAIN_MESSAGE); System.exit(0); } public static void main(String args[]) { new JOptionPaneDemo().launchFrame(); } }

Berikut ini adalah hasil dari contoh program di atas.

Gambar 9.5. Hasil Contoh Program

Bab 10 :

Penerapan Komponen - Komponen Swing


10.1 Penggunaan Komponen-komponen Swing Objek komponen di dalam kelas Swing dan penggunaannya. Objek Frame Contoh program :

Listing program :
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class demojframe extends JFrame { public static void main(String[] args) { demojframe f = new demojframe();

public demojframe() { super("Membuat Jendela"); setSize(300,300); setBackground(Color.gray); //method untuk menutup windows addWindowListener( new demojframe.PenanganKejadian()); show(); } //kelas untuk menutup windows frame class PenanganKejadian extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } }

Menambahkan beberapa komponen didalam frame Contoh program1:

Listing program:
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class demokomponent extends JFrame { JPasswordField PasswordField1 = new JPasswordField("",10); JTextField TextField3 = new JTextField("Ini JTextField", 20); JTextField TextField4 = new JTextField("ini JTextField tanpa format karakter"); JTextField TextField5 = new JTextField(25); JTextField TextField2 = new JTextField(); JRadioButton RadioButton1=new JRadioButton("RadioButton1"); JRadioButton RadioButton2=new JRadioButton("RadioButton2"); JCheckBox CheckBox1=new JCheckBox("CheckBox1"); JCheckBox CheckBox2=new JCheckBox("CheckBox2"); public demokomponent() { // Layout Komponen this.setLayout(new FlowLayout(FlowLayout.LEFT,10, 20)); // Menambahkan Komponen this.add(PasswordField1, null); this.add(TextField2, null); this.add(TextField3, null); this.add(TextField4, null); this.add(TextField5, null); this.add(RadioButton1,null); this.add(RadioButton2,null); this.add(CheckBox1,null); this.add(CheckBox2,null); // Menambahkan Teks pada komponen PasswordField1.setText("tanda bintang"); TextField2.setText("Tidak bisa diedit"); // Mengatur tampilan karakter menjadi bentuk tertentu PasswordField1.setEchoChar('*'); // Mengatur keaktifan komponen TextField2.setEditable(false); // Mengatur Warna Latar Belakang komponen TextField2.setBackground(SystemColor.inactiveCaptionBorder); TextField3.setBackground(Color.orange); // Mengatur warna teks pada komponen TextField3.setForeground(Color.blue); } public static void main(String[] args) { demokomponent contoh = new demokomponent(); contoh.setTitle("Komponen Swing"); contoh.setSize(300, 300); contoh.setVisible(true); } }

Contoh program2 :

Listing program :
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class demoswing extends JFrame { JPanel pl= new JPanel(); JLabel lbl1=new JLabel("Nilai1"); JLabel lbl2=new JLabel("Nilai2"); JLabel lbl3=new JLabel("Hasil"); JTextField txt1=new JTextField(); JTextField txt2=new JTextField(); JTextField txt3=new JTextField(); JButton bthitung=new JButton("Hitung"); JButton btbatal=new JButton("batal"); public demoswing(){ //memposisikan komponen didalam JPanel atau JFrame //(jarak x,jarak y,ukuran x,ukuran y) pl.setLayout(null); lbl1.setBounds(15,20,80,25); lbl2.setBounds(15,50,80,25); lbl3.setBounds(15,80,80,25); txt1.setBounds(100,20,100,25); txt2.setBounds(100,50,100,25); txt3.setBounds(100,80,100,25); bthitung.setBounds(50,110,80,25); btbatal.setBounds(150,110,80,25);

//menempatkan komponen didalam JPanel pl.add(lbl1); pl.add(lbl2); pl.add(lbl3); pl.add(txt1); pl.add(txt2); pl.add(txt3); pl.add(bthitung); pl.add(btbatal); add(pl); setTitle("GUI Swing"); //memposisikan JFrame di windows ketika ditampilkan (posisi ordinat x, posisi ordinat y, JFrame ordinat x, JFrame ordinat y) setBounds(100,100,300,200); //method untuk menutup windows addWindowListener(new demoswing.tutupwindows()); bthitung.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ hitungnilai(); } }); btbatal.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ batal(); } }); } //kelas untuk menutup windows JFrame class tutupwindows extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0); } }

public void hitungnilai(){ int nilai1=Integer.parseInt(txt1.getText()); int nilai2=Integer.parseInt(txt2.getText()); int hasil=nilai1*nilai2; if(hasil>60){ txt3.setText("Lulus"); //String hasil1=Integer.toString(hasil); //txt3.setText(hasil1); //txt3.setText("Lulus"); //txt2.setText((txt1.getText())); } else{ txt3.setText("Gagal"); } } public void batal(){ txt1.setText(""); txt2.setText(""); txt3.setText(""); } public static void main(String[]args){ demoswing theApp=new demoswing(); theApp.setVisible(true);} }

Contoh program4 :

Listing Program :
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class demojcheckbox extends JFrame{ JCheckBox cb1,cb2,cb3; JRadioButton rb1,rb2,rb3; JTextField txt1=new JTextField(20); public demojcheckbox(){ super("Test JCheckbox"); cb1=new JCheckBox("BOLD"); cb2=new JCheckBox("ITALIC"); cb3=new JCheckBox("BOLD+ITALIC"); rb1=new JRadioButton("JCreator",true); rb2=new JRadioButton("Eclipse",false); rb3=new JRadioButton("Netbeans",false); Panel pl1=new Panel(); pl1.setLayout(null); pl1.add(txt1); pl1.add(cb1); pl1.add(cb2); pl1.add(cb3); pl1.add(rb1); pl1.add(rb2); pl1.add(rb3); add(pl1); txt1.setBounds(0,0,400,35); cb1.setBounds(10,30,70,100); cb2.setBounds(10,100,70,100); cb3.setBounds(10,180,100,100); rb1.setBounds(180,30,100,100); rb2.setBounds(180,100,100,100); rb3.setBounds(180,180,100,100); cb1.addItemListener(new demojcheckbox.check()); cb2.addItemListener(new demojcheckbox.check()); cb3.addItemListener(new demojcheckbox.check()); rb1.addItemListener(new demojcheckbox.radio()); rb2.addItemListener(new demojcheckbox.radio()); rb3.addItemListener(new demojcheckbox.radio()); setBounds(50,50,400,300); show(); }

class check implements ItemListener { public void itemStateChanged(ItemEvent e){ if(e.getSource()==cb1){ txt1.setFont(new Font("fsdfgsdfg",Font.BOLD,16)); txt1.setForeground(Color.red); } else if(e.getSource()==cb2){ txt1.setFont(new Font("",Font.ITALIC,16)); txt1.setForeground(Color.blue); } else if(e.getSource()==cb3){ txt1.setFont(new Font("",Font.BOLD+Font.ITALIC,16)); txt1.setForeground(Color.green); } } } class radio implements ItemListener{ public void itemStateChanged(ItemEvent e){ if(e.getSource()==rb1){ txt1.setText(rb1.getText()); } else if(e.getSource()==rb2){ txt1.setText(rb2.getText()); } else if(e.getSource()==rb3){ txt1.setText(rb3.getText()); } } } public static void main(String[] args){ demojcheckbox jcheckbox=new demojcheckbox(); jcheckbox.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }

Contoh program 5:

Listing program :
import javax.swing.*; import java.awt.*; import java.awt.event.*; class demojcombobox extends JFrame{ //instansiasi object komponen JPanel pl=new JPanel(); JLabel lblkode=new JLabel("Kode Barang"); JLabel lblnama=new JLabel("Nama Barang"); JLabel lblharga=new JLabel("Harga"); JLabel lblkuantitas=new JLabel("Kuantitas"); JLabel lbltotal=new JLabel("Total"); Choice cbpilih=new Choice(); JTextField txtnama=new JTextField(); JTextField txtharga=new JTextField(); JTextField txtkuantitas=new JTextField(); JTextField txttotal=new JTextField(); JButton btnhitung =new JButton("Hitung"); JButton btnbatal=new JButton("Batal");

//constructor demojcombobox(){ pl.setLayout(null); //pengaturan letak(x1,y1) dan ukuran(x2,y2) komponen lblkode.setBounds(15,20,100,25); lblnama.setBounds(15,50,100,25); lblharga.setBounds(15,80,100,25); lblkuantitas.setBounds(15,110,100,25); lbltotal.setBounds(15,140,100,25); //list pilihan cbpilih.add("---Silahkan Pilih Kode---"); cbpilih.add("BK0001"); cbpilih.add("BK0002"); cbpilih.add("BK0003"); cbpilih.add("BK0004"); cbpilih.add("BK0005"); //pengaturan letak(x1,y1) dan ukuran(x2,y2) komponen cbpilih.setBounds(130,20,160,25); txtnama.setBounds(130,50,200,25); txtharga.setBounds(130,80,150,25); txtkuantitas.setBounds(130,110,150,25); txttotal.setBounds(130,140,150,25); btnhitung.setBounds(60,180,85,25); btnbatal.setBounds(150,180,85,25); //menambah atau meletakkan komponen pl.add(lblkode); pl.add(lblnama); pl.add(lblharga); pl.add(lblkuantitas); pl.add(lbltotal); pl.add(cbpilih); pl.add(txtnama); pl.add(txtharga); pl.add(txtkuantitas); pl.add(txttotal); pl.add(btnhitung); pl.add(btnbatal); add(pl);

txtnama.setEditable(false); txtharga.setEditable(false); txttotal.setEditable(false); //setDefaultCloseOperation(EXIT_ON_CLOSE); setTitle("Data Buku"); setBounds(100,100,350,300); //mekanisme eventhandler cbpilih.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ //method prosespilih(); } }); btnhitung.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //method hitung(); } }); btnbatal.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //method batal(); } }); }

//method public void prosespilih(){ if(cbpilih.getSelectedItem().equals("BK0001")){ txtnama.setText("Mudah Belajar Pemrograman Java"); txtharga.setText("40000"); } else if(cbpilih.getSelectedItem().equals("BK0002")){ txtnama.setText("Menguasai Java 2 & OOP"); txtharga.setText("45000"); } else if(cbpilih.getSelectedItem().equals("BK0003")){ txtnama.setText("Dasar Pemrograman Java 2"); txtharga.setText("50000"); } else if(cbpilih.getSelectedItem().equals("BK0004")){ txtnama.setText("Menjadi Web Master Profesional"); txtharga.setText("55000"); } else if(cbpilih.getSelectedItem().equals("BK0005")){ txtnama.setText("Pemrograman Web dengan PHP & Mysql"); txtharga.setText("60000"); } txtkuantitas.requestFocus(); } //method public void hitung(){ int harga=Integer.parseInt(txtharga.getText()); int kuantitas=Integer.parseInt(txtkuantitas.getText()); int hasil=harga*kuantitas; String hasilA=Integer.toString(hasil); txttotal.setText(hasilA); } //method public void batal(){ txtnama.setText(""); txtharga.setText(""); txtkuantitas.setText(""); txttotal.setText(""); cbpilih.requestFocus(); } public static void main(String[]args){ demojcombobox obj=new demojcombobox(); obj.setVisible(true); } }

10.2

Latihan

1. Buatlah sebuah program visual nilai mahasiswa yang terdiri dari nilai absensi, nilai tugas, nilai UTS dan nilai UAS untuk mencari nilai akhir dan gradenya. Ketentuan soal : Nilai akhir =10% dari nilai absensi + 20% nilai tugas + 30% dari nilai UTS + 40% nilai UAS Grade = Jika nilai akhir lebih besar sama dengan 80, maka grade A Jika nilai akhir lebih besar sama dengan 70, maka grade B Jika nilai akhir lebih besar sama dengan 50, maka grade C Jika nilai akhir lebih besar sama dengan 30, maka grade D Jika nilai akhir lebih besar sama dengan 0, maka grade E Tampilan program

Bab 11 :

Studi Kasus Aplikasi Penggajian


11.1 Kopetensi Dasar

Mahasiswa dapat menjelaskan dan menerapkan komponen-komponen Swing lain yang sudah diterapkan pada pertemuan 1 dan 10. 11.2 Studi Kasus Buatlah program visual Data Gaji pegawai untuk mencari total gaji yang diperoleh pegawai perbulannya. Ketentuan soal: Nomor induk pegawai Jika nip=201209876, maka nama = Irsani Jika nip=201209456, maka nama = Fifi Arfani Jika nip=201209737, maka nama = Aditya Jika nip=201209246, maka nama = Abu Nizam Jika nip=201209449, maka nama = Opi Sutono Golongan Jika golongan=I, maka jabatan=Direktur, gajipokok=3000000,tunjangan=1000000 Jika golongan=I, maka jabatan=Manager, gajipokok=2000000,tunjangan=500000 Jika golongan=I, maka jabatan=Kabag, gajipokok=1500000,tunjangan=3000000

Totalgaji=gajipokok ditambah tunjangan

Tampilan program:

Bab 13 :

Pengenalan Stuctured Query Language (SQL)


13.1 Pengenalan Perintah-perintah dalam lingkungan database adalah : 13.1.1 CREATE Sebelum melakukan pengolahan data lebih lanjut, anda harus membuat sebuah database untuk menyimpan tabel-tabel yang akan anda buat selanjutnya. Untuk keperluan tersebut, perintah Create digunakan untuk membuat sebuah database. Format penulisan perintah Create, yaitu :
Create database nama_database_Anda;

Sebagai contoh, buatlah sebuah database dengan nama: cafeDB, seperti terlihat pada tampilan di bawah ini.
mysql> create database cafeDb; Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.03 sec), artinya perintah query telah berhasil dijalankan oleh MySQL. Untuk melihat hasilnya, Anda dapat menggunakan Show database. mysql> show database;
+----------------------------------+ | Database | +----------------------------------+ | information_schema | | kafedb | | mysql | | test | +----------------------------------+ 4 rows in set (0.00 sec)

Setelah anda membuat sebuah database, selanjutnya anda dapat menggunakan database tersebut untuk menyimpan tabel dengan menggunakan perintah Use.

Format penulisan perintah Use, yaitu :


Use nama_database;

Untuk lebih jelasnya, anda dapat melihat pada tampilan di bawah ini.
mysql> Use cafeDb; Database changed

Setelah anda membuat sebuah database, langkah selanjutnya yaitu membuat tabel yang akan disimpan ke dalam database yang telah anda buat sebelumnya. Tabel merupakan sekumpulan data yang terdiri dari kolom (field) dan baris (record). Untuk membuatnya, kita akan menggunakan perintah Create tabel. Di dalam perintah tersebut, nama tabel, jumlah kolom field, nama kolom, type dan panjang kolom, serta kunci atau key akan ditentukan. Untuk mebuat tabel, pastikan anda telah memilih databasenya dahulu dengan menggunakan perintah Use. Untuk selengkapnya, ikuti langkah berikut ini. Format penulisan perintah Create tabel, yaitu :
Create Table nama_tabel ( nama_kolom1 Type_data (Panjang_data), nama_kolom2 Type_data (Panjang_data), nama_kolom3 Type_data (Panjang_data), );

Untuk lebih jelasnya, berikut ini langkah-langkah dalam membuat sebuah table, dengan nama table: tbl_menu. Table tersebut akan disimpan di dalam database cafeDB.
mysql> Use cafeDb; Database changed mysql> Create Table tbl_menu ( -> kode Varchar (10), -> menu Varchar (30), -> harga ->); Query OK, 0 rows affected (0.13 sec) mysql> Varchar (10),

Tabel tbl_menu di atas terdiri dari 3 buah kolom, yaitu kode, menu dan harga dnegan menggunakan type data Varchar.

13.1.2 SELECT Pernyataan SELECT digunakan untuk query database tentang informasi database yang mana yang ditampilkan sebagai data. Format dasar dari pernyataan SELECT adalah :
SELECT kolom FROM namatabel where kondisi

Pernyataan SQL SELECT dimulai dengan kata kunci SELECT, diikuti oleh tanda koma dari kolom-kolom yang akan ditampilkan, kemudian clause FORM yang menentukan tabel yang berisi data yang akan ditampilkan. Secara bebas, clause WHERE dapat ditambahkan pada pernyataan SELECT, menjelaskan sebuah set dari kondisi yang harus ditemukan oleh data yang akan dikembalikan oleh database. Clause WHERE tidak dipisahkan oleh koma; melainkan, dia tehubung oleh pernyataan AND atau OR yang fungsinya sama dengan logik mereka. Menetapkan * sebagai nama kolom memberitahu database server untuk meretrieve semua kolom yang tersedia didalam tabel. Contoh, jika kita ingin meretrieve semua data yang terdapat pada table yang bernama users :
SELECT * from users;

Jika kita hanya ingin melihat untuk users yang bernama belakang Smith, pernyataan SQL-nya berupa:
SELECT * from users where nama ='Smith';

SQL tidak bersifat case-sensitive pada kata kuncinya, SQL case-sensitive pada nilainya. Pernyataan berikut ini akan menghasilkan data yang berbeda jika dibandingkan dengan pernyataan diatas:
SELECT * from users where nama ='sMith';

Operator lain yang dapat digunakan pada conditional statements: < - kurang dari <= - kurang dari atau sama dengan - lebih besar dari >= - lebih besar dari atau sama dengan like sama dengan

13.1.3 INSERT Pernyataan INSERT digunakan untuk memasukkan baris data yang baru dari informasi table database yang aktif. Struktur dasar dari pernyataan INSERT adalah :

INSERT INTO nama-tabel VALUES(nilai1, nilai2, ...)

Dimana nama-tabel adalah nama dari tabel yang akan berisi baris data yang baru. Parameter yang diberikan didalam kata kunci VALUES adalah daftar data dari nilai yang akan ditambahkan kedalam tabel. Jika seperti ini dimana hanya tabel yang ditetapkan, SQL akan memasukkan nilai yang diberikan pada pernyataan dengan field didalam database berdasarkan nilai yang dipesan dan field yang ditentukan pada tabel database. Jika, sebagai contoh, kita mempunyai tabel dengan nama users, dengan field userid, nama, alamat(pada pemesanan), pada baris berikut ini akan menambahkan data yang baru ke tabel:
INSERT INTO Ayala Technopark'); users VALUES(199700651, 'Jeni Master', 'UP

Penting untuk diingat bahwa semua panggilan untuk INSERT harus diikuti aturan integritas pada tabel data. Oleh karena itu, jika sebuah field pada database ditetapkan non-null, berbagai usaha untuk memasukkan ni;ai-null kedalam field tersebut akan menyebabkan error pada database. 13.1.4 UPDATE Pernyataan UPDATE akan mengupdate baris yang dipilih pada tabel, sebagai lawan dari pernyataan INSERT yang menambahkan baris data baru. Format dasar pernyataan UPDATE adalah:
UPDATE nama-tabel set nilai-kolom WHERE kondisi

Dimana nama-tabel adalah nama dari tabel yang berisi baris yang akan diupdate, dan nilai kolom adalah daftar data dari nama kolom dan nilainya. Secara bebas, daftar data dari kondisi dapat ditambahkan secara spesifik dengan baris yang akan dimodofikasi pada tabel. Jika tidak diberi kondisi, maka update data akan dilakukan pada tiap-tiap baris didalam tabel yang ditentukan. Berbagai update harus disesuaikan dengan aturan integritas pada database. Sebagai contoh, menyetting nilai null pada kolom yang sudah ditetapkan dengan nilai NOT NULL akan menyebabkan pernyataan tidak akan dijalankan dan terdapat pesan error pada relasi database. 13.1.5 DELETE Pernyataan DELETE menghapus baris data pada tabel yang dipilih. Struktur dasar dari pernyataan DELETE adalah :

DELETE FROM nama-tabel WHERE kondisi

Dimana nama-tabel adalah nama dari tabel yang berisi baris data yang akan dihapus. Daftar data dari kondisi secara bebas dapat dispesifikasikan sebaik mungkin. Jika tidak diberi kondisi, maka pernyataan akan mneghapus semua baris data pada tabel yang telah ditentukan.

Bab 14 :

Membuat Database Access dan Koneksi ke Java Secara Console


14.1 Pengertian database

Database adalah kumpulan informasi yang disimpan di dalam komputer secara sistematik untuk memperoleh informasi dari basis data tersebut. Konsep dasar database adalah kumpulan dari catatan, atau potongan dari pengetahuan. Sebuah database memiliki penjelasan terstruktur dari jenis fakta yang tersimpan di dalamnya,yang disebut dengan skema. Ada banyak cara untuk mengorganisasi skema,atau menstruktur database yang disebut sebagai database model atau model data. Model yang umum digunakan sekarang adalah model relasional, yang menurut istilah yaitu mewakili semua informasi dalam bentuk table yang saling berhubungan dimana setiap table terdiri dari baris dan kolom (definisi yang sebenernya menggunakan terminology matematika). Dalam model ini, hubungan antara table diwakili dengan menggunakan nilai yang sama antar table. 14.2 Perangkat untuk membuat database Database dapat dibuat dan diolah dengan menggunakan suatu program komputer, yaitu yang biasa disebut dengan software (perangkat lunak). Software yang digunakan untuk mengelola dan memanggil query database disebut Database Management System (DBMS). DBMS terdiri dari dua komponen, yaitu Relational Database Management System (RDBMS) dan Overview of Database Management System (ODBMS). RDBMS meliputi Interface Drivers, SQL Engine, Transaction Engine, Relational Engine, dan Storage Engine. Sedangkan ODBMS meliputi Language Drivers, Query Engine, Transaction Engine, dan Storage Engine. Sedangka level dari softwarenya sendiri, terdapat dua level software yang memungkinkan untuk membuat sebuah database antara lain : a. High Level Software Yang termasuk di dalam High Level Software, antara lain Microsoft SQL Server, Oracle, Sybase, Interbase, XBase, Firebird, MySQL, PostgreSQL, Microsoft Access, dBase III,

Paradox, Visual Foxpro, Arago, Force, Recital, dbFast, dbXL, Quicksilver, Clipper, FlagShip, Harbour, Visual dBase, dan lotus Smart Suite Approach. b. Low Level Software Btrieve dan Tsunami Record Manager. 14.3 Perintah SQL Secara umum perintah SQL dikelompokkan menjadi 3 (tiga) macam, seperti dibawah ini: 1. DML (Data Manipulation Language) digunakan untuk memanipulasi data yang berada di dalam table, seperti : menampilkan data (Select), menambah data (insert), menghapus data (delete), dan mengubah data (update). DDL (Data Definition Language) digunakan untuk mendefinisikan dan membuat struktur table, serta membuat index. Contohnya perintah Create Table dan Alter Table. DCL (Data Control Language) digunakan untuk mengatur user privilege atau hak akses untuk seorang pemakai database, seperti perintah Grant dan Revoke. Membuat Database Untuk membuat database, langkah-langkahnya sebagai berikut : 1. 2. Jalankan perangkat lunak Microsoft Access. Tampilan utama Microsoft Access seperti Gambar di bawah ini.

2.

3.

14.4

3.

Klik Blank Database, ketik nama database perpustakaan.

4.

Kemudian klik ikon Browse, untuk mencari tempat penyimpanan database yang anda buat. Klik Create Klik office button > Save As, kemudian pilih access 2000, database (untuk menyimpan database format Access 2000)

5. 6.

7.

Muncul pesan untuk menutup semua objek, sebelum dikonversi ke format Access 2000.

8. 9. 14.5

Klik Yes, kemudian ketik DbPerpus di kotak File name pada jendela Save As. Klik Save. Membuat Tabel Untuk membuat table, langkah-langkahnya sebagai berikut:

1. 2.

Pada tab create, pilih ikon Table Design. Kemudian ketik struktur table seperti dibawah ini. Tabel Buku Field Name IdBuku Kategori Judul Pengarang Text Text Text Text Data Type 10 15 30 30 Field Size Description Kode Buku Kategori Buku Judul Buku Pengarang Buku

Catatan : Untuk membuat kunci utama (Primary Key), klik ikon Primary key di depan nama field yang akan menjadi kunci utama. Jika field yang menjadi kuncinya lebih dari satu, maka menggunakan symbol Shift. 3. 4. 5. 6. 14.6 Setelah anda memasukkan field-field, klik tombol Close. Muncul pesan untuk menyimpan. Klik tombol Yes, kemudian ketik Buku di kotak Tabel Name. Klik tombol OK. Listing Koneksi

import java.sql.*; import javax.swing.JOptionPane; public class Koneksi {

Connection conn; Statement st; ResultSet rs; public Connection setKoneksi() { try{ Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost/perpus_dbase","root",""); st=conn.createStatement(); } catch(Exception e){ JOptionPane.showMessageDialog(null,"Koneksi Gagal : " +e); } return conn; } }

Bab 15 :

Membuat Aplikasi Database secara GUI dengan Koneksi Database MySQL ke Java
15.1 Pembuatan Form Master

Setelah kita membuat database dan table, sekarang kita buat aplikasi untuk Form Buku. Tampilan Form seperti di bawah ini. (menggunakan Netbeans)

Listing Class_buku :
import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; public class Buku { Koneksi kon=new Koneksi(); public Buku() { kon.setKoneksi(); } public String IdBuku,Judul,Pengarang,Kategori; protected void setIdBuku(String value) { IdBuku=value; } protected String getIdBuku() { return IdBuku; } protected void setKategori(String value) { Kategori=value; } protected String getKategori() { return Kategori; } protected void setJudul(String value) { Judul=value; } protected String getJudul() { return Judul; } protected void setPengarang(String value) { Pengarang=value; } protected String getPengarang() { return Pengarang; }

public String getIdCom() { String urutan=null; try{ kon.rs=kon.st.executeQuery("select right(IdBuku,3)+1 as Id from Buku where left(IdBuku,3)='" + "COM" +"'"); if (kon.rs.next()) { kon.rs.last(); urutan=kon.rs.getString(1); while (urutan.length()<3) urutan="0"+urutan; urutan="COM"+urutan; } else urutan="COM001"; }catch(Exception e){ JOptionPane.showMessageDialog(null,"Eroor Id COM :" + e); } return urutan; } public String getIdRlg() { String urutan=null; try{ kon.rs=kon.st.executeQuery("select right(IdBuku,3)+1 as Id from Buku where left(IdBuku,3)='" + "RLG" +"'"); if (kon.rs.next()) { kon.rs.last(); urutan=kon.rs.getString(1); while (urutan.length()<3) urutan="0"+urutan; urutan="RLG"+urutan; } else urutan="RLG001"; }catch(Exception e){ JOptionPane.showMessageDialog(null,"Eroor Id RLG :" + e); } return urutan; } public String getIdStr() { String urutan=null; try{

kon.rs=kon.st.executeQuery("select right(IdBuku,3)+1 as Id from Buku where left(IdBuku,3)='" + "STR" +"'"); if (kon.rs.next()) { kon.rs.last(); urutan=kon.rs.getString(1); while (urutan.length()<3) urutan="0"+urutan; urutan="STR"+urutan; } else urutan="STR001"; }catch(Exception e){ JOptionPane.showMessageDialog(null,"Eroor Id STR :" + e); } return urutan; } public DefaultTableModel getTabel() { String judul[]={"Id Buku","Kategori","Judul Buku","Pengarang"}; DefaultTableModel dtm=new DefaultTableModel(null,judul); try{ kon.rs=kon.st.executeQuery("Select * from Buku order by IdBuku"); String[]data=new String[4]; while (kon.rs.next()) { data[0]=kon.rs.getString(1); data[1]=kon.rs.getString(2); data[2]=kon.rs.getString(3); data[3]=kon.rs.getString(4); dtm.addRow(data); } }catch(Exception e){ JOptionPane.showMessageDialog(null,"Error Tabel :"+ e); } return dtm; } public boolean update(){ boolean x=false; //String sql="update buku set Kategori='"+this.Kategori+"',Judul='"+this.Judul+"',Pengarang='" +this.Pengarang+"' where IdBuku='"+this.IdBuku+"'"; //Statement stmt; try{ kon.st.executeUpdate("update buku set Kategori='" +this.Kategori+"',Judul='"+this.Judul+"',Pengarang='"+this.Pengarang+"' where IdBuku='"+this.IdBuku+"'");

x=true; }catch(Exception e) { JOptionPane.showMessageDialog(null,"Error Perintah "+e); x=false; } return x; } public boolean insert(){ boolean x=false; try{ kon.st.executeUpdate("insert into buku (IdBuku,Kategori,Judul,Pengarang)values('"+this.IdBuku+"','"+this.Kategori+"','"+this.Judul+"','" +this.Pengarang+"')"); x=true; }catch(Exception e){ JOptionPane.showMessageDialog(null,"Error SQL "+e); x=false; } return x;} public boolean cariBuku() { boolean cari=false; try{ kon.rs=kon.st.executeQuery("select * from buku where IdBuku='" + this.IdBuku + "'"); if(kon.rs.next()) { this.Kategori=kon.rs.getString("Kategori"); this.Judul=kon.rs.getString("Judul"); this.Pengarang=kon.rs.getString("Pengarang"); cari=true; } else { this.Kategori = ""; this.Judul=""; this.Pengarang=""; } }catch(Exception e) { JOptionPane.showMessageDialog(null,"Error Cari Anggota "+e); cari=false; } return cari; } public boolean delete(){ boolean x=false; try{ kon.st.executeUpdate("delete from buku where IdBuku='" +this.IdBuku+"' "); x=true; }catch(Exception e){ System.out.println(e.getMessage());x=false; } return x; } }

Listing Form :
package perpus; import javax.swing.JOptionPane; void bersih() { tId.setText(""); tJudul.setText(""); cbKategori.setSelectedIndex(0); tPeng.setText(""); } void pasif() { tId.setEnabled(false); tJudul.setEnabled(false); cbKategori.setEnabled(false); tPeng.setEnabled(false); } void aktif() { tJudul.setEnabled(true); cbKategori.setEnabled(true); tPeng.setEnabled(true); } void awal() { bersih(); pasif(); bBaru.setEnabled(true); bsimpan.setEnabled(false); bbatal.setEnabled(false); jButton1.setEnabled(false); jButton2.setEnabled(false); jButton3.setEnabled(false); tbBuku.setModel(bk.getTabel()); }

Properti Form :
Objek JCombobox1 Name cbKategori Model =Pilih= Religi Computer Sastra Border

JTextField1 JTextField2 JTextField3 JPanel1 JTable1 JButton1

tId tJudul tPeng TitleBorder : Data Buku tbBuku bBaru Text : Baru

JButton2 JButton3 JButton4 JButton5 JButton6 JButton7 JButton8

bbatal bsimpan bexit btampil JButton3 JButton1 JButton2

Text : Batal Text : Simpan Text : Exit Text : Cari Text : Hapus Text : Edit Text : Update

ComboBox Kategori :
private void cbKategoriActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if(cbKategori.getSelectedIndex()==1){ tId.setText(bk.getIdRlg());} else if(cbKategori.getSelectedIndex()==2){ tId.setText(bk.getIdCom());} else if(cbKategori.getSelectedIndex()==3){ tId.setText(bk.getIdStr());} else tId.setText(null); aktif(); tJudul.grabFocus(); }

Button Baru :
private void bBaruActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: cbKategori.setEnabled(true); bBaru.setEnabled(false); bsimpan.setEnabled(true); bbatal.setEnabled(true); }

Button Simpan
private void bsimpanActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: bk.setIdBuku(tId.getText()); bk.setKategori((String)cbKategori.getSelectedItem()); bk.setJudul(tJudul.getText()); bk.setPengarang(tPeng.getText()); if(bk.insert()){ JOptionPane.showMessageDialog(rootPane, "Data tersimpan"); awal(); } }

Button Edit
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: aktif(); jButton1.setEnabled(false); jButton2.setEnabled(true); jButton3.setEnabled(true); }

Button UpDate
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: bk.setKategori((String)cbKategori.getSelectedItem()); bk.setJudul(tJudul.getText()); bk.setPengarang(tPeng.getText()); if(bk.update()){ bk.getIdBuku(); JOptionPane.showMessageDialog(rootPane, "Data sudah diupadte"); awal(); }else{ JOptionPane.showMessageDialog(rootPane, "Data gagal diupadte"); } }

Button Delete
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if(bk.delete()) bk.getIdBuku(); JOptionPane.showMessageDialog(rootPane, "Data sudah dihapus"); awal(); }

Button Exit
private void bexitActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: int b=JOptionPane.showConfirmDialog(null,"ingin keluar dari form?","konfirmasi",JOptionPane.YES_NO_OPTION); if (b==0) dispose(); }

Button Tampil
private void btampilActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: String cari=JOptionPane.showInputDialog("Input Id Buku yang Dicari :",""); bk.setIdBuku(cari); if(bk.cariBuku()){ tId.setText(bk.getIdBuku()); tJudul.setText(bk.getJudul()); tPeng.setText(bk.getPengarang()); cbKategori.setSelectedItem(bk.getKategori()); JOptionPane.showMessageDialog(rootPane, "Data Ditemukan"); bBaru.setEnabled(false); jButton1.setEnabled(true); jButton3.setEnabled(true); pasif(); }else{ JOptionPane.showMessageDialog(rootPane, "Data tidak ada,Silahkan isi Data Baru"); awal(); } }

Bab 16 - 17:

Studi Kasus Penggajian


1. Kopetensi Dasar Mahasiswa dapat menyelesaikan studi kasus aplikasi penggajian dengan membuat: a. Form Aplikasi Pegawai b. Form Aplikasi Jabatan c. Form Aplikasi Absensi