Anda di halaman 1dari 97

MODUL

Pemrograman Berorientasi Objek (Java)

Program Studi Teknik Informatika

Program Strata Satu (S1)

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER

NUSA MANDIRI

JAKARTA

2014
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 kelas-
kelas 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;

Type instance_variabeln;

//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 instansiasi dengan new

ATAU

balok baloksaya; // 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 perintah-
perintah berikut :

{
int N;
double d;
boolean b;

N = 1;
d = Math.random() * 3;
b = (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 taruh(String s) { ... }


void taruh(int i) { ... }
void taruh(double d) { ... }
void 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. Operasi-
operasi yang dilakukan oleh method diantaranya, yaitu:

1. Suatu method bisa menerima dan memanipulasi data atau field di dalam diri method
tersebut.
2. Suatu method bisa mempengaruhi nilai suatu objek lain.

2.2.1 Membuat Method

Untuk membuat atau menciptakan method terdapat 4 bagian yang mendasar, yaitu :

1. Nama method
2. Daftar parameter-parameter
3. Tipe objek atau tipe primitive (tipe data) yang dikembalikan oleh method
4. 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 Kontrol Akses pada Enkapsulasi
3.4.1 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 kelas-
kelas 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 class-
class 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 Latihan

1. Buatlah program untuk menghitung volume Silinder. Gunakan konsep Enkapsulasi. Nilai
Radius diinput melalui keyboard.

2. Buatlah program untuk menghitung penjumlahan, pengurangan, perkalian dan pembagian


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.
b. 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
c. 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.

4.1.2 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 :
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 Nama_Class_Turuan extends Class_Induk


{
Badan class turunan
}

Penjelasan :

a. Nama_Class_Turunan, adalah nama class yang akan dibuat sebagai class turunan atau
subclass.
b. 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 keyword super, yang
digunakannya seperti pada saat menggunakan method. Bentuk penulisan penggunakan
Constructor SuperClass, seperti dibawah ini :
super(parameter1, parameter2, ..., parameter-n);

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 Latihan

1. 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 %.
2. Buat class MatematikaCanggihBeraksi yang memanggil method pertambahan, perkalian
dan modulus.
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.
b. Overriding
Overriding akan terjadi apabila ketika pendeklarasian suatu Method subclass dengan
nama objek dan parameter yang sama dengan Method dari superClassnya.

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 Latihan

1. Kembangkan class Matematika dan MatematikaBeraksi

2. Lakukan overloading pada Method yang ada (pertambahan, pengurangan, perkalian,


pembagian).

3. Tambahkan method baru bertipe data double (pecahan) dan memiliki 3 parameter.

4. Uji di kelas MatematikaBeraksi dengan parameter pecahan: 12.5, 28.7, 14.2

5. Misalnya:

pertambahan(12.5, 28.7, 14.2)

pertambahan(23, 34)

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 (non-
abstract) 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 nama_interface


{
//tubuh 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 yang anda input adalah Benar, berupa
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());
}
}
}
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 platform-
independent 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 Komponen GUI pada AWT

9.3.1 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

Class AWT Deskripsi


Komponen 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.
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() drawPolyline() setColor()
fillRect() drawPolygon() getFont()
drawRect() fillPolygon() setFont()
clearRect() getColor() drawstring()
Hubungan dari class ini adalah class Color, dimana memiliki tiga constructor.
Table 9.3. Class Color
Format Constructor Deskripsi
Color(int r, int g, int b) Nilai integer 0 -255
Color(float r, float g, float b) Nilai float 0.0 – 1.0
24
Color(int rgbValue) 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); //Konstanta dalam class Color
}
public void paint(Graphics g) {
g.setColor(new Color(0,255,0)); //hijau
g.setFont(new Font("Helvetica",Font.PLAIN,16));
g.drawString("Hello GUI World!", 30, 100);
g.setColor(new Color(1.0f,0,0)); //red
g.fillRect(30, 100, 150, 10);
}
public static void main(String args[]) {
Frame f = new Frame("Testing Graphics Panel");
GraphicPanel gp = new GraphicPanel();
f.add(gp);
f.setSize(600, 300);
f.setVisible(true);
}
}
Agar panel dapat terlihat atau visible, dia harus diletakkan 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 Button Choice
TextField Checkbox List
TextArea CheckboxGroup 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 Penjelasan
Swing
JComponent Class induk untuk semua komponen Swing, tidak termasuk top-level
container
JButton Tombol “push”. Berhubungan dengan class button dalam package AWT
JCheckBox 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 Varchar (10),

->);

Query OK, 0 rows affected (0.13 sec)

mysql>

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 users VALUES(199700651, 'Jeni Master', 'UP
Ayala Technopark');

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).

2. DDL (Data Definition Language) digunakan untuk mendefinisikan dan membuat struktur
table, serta membuat index. Contohnya perintah Create Table dan Alter Table.

3. DCL (Data Control Language) digunakan untuk mengatur user privilege atau hak akses
untuk seorang pemakai database, seperti perintah Grant dan Revoke.

14.4 Membuat Database

Untuk membuat database, langkah-langkahnya sebagai berikut :

1. Jalankan perangkat lunak Microsoft Access.

2. Tampilan utama Microsoft Access seperti Gambar di bawah ini.


3. Klik Blank Database, ketik nama database perpustakaan.

4. Kemudian klik ikon Browse, untuk mencari tempat penyimpanan database yang anda
buat.

5. Klik Create

6. Klik office button > Save As, kemudian pilih access 2000, database (untuk menyimpan
database format Access 2000)

7. Muncul pesan untuk menutup semua objek, sebelum dikonversi ke format Access 2000.
8. Klik Yes, kemudian ketik DbPerpus di kotak File name pada jendela Save As.

9. Klik Save.

14.5 Membuat Tabel

Untuk membuat table, langkah-langkahnya sebagai berikut:

1. Pada tab create, pilih ikon Table Design.

2. Kemudian ketik struktur table seperti dibawah ini.

Tabel Buku

Field Name Data Type Field Size Description

IdBuku Text 10 Kode Buku

Kategori Text 15 Kategori Buku

Judul Text 30 Judul Buku

Pengarang Text 30 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. Setelah anda memasukkan field-field, klik tombol Close.

4. Muncul pesan untuk menyimpan.

5. Klik tombol Yes, kemudian ketik Buku di kotak Tabel Name.

6. Klik tombol OK.

14.6 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 Name Model Border
JCombobox1 cbKategori =Pilih=
Religi
Computer
Sastra
JTextField1 tId
JTextField2 tJudul
JTextField3 tPeng
JPanel1 TitleBorder : Data Buku
JTable1 tbBuku
JButton1 bBaru Text : Baru
JButton2 bbatal Text : Batal
JButton3 bsimpan Text : Simpan
JButton4 bexit Text : Exit
JButton5 btampil Text : Cari
JButton6 JButton3 Text : Hapus
JButton7 JButton1 Text : Edit
JButton8 JButton2 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