Anda di halaman 1dari 102

MODUL PELATIHAN

PEMROGRAMAN JAVA

Level III: Java


Handout Kuliah

POLITEKNIK GAJAH
TUNGGAL

2
MODUL I
THREAD
Tujuan
Memahami multithreading dalam perograman Java
1.1. Multitasking
-

Multitasking adalah istilah yang menjelaskan bahwa sebuah komputer dapat menjalankan
beberapa aktifivas secara simultan/bersamaan

Process based multitasking adalah aktifitas aktifitas yang dijalankan bersamaan dan
aktifitas-aktifitas tersebut berbasis sebuah proses/program

Thread based multitasking adalah aktifitas-aktifitas yang dijalankan bersamaan yang


berbasis pada thread

1.2. Pengertian Thread


-

Thread adalah suatu bagian program (berupa barisan kode) yang berdiri sendiri tidak
bergantung pada bagian program yang lain dan dapat dijalankan secara simultan

Suatu Thread dapat diistirahatkan tanpa harus menghentikan bagian program yang lain atau
keseluruhan program, karena setiap thread didefinisikan dalam lokasi eksekusi yang
berbeda

Sebuah program java dapat memiliki lebih dari satu thread

Pada saat sebuah program java dijalankan, otomatis ada satu buah thread yang dibuat,
thread ini disebut thread utama (main thread)

Thread utama dalah induk dari thread-thread lain yang ada dalam program tersebut, yang
disebut thread anak (child thread)

Walaupun thread utama dibuat secara otomatis, namun dapat dikontrol oleh objek dari
kelas Thread, yeng terdapat dalam pacakage java.lang.

Untuk melalukan ini, kita harsu memanggil method currentThread() yang didefinisikan
pada kelas Thread

Deklarasi method ini adalah


static Thread currentThread()

Method currentThread() mengembalikan referensi ke thread yang sedang aktif

Perhatikan contoh program berikut

3
class DemoThreadUtama {
public static void main(String[] args)
throws InterruptedException {
// mendapatkan thread yang sedang aktif
Thread tUtama = Thread.currentThread();
// menampilkan informasi tentang thread
System.out.print("Informasi awal: ");
System.out.println(tUtama.toString());
// mengganti nama thread
tUtama.setName("Thread utama");
// menampilkan kembali informasi tentang thread
System.out.print("Informasi setelah diubah namanya: ");
System.out.println(tUtama.toString());
for (int i=0; i<5; i++)
{ System.out.println("Detik ke-" +
(i+1));
Thread.sleep(5000);

// membuat delay selama 5 detik

}
}
}
1.3. Method-Method Thread

setName(String name)
Method ini berfungsi untuk mengubah nama thread.

getName()
method untuk mendapatkan nama thread

setPriority(int prio)
Method ini berfungsi untuk menentukan prioritas thread.

sleep(long m)
Method yang mengehentikan eksekusi suatu thread sepanjang selang waktu dalam
parameter (dalam satuan milidetik).

getPriority()
Method yang digunakan untuk mengetahui prioritas suatu thread.

suspend()
Menghentikan aktivitas thread untuk sementara sampai method resume dipanggil.

resume()
Method yang digunakan untuk menjalankan kembali aktivitas thread yang dihentikan
sementara oleh method suspend().

isAlive()
Ini adalah method yang digunakan untuk mengetahui apakah suatu method masih
hidup.

start()
Method yang digunakan untuk menjalankan thread.

1.4. Membuat Thread


-

Ada dua cara membuat

Cara pertama, dengan mengimplementasi interface Runnable

Interface Runnable terdapat dalam package java.lang, deklarasinya sebagai berikut


public interface Runnable{
public void run();
}

Method run() disiikan oleh kode untuk proses yang akan dijalankan oleh thread yang
bersangkutan

Setelah kita membuat kelas yang mengimplementasi interface Runnable, buat objek dari
kelas tersebut

Kemudian lewatkan objek tersebut ke dalam konstruktor Thread, bentuk umum sintaksnya
adalah
Thread(Runnable objThread)
Thread(Runnable objThread, String namaThread)

Menjalankan thread dilakukan melalui pemanggilan method start()

Method start() secara otomatis akan memanggil method run() yang terdapat
dalam kelas yang mengimplementasi interface Runnable

Perhatikan contoh berikut


class MyRunnable implements Runnable {
// mengimplementasikan method run() yang dideklarasikan
// di dalam interface Runnable
public void run() {
System.out.println("Thread anak dieksekusi");
}
}

5
class DemoImplementRunnable1 {
public static void main(String[] args) {
// (LANGKAH KE-1)
// membuat objek Runnable
MyRunnable obj = new MyRunnable();
// (LANGKAH KE-2)
// membuat objek Thread dengan melewatkan objek Runnable
Thread t = new Thread(obj);
// (LANGKAH KE-3)
// menjalankan thread
t.start();
System.out.println("Thread utama dieksekusi");
}
}
Contoh lain
class MyRunnable implements Runnable {
private Thread t;
// constructor kelas MyRunnable
MyRunnable() {
t = new Thread(this); // melewatkan objek MyRunnable
t.start();
// menjalankan thread
}
public void run() {
System.out.println("Thread baru dieksekusi");
}
}
class DemoImplementRunnable2 {
public static void main(String[] args)
{ MyRunnable obj = new
MyRunnable();
System.out.println("Thread utama dieksekusi");
}
}

Cara kedua untuk membuat thread adalah dengan membuat kelas yang merupakan turunan
kelas Thread.

Perhatikan contoh berikut


class MyThread extends Thread {
// melakukan override terhadap method run()
public void run() {
System.out.println("Thread baru dieksekusi");
}
}

6
class DemoExtendsThread {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
System.out.println("Thread utama dieksekusi");
}
}

1.5. Menghentikan Thread


-

Thread yang telah dijalankan secara otomatis akan dihentikan ketika semua proses (kode
dalam method run()) telah selesai dieksekusi

Namun kita diijinkan untuk menghentikan thread secara manual

Untuk menghentikan thread yang sedang berjalan, gunakan variabel bertipe boolean
class MyThread extends Thread {
// mendeklarasikan variabel boolean
// untuk mengontrol pengulangan
private boolean selesai = false;
public void run() {
int counter = 0;
System.out.println("Thread anak dijalankan");
while (!selesai)
{ System.out.print((++counter) + "
");
}
System.out.println("Thread anak selesai");
}
public void stopThread() {
selesai = true;
}
}

class DemoStopThread {
public static void main(String[] args)
throws InterruptedException
{ System.out.println("Thread utama
dijalankan");
MyThread t = new MyThread();
// menjalankan thread anak
t.start();
// mengistirahatkan thread utama selama 1/40 detik
Thread.sleep(25);
// menghentikan thread anak
t.stopThread(); // JANGAN GUNAKAN: t.stop();
System.out.println("nThread utama selesai");
}

7
Jika kode program tesebut dieksekusi, outputnya adalah:

Terlihat bahwa thread utama dihentikan sebelum thread anak selesai


1.6. Multithreading
-

Dalam sebuah program Java, kita diijinkan untuk memiliki banyak thread

Thread-thread tersebut dapat dijalankan secara simultan

Perhatikan contoh berikut


class MyThread1 extends Thread {
public void run() {
try {
for (int i=0; i<10; i++) {
System.out.println("Thread
pertama:
detik
ke+(i+1));
if (i != 9) {
sleep(1000);
} else {
System.out.println("Thread pertama selesai...n");
}
}
} catch (InterruptedException ie)
{ System.out.println(ie.getMessage()
);
}
}
}

class MyThread2 extends Thread {


public void run() {
try {
for (int i=0; i<5; i++) {
System.out.println("Thread kedua: detik ke-" + (i+1));
if (i != 4)
{ System.out.println(
);

8
sleep(1000);
} else {
System.out.println("Thread kedua selesai...n");
}
}
} catch (InterruptedException ie)
{ System.out.println(ie.getMessage()
);
}
}
}

class DemoMultipleThread {
public static void main(String[] args)
{ MyThread1 t1 = new MyThread1();
t1.start();
MyThread2 t2 = new MyThread2();
t2.start();
}
}

1.7. Siklus Hidup Thread


Berikut adalah siklus hidup suatu thread

1.8. Menentukan Prioritas Thread


-

Prioritas thread digunakan oleh scheduler (penjadwal thread) untuk menentukan thread
mana yang seharusnya dieksekusi terlebih dahulu.

Thread dengan prioritas lebih tinggi akan mendapatkan waktu CPU yang lebih
dibandingkan dengan thread yang prioritasnya lebih rendah

9
-

Thread dengan prioritas lebih tinggi dapat mengesampingkan thread dengan prioritas lebih
rendah. Contohnya, apabila terdapat thread dengan prioritas lebih rendah sedang berjalan
dan kemudian thread dengan prioritas lebih tinggi di-resume atau dijalankan ulang (dari
keadaan wait maupun sleep), maka thread dengan prioritas rendah tersebut akan
dikesampingkan

Untuk

menentukan

prioritas thread, gunakan

method

setPriority(),

yang

deklarasinya adalah
final void setPriority(int level)
-

Untuk

memperoleh

informasi

tentang prioritas

suatu thread, gunakan

getPriority(), yang deklarasinya adalah


final int getPriority()
-

Perhatikan contoh berikut


class MyThread implements Runnable {
private Thread t;
private long n; // jumlah pengulangan yang dihasilkan
private boolean selesai = false;
MyThread(String nama, int prioritas) {
t = new Thread(this, nama);
t.setPriority(prioritas);
n = 0;
}
public void run() {
while (!selesai) {
n++;
}
}
public void start() {
t.start();
}
public void stop() {
selesai = true;
}
public long getN() {
return n;
}
public Thread getThread() {
return t;
}
}

method

10
class DemoPrioritasThread {
public static void main(String[] args)
throws InterruptedException {
MyThread t1 = new MyThread("prioritas-tinggi",
Thread.NORM_PRIORITY + 2);
MyThread t2 = new MyThread("prioritas-rendah",
Thread.NORM_PRIORITY - 2);
t1.start();
t2.start();
// mengistirahatkan thread utama selama 5 detik
Thread.sleep(5000);
t1.stop();
t2.stop();
t1.getThread().join();
t2.getThread().join();
System.out.println("Jumlah
t1.getThread().getName()
System.out.println("Jumlah
t2.getThread().getName()

pengulangan pada " +


+ ": " + t1.getN());
pengulangan pada " +
+ ": " + t2.getN());

}
}

Output program di atas adalah

Terlihat bahwa thread dengan prioritas lebih tinggi mendapatkan jumlah pengulangan yang
lebih banyak
1.9. Method join() dan isAlive()
-

Pada contoh sebelumnya, kita melihat bahwa thread utama dihentikan sebelum thread anak

Pada beberapa kasus, terkadang kita ingin thread utama adalah thread terakhir yang
dihentikan

Untuk itu kita harus memanggil method join() dari semua thread anak

Untuk mengetahui apakah suatu thread masih hidup, gunakan method isAlive()

11
class MyThread implements Runnable {
private Thread t;
private int n;
MyThread(String nama, int n)
{ t = new Thread(this,
nama); this.n = n;
}
public void run() {
try {
for (int i=0; i<n; i++) {
System.out.println("Thread "+t.getName()+": detik ke-"
+(i+1));
Thread.sleep(1000);
}
System.out.println("Thread "+t.getName() + " selesai...");
} catch (InterruptedException ie)
{ System.out.println(ie.getMessage()
);
}
}
public void start() {
t.start();
}
public Thread getThread() {
return t;
}
}

class DemoIsAliveJoin {
public static void main(String[] args)
throws InterruptedException {
System.out.println("Thread utama dijalankann");
MyThread t1 = new MyThread("pertama", 2);
MyThread t2 = new MyThread("kedua", 3);
MyThread t3 = new MyThread("ketiga", 4);
t1.start();
t2.start();
t3.start();
// pada saat thread t1, t2, dan t3 aktif
System.out.println("t1.getThread().isAlive() : "
t1.getThread().isAlive());
System.out.println("t2.getThread().isAlive() : "
t2.getThread().isAlive());
System.out.println("t3.getThread().isAlive() : "
t3.getThread().isAlive());
System.out.println();
// menunggu sampai thread t1, t2, dan t3 selesai
t1.getThread().join();

+
+
+
dieksekusi

12
t2.getThread().join();
t3.getThread().join();
// setelah thread t1, t2, dan t3 selesai
System.out.println();
System.out.println("t1.getThread().isAlive() : " +
t1.getThread().isAlive());
System.out.println("t2.getThread().isAlive() : " +
t2.getThread().isAlive());
System.out.println("t3.getThread().isAlive() : " +
t3.getThread().isAlive());
System.out.println("nThread utama selesai");
}
}

1.10.
-

Sinkronisasi Thread

Thread-thread dalam sebuah program saling membagi ruang memori, artinya thread-thread
tersebut dapat saling berbagi resource

Pada saat dua atau lebih thread mengakses suati resource yang di-share, maka dibutuhkan
suatu cara untuk meyakinkan bahwa resource tersebut hanya

akan digunakan oleh satu

buah thread pada satu waktu tertentu


-

Cara yang digunakan ini disebut sinkronisasi

Untuk dapat melakukan sinkronisasi thread, teknologi Java memperkenalkan terminologi


lock pada obyek.

Lock merupakan kunci virtual yang dimiliki oleh obyek. Kunci virtual ini dapat dimiliki
oleh obyek lain yang mengakses obyek pemilik kunci.

Akibatnya adalah : selama obyek A memiliki kunci dari obyek yang diakses ( misalnya
obyek B) , maka obyek C tidak dapat mengakses obyek B.

Obyek C akan terus menunggu sampai obyek A melepaskan kunci obyek B dan obyek B
memiliki kembali kunci tersebut.

13

Untuk menghasilkan sinkronisasi di antara thread, maka teknologi Java menyediakan kata
kunci synchronized yang akan menyebabkan lock / kunci obyek berpindah ke thread yang
mengakses obyek tersebut.

Berikut adalah ilustrasi sinkronisasi Thread

Pada diagram state model tersebut, terdapat tambahan status, yaitu BLOCKED in objects
lock pool. Artinya, ketika ada thread yang mengakses suatu obyek B yang memiliki method
atau blok yang menggunakan kata kunci synchronized, thread lain harus menunggu untuk
mengakses obyek B tersebut. Thread lain tersebut masuk ke dalam status BLOCKED in
objects lock pool.

Ketika thread pemegang lock tersebut mengembalikan kunci kepada obyek B, maka thread
yang sedang menunggu di BLOCKED in objects lock pool mendapatkan kunci obyek B,
dan masuk ke dalam status Runnable. Seperti pada Model I, thread pemegang kunci obyek
B tersebut dipilih oleh scheduler untuk masuk ke status Running.

Singkatnya:
Ketika sebuah method / blok dari sebuah obyek yang menggunakan kata kunci
synchronized diakses oleh sebuah thread, thread lain tidak dapat mengakses methodmethod tersinkronisasi milik obyek tersebut.

14
Ketika sebuah method / blok dari sebuah obyek yang menggunakan kata kunci
synchronized diakses oleh sebuah thread, thread lain masih dapat mengakses methodmethod yang tidak tersinkronisasi milik obyek tersebut.
Sinkronisasi Pada Method
-

Sinkronisasi pada method berarti sinkronisasi dilakukan untuk keseluruhan isi method.
Akibatnya, ketika method tersebut diakses oleh sebuah thread, maka thread lain harus
menunggu sampai method tersebut selesai dieksekusi.

Untuk mendefinisikan sebuah method tersinkronisasi pada kelas, sintaknya adalah sebagai
berikut :

[modifiers] synchronized data_type identifier(arguments) {


//code block
}
Perhatikan contoh berikut
class TestKelas {
public synchronized void test(String s)
{ System.out.print("[" + s);
try
{ Thread.sleep(3000
);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("]");
}
}

class MyThread implements Runnable {


private TestKelas obj;
private Thread t;
private String msg;
MyThread(TestKelas obj, String msg) {
t = new Thread(this);
this.obj = obj;
this.msg = msg;
t.start();
}
public void run() {
obj.test(msg);
}
}

15
class DemoSinkronisasiMethod {
public static void main(String[] args)
throws InterruptedException {
TestKelas tk = new TestKelas();
MyThread t1 = new MyThread(tk, "Contoh");
MyThread t2 = new MyThread(tk, "Sinkronisasi");
MyThread t3 = new MyThread(tk, "Method");
}
}
Output program di atas adalah

Sinkronisasi Pada Baris Program Tertentu


-

Terkadang tidak semua baris pada method perlu disinkronisasi. Mungkin hanya satu atau
dua baris pada method yang dibutuhkan untuk sinkronisasi. Agar bagian dari method saja
yang disinkronisasi, maka sintaknya adalah sebagai berikut :
[modifiers] data_type identifier(arguments) {
//code block 1
synchronized(Object obj){
//code block 2
}
//code block 3
}
public synchronized void batal(String nama){
if(persediaan<MAX){
synchronized(this){
this.persediaan++;
updateOK=true;
}
}
// baris program selanjutnya
}

16
MODUL II
KELAS-KELAS DASAR DI JAVA

Tujuan
-

Memahami penggunaan beberapa kelas dasar di Java

2.1. Input-output
-

Java menyediakan dukungan terhadap proses Input/Output (I/O) dalam package java.io.

Di dalam package tersebut tersimpan banyak interface dan kelas yang akan memudahkan
programmer melakukan pengambilan dan penyimpanan informasi ke media lain (misalnya
ke suatu file)

2.1.1

Stream

Stream adalah sebuah abstraksi yang dapat memberikan atau mendapatkan informasi.

Stream dapat dihubungkan dengan peralatan fisik yang terdapat dalam sistem I/O, seperti
keyboard, file, layar console, dll.

Cara kerja stream selalu sama, meskipun peralatan yang terhubung dengannya berbeda.

Kode program yang kita tulis akan sama untuk masing-masing peralatan fisik yang
terhubung dengan stream yang bersangkutan

Contohnya, programmer dapat menggunakan method dan kelas yang sama untuk
melakukan penulisan teks, baik ke console maupun ke dalam file

Tipe-tipe Stream:
-

Byte Stream
memberikan atau menyimpan informasi data dalam bentuk byte, misalnya untuk menulis
dan membaca file biner.

Character Stream
digunakan untuk melakukan I/O yang melibatkan data dalam bentuk karakter, misalnya
proses baca/tulis ke file berisi teks.

Kelas-kelas Stream:
-

Stream

didefinisikan

dengan

empat

buah

kelas

abstrak:

InputStream,

OutputStream, Reader, Writer


-

Kelas InputStream dan OutputStream adalah kelas abstrak yang merupakan kelas
induk dari kelas-kelas yang termasuk dalam kategori byte stream

Kelas Reader dan Writer adalah kelas abstrak yang merupakan kelas induk dari kelaskelas yang termasuk dalam kategori character stream

17
-

Semua kelas turunan dari InputStream maupun Reader memiliki method read()
untuk membaca data

Semua kelas turunan dari OutputStream maupun Writer memiliki method write()
untuk menulis data

Kedua method tersebut adalah method abstrak

Byte Stream
-

Byte stream didefinisikan dengan menggunakan dua buah hirarki kelas

Urutan paling atas dari hirarki tersebut adalah kelas InputStream dan OutputStream

Tabel berikut memperlihatkan beberapa daftar kelas turunan dari kelas InputStream
dan OutputStream
Nama Kelas

Keterangan

BufferedInputStream

Input stream yang telah ter-buffer

BufferedOutputStream

Output Stream yang telah ter-buffer

ByteArrayInputStream

Input stream yang membaca dari array byte

ByteArrayOutputStream Output stream yang menulis ke array byte


DataInputStream

Input stream yang meiliki method-method untuk membaca


tipe data standar yang terdapat dalam java

DataOutputStream

Out stream yang meiliki method-method untuk menulis tipe


data standar yang terdapat dalam java

FileInputStream

Input stream yang membaca data dari sebuah file

FileOutputStream

Output stream yang menulis data ke sebuah file

PipedInputStream

Penyalur input

PipedOutputStream

Penyalur output

PrintStream

Output stream yang berisi method println() dan print()

Character Stream
-

Character stream didefinisikan dengan menggunakan dua buah hirarki kelas

Urutan paling atas dari hirarki tersebut adalah kelas Reader dan Writer

Tabel berikut memperlihatkan beberapa daftar kelas turunan dari kelas Reader dan Writer

18
Nama Kelas

Keterangan

BufferedReader

Character stream input yang telah ter-buffer

BufferedWriter

Character Stream output yang telah ter-buffer

CharArrayReader

membaca dari array character

CharArrayWriter

menulis ke array character

InputStreamReader

Input stream yang menerjemahkan byte ke character

OtuputStreamWriter

Out stream yang menerjemahkan karakter ke byte

FileReader

membaca data dari sebuah file

FileWriter

menulis data ke sebuah file

PipedWriter

Penyalur input

PipedReader

Penyalur output

PrintWriter

Output stream yang berisi method println() dan print()

StringReader

Input stream yang membaca dari sebuah String

StringWriter

Output stream yang menulis ke sebuah String

Semua program Java otomatis mengimport package java.lang. Di dalam package ini
didefinisikan sebuah kelas bernama System. Kelas ini mendefinisikan beberapa aspek yang
berkaitan dengan runtime.

Kelas System mendefinisikan tiga variabel stream: in, out, err. Ketiga variabel ini
didefinisikan sebagai public dan static

System.out mengacu kepada output stream standar, yang berupa console

System.in mengacu kepada input stream standar yang berupa keyboard

System.err mengacu pada stream error standar yang berupa console

2.1.2. Proses Input


-

Dalam Java, input console dilakukan dengan pembacaan terhadap stream System.in

19
-

Untuk mendapatkan karakter-karakter yang dimasukkan melalui keyboard ke layar console,


System.in perlu dibungkus didalam objek BufferedReader.

Hal ini dilakukan untuk membentuk character stream, karena sebenarnya System.in
adalah byte stream

Bentuk konstruktor dari BufferedReader adalah


BufferedReader(Reader inputReader)

inputReader adalah stream yang akan dihubungkan dengan objek dari kelas
BufferedReader yang dibuat.

Karena Reader adalah kelas abstrak, kita perlu menggunakan kelas turunannya yang
berupa kelas konkrit. Salah satunya adalah InputStreamReader yang dapat
mengonversi byte ke character

Agar objek dari InputStreamReader dapat dihubungkan dengan System.in, perlu


digunakan konstruktor dengan bentuk:
InputStreamReader(InputStream is)

Pada konstruktor di atas, is dapat diisi dengan System.in, sehingga untuk membuat objek
BufferedReader yang terhubung dengan keyboard dapat menggunakan kode:
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

Untuk membaca input berupa karakter, gunakan method read() yang terdapat dalam
kelas BufferedReader.

Deklarasi method read() adalah sebagai berikut:


int read() throws IOException
Berikut adalah contoh membaca input data karakter
import java.io.*;
class DemoInputKarakter {
public static void main(String[] args) throws IOException
{ System.out.print("Masukkan sembarang karakter: ");
char ch;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
ch = (char) br.read();12
System.out.println("Karakter yang dimasukkan adalah '" +
ch + "'");
}
}

Untuk melakukan input berupa String, gunakan method readLine()

20
-

Deklarasi method tersebut adalah


String readLine() throws IOException

Contoh input data String


import java.io.*;
class DemoInputString {
public static void main(String[] args) throws IOException
{ System.out.print("Masukkan nama Anda: ");
String nama;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
nama = br.readLine();
System.out.println("Halo " + nama +
", sudahkah Anda mengerti Java?");
}

Contoh input data numeric


import java.io.*;
class DemoInputNumerik1 {
public static void main(String[] args) throws IOException
{ System.out.print("Masukkan sebuah bilangan bulat: ");
String temp;
int bilangan = 0;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// input data dianggap sebagai string
temp = br.readLine();
try {
// konversi dari string ke integer
bilangan = Integer.parseInt(temp);
} catch (NumberFormatException nfe) {
System.out.println("Data yang dimasukkan +"bukan bilangan
bulat");
System.exit(1);
}
System.out.println("Bilangan yang dimasukkan " +
"adalah " + bilangan);
}
}

21
import java.io.*;
class DemoInputNumerik2 {
public static void main(String[] args) throws IOException
{ System.out.print("Masukkan sebuah bilangan riil: ");
String temp;
double bilangan = 0;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// input data dianggap sebagai string
temp = br.readLine();
try {
// konversi dari string ke floating-point
bilangan = Double.parseDouble(temp);
} catch (NumberFormatException nfe)
{ System.out.println("Data yang dimasukkan bukan
bilangan"); System.exit(1);
}
System.out.println("Bilangan yang dimasukkan " +
"adalah " + bilangan);
}
}

2.1.3.
-

Proses Output

Sejauh ini, untuk menampilkan output ke console, kita menggunakan method print()
dan println()

Untuk menuliskan output ke media lainnya, misalkan file, gunakan method write()

System.out adalah objek dari tipe PrintStream. Sedangkan PrintStream adalah


turunan dari OutputStream, maka System.out dapat menggunakan method
write() yang didefinisikan pada kelas OutputStream.

Deklarasi method write() adalah


void write(int nilaiByte)

Contoh penggunaan write()


class DemoWrite {
public static void main(String[] args) {
int i = 'A';
byte b = 65;
char c = 'B';
System.out.write(i);
System.out.write(b);
System.out.write(c);
}
}

22

Selain menggunakan System.out, kita juga dapat menggunakan kelas PrintWriter


untuk menuliskan data ke layar console.

Terdapat beberapa bentuk konstruktor dari PrintWriter, di antaranya ialah

PrintWriter(OutputStream os, boolean flushOnNewLine)

os adalah objek dari OutputStream, sedangkan flushOnNewLine adalah parameter


bertipe boolean yang menyatakan apakah stream output akan dibuang atau tidak setiap kali
method println() dipanggil.

PrintWriter mendukung method print() dan println() untuk semua tipe data

Cara pembentukan objek PrintWriter yang dapat digunakan untuk pembentukkan output
adalah:
PrintWriter pw = new PrintWriter(System.out, true)

Berikut contoh penggunaan PrintWriter


import java.io.PrintWriter;
class DemoPrintWriter {
public static void main(String[] args) {
// membuat objek PrintWriter
PrintWriter pw = new PrintWriter(System.out, true);
double d = 3.1416;
int i = 123;
byte b = 65;
char c = 'A';
String s = "Ini adalah string";
pw.println("Data
pw.println("Data
pw.println("Data
pw.println("Data
pw.println("Data
}
}

2.1.4.
-

bertipe
bertipe
bertipe
bertipe
bertipe

double
int
byte
char
string

:
:
:
:
:

"
"
"
"
"

+
+
+
+
+

d);
i);
b);
c);
s);

Baca Tulis File

Pada contoh program berikut ditunjukkan cara untuk membaca data dari sebuah file dan
kemudian menampilkan isi file tersebut ke layar monitor.
import java.io.*;
class DemoBacaFile {
public static void main(String[] args)
{ FileInputStream finput = null;
int data;
// membuka file

23
try {
finput = new FileInputStream("d:/INPUT.TXT");
} catch (FileNotFoundException fnfe)
{ System.out.println("File tidak
ditemukan."); return; // keluar dari method
}
// membaca data dari dalam file
// dan menampilkan hasilnya ke layar console
try {
while ((data = finput.read()) != -1) {
// ketika ditampilkan, data dikonversi ke tipe
char
System.out.print((char) data);
}
} catch (IOException ioe)
{ System.out.println(ioe.getMessage()
); return;
}
// menutup file
try {
finput.close();
} catch (IOException ioe) {}
}
}
-

Berikut contoh menuliskan data ke file


import java.io.*;
class DemoTulisFile {
public static void main(String[] args) {
FileOutputStream foutput = null;
String data = "Baris pertama
ketiga";

nBaris

kedua

// membuka file
try {
foutput = new FileOutputStream("d:/OUTPUT.TXT");
} catch (FileNotFoundException fnfe)
{ System.out.println("File tidak dapat
terbentuk."); return; // keluar dari method
}
// menulis data ke dalam file
try {
for (int i=0; i<data.length(); i++) {
// data akan dikonversi per karakter
foutput.write((int) data.charAt(i));
}
} catch (IOException ioe)
{ System.out.println(ioe.getMessage()
); return;
}
// menutup file

nBaris

24
try {
foutput.close();
} catch (IOException ioe) {}
}
}
-

Berikut demo menyalin isi suatu file ke dalam file lain

import java.io.*;
class DemoSalinFile {
public static void main(String[] args) {
FileInputStream finput = null;
FileOutputStream foutput = null;
int data;
// membuka file input
try {
finput = new FileInputStream("d:/FILE1.TXT");
} catch (FileNotFoundException fnfe)
{ System.out.println("File input tidak
ditemukan"); return; // keluar dari method
}
// membuka file output
try {
foutput = new FileOutputStream("d:/FILE2.TXT");
} catch (FileNotFoundException fnfe)
{ System.out.println("File output
tidak
terbentuk");
return; // keluar dari method
}
// membaca data dari file input
// dan memasukkannya ke dalam file output
try {
while ((data = finput.read()) != -1) {
foutput.write(data);
}
} catch (IOException ioe) {
System.out.println(ioe.getMessage());
return;
}
try
{ finput.close()
;
foutput.close();
} catch (IOException ioe) {}
}
}

dapat

2.2 Kelas File


Kelas File menyediakan beragam fasilitas yang berhubungan dengan file dan informasinya. Dalam
teknologi Java, sebuah direktori adalah salah satu contoh bentuk file. Sebuah obyek File dapat dibuat
untuk merepresentasikan sebuah direktori dan menggunakannya untuk mengidentifikasi
Berikut ini cara membuat obyek File.

file lainnya.

25
File myFile;
myFile = new File(myfile.txt);
myFile = new File(MyDocs, myfile.txt);

atau
File myDir = new File(MyDocs);
myFile = new File(myDir, myfile.txt);

Bentuk konstruktor yang digunakan tergantung obyek File lainnya yang akan diakses. Sebagai
contoh, jika hanya menggunakan satu file, maka gunakan bentuk konstruktor yang pertama.
Tetapi, jika menggunakan beberapa file sekaligus dari sebuah direktori, maka akan lebih mudah
jika menggunakan bentuk yang kedua.
Berikut ini method-method untuk pengujian dan pengecekkan kelas File :
1. boolean exists()
Method ini mengembalikan nilai boolean true jika file atau direktori yang dirujuk oleh
obyek File tersedia.
2. boolean isDirectory()
Method ini mengembalikan nilai boolean true jika obyek File merujuk ke sebuah direktori
dan false jika sebaliknya.
3. boolean isFile()
Method ini mengembalikan nilai boolean true jika obyek File merujuk ke sebuah file dan
false jika sebaliknya;
4. boolean canRead()
Method ini mengembalikan nilai boolean true jika proses pembacaan file yang dirujuk oleh
obyek File diizinkan dan false jika sebaliknya. Method ini dapat melemparkan exception
SecurityException jika akses untuk membaca file tidak diizinkan.
5. boolean canWrite()
Method ini mengembalikan nilai boolean true jika proses penulisan file yang dirujuk oleh
obyek File diizinkan dan false jika sebaliknya. Method ini dapat melemparkan exception
SecurityException jika akses untuk menulis ke file tidak diizinkan.
Berikut ini Method untuk mengakses obyek File
1. String getName()
Mengembalikan obyek String yang berisikan nama file tanpa path nya. Untuk sebuah
obyek File yang merepresentasikan sebuah
direktorinya saja.

direktori, yang dikembalikan adalah nama

26
2. String getPath()
Mengembalikan obyek String yang berisikan path ke file tersebut termasuk nama file atau
direktorinya.
3. String getAbsolutePath()
Mengembalikan obyek String yang berisikan absolute path dari file atau direktori yang
dirujuk oleh obyek File.
4. String getParent()
Mengembalikan obyek String yang berisikan nama direktori induk (parent directory) dari
file atau direktori yang di-refer oleh obyek File.
5. String length()
Mengembalikan nilai (dalam bentuk long) berupa panjang byte dari obyek File yang
bersangkutan.
Berikut ini Method untuk memodfikasi obyek File :
1. boolean renameTo(File newName)
Method ini digunakan untuk mengubah nama obyek File menjadi newName.
2. boolean mkdir()
Method ini membuat sebuah direktori yang direpresentasikan oleh obyek File.
3. boolean delete()
menghapus file atau direktori yang dirujuk oleh obyek File. Jika proses penghapusan
berhasil, method ini akan mengembalikan nila true.
Kode program berikut ini membaca file teks dan mencetak setiap baris ke output standar:
Contoh
import java.io.*;
public class ReadFile {
public static void main(String[] args) {
File file = new File("D:/work/ngaco.txt");
try {
//buat sebuah buffered reader untuk baca tiap baris file
BufferedReader in =
new BufferedReader(new FileReader(file));
String s = in.readLine();
while(s != null)
{ System.out.println("read: " +
s); s = in.readLine();
}
in.close();
} catch(FileNotFoundException e1) {
//if this file doesn't exist
System.err.println("file not found: " + file);
} catch(IOException e2) {
//catch any other IO exception
e2.printStackTrace();
}
}
}

27
Pada baris ke-4, dibuat sebuah obyek File dengan menggunakan input dari argumen command
line program. Pada baris ke-9, dibuat sebuah buffered reader yang membungkus sebuah
FileReader. Kode pada baris ini (konstruktor FileReader) akan melemparkan exception
FileNotFoundException jika file
tidak berhasil ditemukan. Blok pada
pengulangan while
membaca setiap baris teks dalam BufferedReader dan mencetaknya ke output
standar. Selanjutnya, BufferedReader ditutup, yang juga akan menutup FileReader.
Kode penanganan exception akan menangkap exception FileNotFoundException
yang dilempar oleh konstruktor FileReader. Beberapa exception I/O lainnya ditulis
untuk menangani exception yang mungkin saja dilempar oleh method readLine dan
close.
Contoh program berikut akan membaca input dari keyboard dan memasukkannya ke
dalam file.
Contoh
import java.io.*;
public class WriteFile{
public static void main(String[] args) {
File file = new File("D:/work/ngaco.txt");
try {
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(new FileWriter(file));
String s;
System.out.print("Masukkan teks di sini");
System.out.println("type ctrl-d

(or

ctrl-z)

to stop.");

while((s = in.readLine()) != null) {


out.println(s);
}
in.close();
out.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}

Seperti halnya pada contoh sebelumnya, pada Contoh ini dibuat sebuah obyek File berdasarkan argumen
command line. Selanjutnya, dibuat sebuah BufferedReader untuk input standar. Program juga membuat
sebuah PrintWriter yang membungkus sebuah FileWriter untuk menuliskan teks ke suatu file.
Selanjutnya, Penggalan kode di atas memberikan pesan kepada pengguna untuk memasukkan teks dan
mengetikkan Ctrl-D untuk mengakhiri program. Selanjutnya, program menuliskan teks input ke dalam
file. Akhirnya, input dan output stream ditutup.

28

2.3 Kelas StringBuffer


Obyek StringBuffer merupakan urutan karakter Unicode yang dapat diubah (mutable). Dianjurkan
untuk menggunakan StringBuffer ketika membuat banyak modifikasi terhadap suatu String.
Berikut ini merupakan bentuk-bentuk konstruktor yang ada di dalam kelas StringBuffer :
public StringBuffer()
Konstruktor ini membuat sebuah obyek StringBuffer yang kosong. Sebagai contoh :

StringBuffer sb1 = new StringBuffer();

public StringBuffer(int capacity)


Konstruktor ini membuat sebuah obyek StringBuffer kosong dengan kapasitas sebesar int.
Sebagai contoh :

StringBuffer sb2 = new StringBuffer(50);

Kode di atas akan membuat sebuah obyek StringBuffer yang memiliki kapasitas 50 karakter.

public StringBuffer(String string)


Konstruktor ini membuat sebuah obyek StringBuffer yang berisikan String tertentu. Sebagai
contoh :

StringBuffer sb3 = new StringBuffer(hello world);

Kode di atas akan membuat referensi obyek bertipe StringBuffer sb3 dan menginisialisasinya
dengan string hello world.
Berikut ini merupakan method-method yang digunakan untuk memodifikasi obyek StringBuffer.

public synchronizedStringBuffer append(String s)


Method ini akan memodifikasi StringBuffer dengan menambahkan String s di ujung buffer.
Kelas StringBuffer juga memiliki bentuk overloaded method untuk tipe parameter boolean,
char, char[], double, float, long, dan Object. Berikut ini merupakan contoh dari
penggunaan StringBuffer.

29

StringBuffer sb = new StringBuffer("set ");


sb.append("point");
System.out.println( sb ); // "set point"

public synchronized StringBuffer insert(int offset,String s)


Method ini memodifikasi StringBuffer dengan menambahkan String s pada lokasi offset
tertentu. Kelas StringBuffer juga memiliki bentuk overloaded method untuk tipe parameter:
boolean, char, char[], double, float, long, dan Object. Sebagai contoh :

StringBuffer sb = new StringBuffer("01234567");


sb.insert(4, "---");
System.out.println( sb ); // "0123---4567"

public synchronized StringBuffer reverse()


Method ini akan membalikkan urutan karakter dari obyek StringBuffer. Sebagai contoh:

StringBuffer sb = new StringBuffer("A man");


System.out.println( sb.reverse() );
2.4

Kelas Wrapper

Kelas Wrapper memiliki dua fungsi utama, yaitu :


a. menyediakan mekanisme untuk membungkus data primitif ke dalam obyek sehingga data primitif
ini dapat menggunakan operasi-operasi yang khusus diperuntukkan untuk obyek, seperti
penambahan ke dalam koleksi atau pengembalian dari sebuah method yang mengembalikan
sebuah obyek;
b. menyediakan satu set fungsi utility untuk data primitif. Sebagian besar dari fungsi-fungsi ini
berhubungan dengan konversi data primitif dari satu bentuk ke bentuk yang lainnya, sebagai
contoh, mengubah data primitif ke dalam bentuk String dan sebaliknya, mengubah data primitif
ke dalam bentuk basis yang berbeda-beda (binary, octal, dan decimal).
Setiap data primitif dalam Java memiliki kelas wrapper yang bersesuaian. Sebagai contoh, kelas wrapper
untuk int adalah Integer, untuk float adalah Float, dan sebagainya. Yang patut diingat adalah
nama dari kelas wrapper suatu data primitif adalah sama dengan tipe data primitif yang bersesuaian
dengan huruf pertamanya dalam bentuk huruf besar, kecuali untuk tipe data char dengan kelas
wrapper Character, dan int dengan kelas wrapper Integer. Tabel di bawah ini menunjukkan tipe
data primitif dan kelas wrapper yang bersesuaian :

30
Data Primitif dan Kelas Wrapper yang Sejenis Beserta Konstruktornya
TIPE DATA
PRIMITIF

KELAS
WRAPPER

ARGUMEN KONSTRUKTOR

boolean

Boolean

boolean atau String

byte

Byte

byte atau String

char

Character

char

short

Short

short atau String

int

Integer

int atau String

long

Long

long atau String

float

Float

float atau String

double

Double

double atau String

Obyek wrapper bersifat immutable, yang berarti bahwa sekali diberikan nilai pada sebuah obyek
wrapper, nilainya tidak dapat diubah.
Semua kelas wrapper, (kecuali Character), menyediakan dua buah konstruktor: satu konstruktor
menggunakan nilai primitif yang bersesuaian, dan konstruktor yang lain menggunakan String yang
merupakan representasi dari data primitif yang akan dibungkus di dalam kelas wrapper.

Integer i1 = new Integer(42);


Integer i2 = new Integer(42);

atau

Float f1 = new Float(3.14);


Float f2 = new Float(3.14);
Untuk kelas wrapper Character, ia hanya menyediakan satu buah konstruktor, yang mengambil nilai
char sebagai argumen. Sebagai contoh :

Character c1 = new Character(c);

Method statik valueOf() yang disediakan di sebagian besar kelas wrapper (kecuali kelas wrapper
Character) memberikan cara lain untuk membuat obyek wrapper. Method ini menggunakan
String yang merepresentasikan data primitif yang bersesuaian sebagai argumen pertama, dan
argumen kedua (jika ada) sebagai basis dari nilai pada argumen pertama. Sebagai contoh:

31

Integer i2 = Integer.valueOf(100);
Integer i3 = Integer.valueOf(101011, 2);

atau

Float f2 = Float.valueOf(3.14f);

Berikut ini method yang biasa digunakan dalam kelas wrapper untuk mengkonversi suatu nilai.

xxxValue()
Ketika ingin mengubah obyek wrapper ke dalam data primitif, dapat digunakan salah satu dari method
xxxValue() ini. Semua method ini tidak menggunakan argumen.

Tabel 16.3
Tabel Method dalam Kelas Wrapper
Method
s = static
Boolean
n = NFE exception
byteValue
doubleValue
floatValue
intValue
longValue
shortValue
parseXxx s,n
parseXxx s,n
(with radix)

Byte

Double

Float

Integer

Long

Float

x
x
x
x
x
x

x
x
x
x
x
x

x
x
x
x
x
x

x
x
x
x
x
x

x
x
x
x
x
x

x
x
x
x
x
x

x
x

x
x

x
x

x
x

x
x

x
x

x
x

x
x

x
x

x
x

x
x

x
x

valueOf s,n
valueOf s,n
(with radix)

x
x

toString
toString s
(primitive)
toString s
(primitive, radix)

x
x

Character

Sebagai contoh :

Integer i2 = new Integer(42);


byte b = i2.byteValue();
short s = i2.shortValue();
double d = i2.doubleValue();

32

atau

Float f2 = new Float(3.14f);


short s = f2.shortValue();
System.out.println(s);

parseXxx () dan valueOf()


Enam buah method parseXxx() (satu untuk setiap tipe wrapper numerik) berhubungan erat dengan
method valueOf() yang ada di semua kelas wrapper bertipe numerik (termasuk kelas wrapper
Boolean). Baik method parseXxx() maupun valueOf() menggunakan String sebagai
argumennya, melemparkan exception NumberFormatException jika bentuk String-nya tidak
benar, dan dapat mengubah obyek String dari basis yang berbeda-beda jika tipe data primitif yang
dirujuknya merupakan satu dari empat bentuk integer (byte, short, int, dan long). Perbedaan
dari kedua method ini adalah sebagai berikut :
a. parseXxx() mengembalikan nilai primitif yang sesuai dengan kelas wrapper-nya;
b. valueOf() mengembalikan sebuah obyek wrapper yang tipenya sama dengan kelas wrapper
yang memanggil method tersebut.
double d4 = Double.parseDouble("3.14");
System.out.println("d4 = " + d4);
Double d5 = Double.valueOf("3.14");

toString()
Setiap kelas wrapper memiliki method toString() yang tidak memiliki argumen dan tidak statik.
Method ini mengembalikan nilai berupa obyek String yang merepresentasikan nilai primitif yang
dibungkus oleh kelas wrapper-nya. Sebagai contoh :

Double d = new Double("3.14");


System.out.println("d = " + d.toString() );

Selain itu, semua kelas wrapper yang bertipe numerik mempunyai versi overloaded dari method
toString() ini. Masing-masing method tersebut mengambil argumen berupa tipe numerik yang
bersesuaian (Double.toString() mengambill nilai double, Long.toString() mengambil
nilai long, dan sebagainya). Sebagai contoh :

System.out.println("d = " + Double.toString(3.14);

33
Kelas wrapper Integer dan Long memiliki bentuk ketiga dari method toString(). Method ini
bertipe statik, argumen pertamanya adalah nilai primitif yang bersesuaian, dan argumen keduanya
merupakan basis. Method ini mengembalikan nilai berupa String yang merepresentasikan nilai
primitif dalam bentuk basis yang sesuai dengan argumen kedua nya. Sebagai contoh :

System.out.println("hex = " + Long.toString(254,16); //"hex = fe"

2.5

Kelas Koleksi

Koleksi merupakan obyek yang merepresentasikan sekumpulan obyek. Obyek yang berada di dalam
sebuah koleksi disebut elemen. Koleksi biasanya berkaitan dengan beragam tipe obyek yang
kesemuanya merupakan turunan dari tipe obyek tertentu.
Collection merupakan sekumpulan obyek yang disebut sebagai elemen. Implementasi
dari Collection ini akan menentukan apakah ada aturan mengenai ordering tertentu dan
apakah duplikasi elemen diperbolehkan di dalamnya.
Set merupakan sebuah koleksi yang tidak memiliki aturan unordered di mana di dalamnya
tidak boleh ada duplikasi elemen.
List merupakan sebuah koleksi yang memiliki aturan ordered
duplikasi elemen diperbolehkan.

di mana di dalamnya

Semua jenis koleksi memiliki referensi ke obyek-obyek dengan tipe Object. Hal ini memungkinkan
semua jenis obyek untuk disimpan di dalam koleksi. Implikasi dari elemen dalam koleksi yang bertipe
Object adalah harus digunakan proses casting yang benar ketika mengambil sebuah elemen dari
dalam koleksi.

<<interface>>
Collection
+
+
+
+
+
+

add(element : Object) : boolean


remove(element : Object) : boolean
size() : int
isEmpty() : boolean
contains(element : Object) : boolean
iterator() : Iterator

<<interface>>
List

<<interface>>
Set

HashSet

+
+
+
+
+
+

add(index : int, element : Object)


remove(index : int) : Object
get(index : int) : Object
set(index : int) : Object
indexOf(element : Object) : int
listIterator() : ListIterator

ArrayList

LinkedList

Interface Collection dan hirarki kelasnya.

Kelas HashSet menyediakan implementasi dari interface Set sementara kelas ArrayList dan
LinkedList menyediakan implementasi bagi interface List.

34
2.5.1 Set
Dalam contoh kode berikut ini, dideklarasikan sebuah variabel (set) dengan tipe Set. Lalu diinisialisasi
variabel ini dengan sebuah obyek HashSet. Selanjutnya ditambahkan beberapa elemen ke dalamnya
dan mencetak isi dari variabel set ke output standar.

Contoh 16.9

import java.util.*;

public class SetExample {


public static void main(String[] args)
{ Set set = new HashSet();
set.add("one");
set.add("second");
set.add(new Integer(4));
set.add("second");

//duplikasi, tidak ditambahkan

set.add(new Integer(4)); //duplikasi,tidak ditambahkan


System.out.println(set);
}
}

2.5.2 List
Dalam contoh kode berikut ini, dideklarasikan sebuah variabel (list) dengan tipe List. Selanjutnya,
variabel ini diinisialisasi dengan sebuah obyek ArrayList. Selanjutnya ditambahkan beberapa
elemen ke dalamnya dan mencetak isi dari variabel list ke output standar. Berbeda dengan contoh
sebelumnya, pada contoh ini berhasil dilakukan penambahan elemen yang terduplikasi.

Contoh 16.10
import java.util.*;
public class ListExample {
public static void main(String[] args)
{ List list = new ArrayList();
list.add("one");
list.add("second");
list.add("3rd");
list.add(new Integer(4));

35
list.add(new Float(5.0F));
list.add("second");

//duplikasi ditambahkan

list.add(new Integer(4));

//duplikasi ditambahkan

System.out.println(list);
}
}

2.5.3 Iterator
Sebuah koleksi dapat diiterasi dengan menggunakan iterator. Interface Iterator memungkinkan
untuk melakukan iterasi secara forward. Pada kasus iterasi di dalam sebuah obyek Set, langkah
iterasinya tidak dapat ditentukan sementara langkah iterasi pada sebuah list adalah bergerak maju.
Sebuah obyek List juga mendukung penggunaan ListIterator yang memungkinkan proses iterasi
secara backward. Kode program di bawah ini menggambarkan penggunaan iterator:

List list = new ArrayList();


Iterator elements = new Iterator();
while(elements.hasNext()) {
System.out.println(elements.next());
}

<<interface>>
Iterator
+
+

hasNext() :
boolean
next() :
Object

+
remove()

<<interface>>
ListIterator
+
+
+
+

hasPrevious() : boolean
previous() : Object
add(element : Object)
set(element : Object)

Hirarki interface Iterator

Method remove digunakan untuk menghapus item di dalam sebuah iterasi. Jika salah satu koleksi tidak
mendukung proses penghapusan ini, maka exception UnsupportedOperationException akan
dilemparkan.

36
ListIterator bergerak satu arah, yaitu begerak maju dengan menggunakan method next() atau
mundur dengan menggunakan method previous(). Jika menggunakan method previous()
setelah menggunakan method next() akan diperoleh elemen sebelum memanggil method next().
Begitu juga sebaliknya.
Method set mengubah elemen yang ditunjuk oleh kursor iterator. Method add menambah elemen
baru ke dalam koleksi pada posisi sebelum kursor iterator. Dengan demikian, jika memanggil method
previous seteleh pemanggilan method add, akan diperoleh elemen yang baru dimasukkan ke dalam
koleksi tersebut. Jika proses penyetingan dan penambahan elemen tidak didukung oleh koleksi yang
bersangkutan, maka UnsupportedOperationException akan dilemparkan.

37
MODUL III
GRAPHICAL USER INTERFACE
Tujuan
-

6.1

Memahami dan menguasai pembuatan dan pengaplikasian Graphical User Interface

Pemahaman Dasar Graphical User Interface


Pada modul-modul sebelumnya, program yang kita buat menggunakan console sebagai

antarmuka. Pada modul kali ini kita akan mempelajari antarmuka grafis yang dikenal dengan
nama Graphical User Interface (GUI). GUI merupakan antar muka grafis yang memfasilitasi
interaksi antara pengguna dengan program aplikasi. Berikut adalah contoh GUI.

Salah satu komponen dalam bahasa pemrograman Java untuk membangun GUI adalah
Swing. Komponen ini didefinisikan di dalam paket javax.swing. Swing diturunkan dari
Abstract Windowing Toolkit dalam paket java.awt. Hirarki dari komponen Swing adalah
sebagai berikut
java.lang.Object

java.awt.Component
java.awt.Container

java.swing.JComponent

38
JComponent adalah superclass dari semua komponen Swing. Sebagian besar fungsionalitas
komponen diturunkan dari superclass ini.
Beberapa komponen utama dalam GUI adalah:
1.

Containers: merupakan wadah yang berfungsi untuk menempatkan komponen-komponen


lain di dalamnya.

2. Canvas.: merupakan komponen GUI yang berfungsi untuk menampilkan gambar atau
untuk membuat program grafis. Dengan canvas, kita bisa menggambar berbagai bentuk
seperti lingkaran, segitiga, dll.
3. User Interface (UI) components: contohnya adalah buttons, list, simple popup menus,
check boxes, text fields, dan elemen lain
4. Komponen pembentuk window: seperti frames, menu bars, windows, dan dialog boxes.
6.2 Komponen-komponen Dasar User Interface dengan Swing
Berikut adalah beberapa komponen dasar antarmuka pengguna (user interface) yang
disediakan oleh Swing:
1. Top level containers: adalah container dasar untuk meletakkan komponen-komponen lain.
Contohnya adalah JFrame, JDialog, dll.
2. Intermediate level containers: merupakan container perantara. Umumnya digunakan hanya
untuk meletakkan atau mengelompokkan komponen-komponen yang digunakan, baik itu
container atau berupa atomic component. Contoh dari Intermediate level container adalah
JPanel (panel).
3. Atomic component: merupakan komponen yang memiliki fungsi khusus. Umumnya
pengguna langsusng berinteraksi dengan komponen ini. Contohnya adalah JButton
(tombol), JLabel (label), JTextField, JTextArea (area untuk menulis teks), dll.
Sekarang kita akan berkenalan dengan Top Level Container, yaitu JFrame. Cobalah
jalankan kode program di bawah:
import javax.swing.*;
public class FrameSederhana{
public static void main(String[]
args){ JFrame f1;
f1 = new JFrame("Ini Frame lho...");
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
; f1.setSize(500,500);
f1.setVisible(true);
}

39
Keluaran kode program di atas adalah frame berikut:

Konstruktor untuk membentuk JFrame adalah JFrame()

atau

JFrame(String

kelas

JFrame

NamaFrame).
Salah

satu

method

yang

sering

digunakan

di

adalah

setDefaultCloseOperation(int ops). Method ini berfungsi untuk mengatur apa


yang akan dilakukan oleh program ketika tombil close di klik. Parameter method tersebut di
antaranya adalah:
1. JFrame.DO_NOTHING_ON_CLOSE: tidak ada satu aktivitas pun yang dilakukan secara
otomatis apabila frame ditutup.
2. JFrame.HIDE_ON_CLOSE: frame hanya disembunyikan, namun secara fisik frame
masih ada di memori sehingga dapat dimunculkan kembali. Merupakan aktivitas default.
3. JFrame.DISPOSE_ON_CLOSE: mengilangkan
tampilan
frame
dari
layar,
menghilangkannya dari memori, dan membebaskan resource yang dipakai.
4. JFrame.EXIT_ON_CLOSE: menghentikan eksekusi program.
Selain JFrame, top level container yang lain adalah JDialog. Berbeda dengan
JFrame, JDialog tidak dibuat berdiri sendiri, melainkan dibuat bersama-sama dengan frame
sebagai parent-nya. Jika frame parent-nya ditutup, maka dialog akan dihapus dari memori.
Kemunculan dialog akan membuat semua input terhadap frame parent-nya akan terblokir
sampai dialog tersebut ditutup. Berikut contoh JDialog.

40

Kode program untuk memunculkan dialog di atas adalah:


import javax.swing.*;
public class Dialog{
public static void main (String[] args){
JFrame f2;
f2 = new JFrame("Ini sebuah frame lho...");
f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
; f2.setVisible(true);
JOptionPane.showConfirmDialog(f2,"ini adalah sebuah contoh
dialog..", "ini judul dialognya tau!",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
}
}

6.3 Layout Manager (Pengaturan Tata Letak)


Layout manager berfungsi untuk menyusun komponen-komponen GUI di atas
container. Penggunaan layout manager memudahkan programer untuk menyusun komponenkomponen GUI dibandingkan dengan menentukan ukuran eksak dan posisi setiap komponen,
sehingga para programmer akan lebih berkonsentrasi terhadap urusan "look and feel" saja.
6.3.1 Border Layout
BorderLayout merupakan default manager untuk ContentPane. Layout ini
menempatkan komponen dengan pendekatan arah mata angin. Komponen-komponen pada
layout ini ditempatkan pada posisi north, south, west, center, east. Coba ketik dan jalankan
kode program berikut, yang akan menampilkan tampilan border layout berikut:

41
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class DemoBorderLayout extends JFrame implements ActionListener{
private JButton tombol[];
private String names[]={"Hilangkan North","Hilangkan South",
"Hilangkan East","Hilangkan West",
"Hilangkan Center"};
private BorderLayout lout;
public DemoBorderLayout(){
super ("Ini Adalah Contoh Border Layout");
Container c = getContentPane();
lout = new BorderLayout (10,10);
c.setLayout(lout);
tombol = new JButton[names.length];
for (int i=0 ; i < names.length;
i++){ tombol[i] = new
JButton(names[i]);
tombol[i].addActionListener(this);
}
c.add(tombol[0], BorderLayout.NORTH);
c.add(tombol[1], BorderLayout.SOUTH);
c.add(tombol[2], BorderLayout.EAST);
c.add(tombol[3], BorderLayout.WEST);
c.add(tombol[4], BorderLayout.CENTER);
setSize (500,300);
}
public void actionPerformed(ActionEvent e){
for(int i=0; i<button.length;i++){
if(e.getSource()==button[i])
button[i].setVisible(false); else
button[i].setVisible(true);
layout.layoutContainer(getContentPane())
;
}
}
public static void main(String[] args)
{ DemoBorderLayout dbl = new DemoBorderLayout();
dbl.setVisible(true);
dbl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
;
}
}

6.3.2 Flow Layout


FlowLayout adalah layout yang menyusun komponen dari kiri ke kanan, selanjutnya
ke baris berikutnya. Jika ukuran windows diperbesar ukuran komponen pada FlowLayout
tidak berubah.
Method-method penting dari FlowLayout adalah sebagai berikut :

42
a. setAlignment(position_CONSTANT): adalah method untuk menentukan posisi
layout.

Nilai

positition_CONSTANT

dapat

berupa

FlowLayout.LEFT,

FlowLayout.CENTER, atau FlowLayout.RIGHT, yang masing-masing mengatur


posisi rata kiri, rata tengah, atau rata kanan.
b. layoutContainer(container): method untuk melakukan update container.

Coba pelajari kode program berikut:


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class FlowLayoutTest extends JFrame {
public FlowLayoutTest(){
super("Contoh Flow Layout");
FlowLayout lay = new FlowLayout();
lay.setAlignment(FlowLayout.RIGHT);
lay.setVgap(25);//mengatur jarak vertikal antar komponen
lay.setHgap(25);//mengatur jarak horisontal antar komponen
Container c = getContentPane();
c.setLayout(lay);
JButton t1 = new JButton("Tombol 1");
JButton t2 = new JButton("Tombol 2");
JButton t3 = new JButton("Tombol 3");
JButton t4 = new JButton("Tombol terpanjang no
4");
JButton t5 = new JButton("Tombol 5");
JButton t6 = new JButton("Tombol 6");
c.add(t1);
c.add(t2);
c.add(t3);
c.add(t4);
c.add(t5);
c.add(t6);
}
public static void main(String[] args){
FlowLayoutTest flt = new FlowLayoutTest();
flt.setSize(500, 200);
flt.setVisible(true);
flt.addWindowListener(new WindowAdapter(){
public void windowsClosing(WindowEvent e){
System.exit(0);
}
});
}
}

Output program di atas adalah sebagai berikut

43
6.3.3 Box Layout
Layout jenis ini meletakkan komponen-komponen dalam satu baris atau satu kolom
saja.
Pelajari contoh berikut.
import javax.swing.*;
import java.awt.*;
public class ContohBoxLayout extends JFrame{
public ContohBoxLayout(){
super("Contoh Box Layout Dalam Satu Baris");
Container c = getContentPane();
Box box = new Box(BoxLayout.X_AXIS);
JTextArea t1 = new JTextArea("Praktikum java",10,15);
JButton b1 = new JButton("Tombol 1");
JButton b2 = new JButton("Tombol 2");
JTextArea t2 = new JTextArea("Ilmu komputasi",10,15);
box.add(new JScrollPane(t1));
box.add(b1);
box.add(b2);
box.add(new JScrollPane(t2));
c.add(box);
}
public static void main(String[]
args){ ContohBoxLayout cbl = new
ContohBoxLayout(); cbl.setSize(300, 300);
cbl.setVisible(true);
cbl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Keluarannya adalah

44
6.3.4 Card Layout
Card Layout menampilkan container-container/panel-panel seperti tumpukan kartu.
Hanya satu container yang akan tampil untuk satu waktu. Pelajari kode berikut:
import javax.swing.*;
import java.awt.*;
public class TestCardLayout extends
JFrame{ JPanel p1;
JPanel p2;
JRadioButton pil1, pil2, pil3;
ButtonGroup radioGroup;
JTextArea g;
public TestCardLayout(){
super("Uji Coba Card Layout");
p1 = new JPanel();
p2 = new JPanel();
pil1 = new JRadioButton("Pilihan 1",true);
pil2 = new JRadioButton("Pilihan 2",false);
pil3 = new JRadioButton("Pilihan 3",false);
p1.add(pil1);
p1.add(pil2);
p1.add(pil3);
radioGroup = new ButtonGroup();
radioGroup.add(pil1);
radioGroup.add(pil2);
radioGroup.add(pil3);
g = new JTextArea("text area");
p2.add(g);
JTabbedPane tab = new JTabbedPane();
tab.add(p1,"Tab dengan Radio Button");
tab.add(p2,"Tab dengan Text Area");
Container c = getContentPane();
c.add(tab, BorderLayout.NORTH);
}
public static void main (String[] args){ TestCardLayout
tcl = new TestCardLayout();
tcl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
; tcl.setSize(500,100);
tcl.setVisible(true);
}
}

Hasil dari program di atas adalah tampilan berikut

45
6.3.5 Grid Layout
Grid layout merupakan layout manager berbentuk grid. Semua komponen dalam layout
ini memiliki ukuran yang sama. Konstruktor GridLayout adalah sebagai berikut.
a. GridLayout(rows, columns, hGap, vGap). Konstruktor ini mendefinisikan
jumlah baris, kolom, dan ukuran gap horisontal/vertikal antar elemen dalam pixel.
b. GridLayout(rows, columns). Sama halnya dengan konstruktor pertama, namun
dengan nilai default hGap dan vGap sama dengan 0.
Pelajari kode program berikut:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class GridLayoutTest extends JFrame{
private JButton tombol[];
private String m[] = {"Satu","Dua","Tiga","Empat","Lima","Enam"};
private Container c;
private GridLayout g;
public
GridLayoutTest(){ super("Demonst
rasi GridLayout"); g = new
GridLayout(2,3,5,5);
c = getContentPane();
c.setLayout(g);
tombol = new JButton[names.length];
for(int i = 0; i<names.length;i++){
tombol[i] = new JButton(m[i]);
c.add(button[i]);
}
setSize(300,300);
show();
}
public static void main(String[] args)
{ GridLayoutTest glt = new
GridLayoutTest(); glt.addWindowListener(
new WindowAdapter(){
public void windowsClosing(WindowEvent
e){ System.exit(0);
}
});
}
}

46
Output program tersebut adalah tampilan berikut

6.3.6 Grid Bag Layout


Grid bag layout adalah pengaturan layout yang dapat digunakan untuk meletakkan
komponen secara bebas. Setiap komponen dapat menempati ukuran yang berbeda dengan
komnponen lainnya.
Setiap komponen dapat menempati lebih dari satu grid.
Berikut ini langkah-langkah untuk menggunakan GridBagLayout :
1. Gambarkan terlebih dahulu desain GUI di kertas.
2. Bagi GUI tersebut ke dalam beberapa grid mulai dari baris dan kolom 0. Hal ini dilakukan
untuk menempatkan komponen di posisi yang benar.
3. Buat sebuah objek GridBagConstraints, untuk menentukan bagaimana komponenkomponen ditempatkan.
4. Kemudian, definisikan variabel instance seperti berikut :
- gridx- kolom.
- gridy- baris.
- gridwidth- jumlah kolom yang dialokasikan.
- gridheight - jumlah baris yang dialokasikan.
- weightx- ukuran ruang horisontal.
- weighty- ukuran ruang vertikal.
5. Inisialisasi nilai weight ke nilai positif (nilai default adalah 0).
6. Definisikan instance variable fill dari GridBagConstraints ke NONE (default),
VERTICAL, HORIZONTAL, atau BOTH.

47
7. Definisikan Instance variable anchor ke NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH,
SOUTHWEST, WEST, NORTHWEST, atau CENTER (nilai default).
8. Masukkan komponen dan GridBagConstraints ke method setConstraints milik
kelas GridBagLayout.
gbLayout.setConstraints(c, gbConstraints);
9. Setelah constraints ditentukan, tambahkan komponen ke ContentPane.
container.add(c);
Untuk lebih memahami penggunaan GridBagLayout, pelajari contoh kode program berikut
ini.
import javax.swing.*;
import java.awt.*;
public class UjiGbl{ JFrame
f; GridBagLayout gbl;
GridBagConstraints c;
public UjiGbl(){
f = new JFrame("Contoh GridBagLayout");
gbl = new GridBagLayout();
c = new GridBagConstraints();
f.getContentPane().setLayout(gbl);
c.fill =
GridBagConstraints.HORIZONTAL;
JButton j1 = new JButton(" 1 ");
c.weightx = 2;//ukuran ruang horizontal
c.gridx = 0; // menempati kolom 0
c.gridy = 0; // menempati baris 0
gbl.setConstraints(j1,c);
f.getContentPane().add(j1);
JButton j2 = new JButton(" 2 ");
c.gridx = 1; // menempati kolom 1
c.gridy = 0; // menempati baris 0
gbl.setConstraints(j2,c);
f.getContentPane().add(j2);
JButton j3 = new JButton(" 3 ");
c.ipady = 30;//tingginya ditambah
c.gridwidth = 2;// tombol menempati dua kolom
c.gridx = 0; // menempati kolom 0
c.gridy = 1; // menempati baris 1
gbl.setConstraints(j3,c);
f.getContentPane().add(j3);
JButton j4 = new JButton(" 4 ");
c.ipady = 50;//tingginya ditambah
c.gridwidth = 1;// tombol menempati satu kolom
c.gridx = 0; // menempati kolom 0
c.gridy = 2; // menempati baris 2
gbl.setConstraints(j4,c);
f.getContentPane().add(j4);
JButton j5 = new JButton(" 5 ");
c.ipady = 0;//tingginya normal
c.gridwidth = 1;// tombol menempati satu kolom
c.gridx = 1; // menempati kolom 1
c.gridy = 2; // menempati baris 2
c.anchor = GridBagConstraints.SOUTH;

48

gbl.setConstraints(j5,c);
f.getContentPane().add(j5);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
public static void main(String[]
args){ UjiGbl ugbl = new
UjiGbl();
}
}

Output dari program tersebut adalah:

6.3.7 Spring Layout


Ini adalah pengaturan tata letak yang sangat fleksibel, dan dapat meniru fitur-fitur
layout manager yang lain. Pada layout ini, ukuran komponen dapat berubah-ubah secara
ototmatis jika ukuran window diubah. Pelajari contoh kode program berikut:
import javax.swing.JTextField;
importjavax.swing.SpringLayout;
javax.swing.JLabel;
import
import
java.awt.Container;
import javax.swing.JFrame;
public class
ContohSpring{ JFrame f;
Container c;
SpringLayout l;
JLabel label;
JTextField t;
public ContohSpring(){
f = new JFrame("Demo SpringLayout");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
; c = f.getContentPane();
l = new SpringLayout();
c.setLayout(l);
label = new JLabel("Ini label");
t = new JTextField("Tuliskan Teks", 20);
c.add(label);
c.add(t);

49

//mengatur batasan (constraint) untuk label sehingga berada


//di posisi (20,10)
l.putConstraint(SpringLayout.WEST,label,20,SpringLayout.WEST, c);
l.putConstraint(SpringLayout.NORTH,label,10,SpringLayout.NORTH, c);
//mengatur batasan untuk text field supaya posisinya di
//(sisi_kanan_label+10,10)
l.putConstraint(SpringLayout.WEST,t,10,SpringLayout.EAST, label);
l.putConstraint(SpringLayout.NORTH,t,10,SpringLayout.NORTH, c);
//mengatur posisi content pane: sisi kanannya 5 pixel di luar sisi
//kanan textField dan sisi kirinya 5 pixel di bawah sisi bawah
//komponen terpanjang
l.putConstraint(SpringLayout.EAST,c,5,SpringLayout.EAST, t);
l.putConstraint(SpringLayout.SOUTH,c,5,SpringLayout.SOUTH,
t); f.pack();
f.show();
}
public static void main(String[] args){
ContohSpring cs = new ContohSpring();
}
}

6.4 Event Handler


Event adalah peristiwa atau kejadian yang dibangkitkan atau distimulasi oleh pengguna
terhadap GUI. Untuk mendeteksi dan menangani apa yang dilakukan oleh pengguna terhadap
GUI, diperlukan suatu mekanisme yang disebut Event Handling. Mekanisme event handling
pada bahasa Java ditangani oleh event handling component, yang terbagi menjadi dua bagian,
yaitu event listener dan event handler.
Ilustrasi dari mekanisme event handling adalah sebagai berikut. Misalkan suatu button
di tekan. Maka terciptalah suatu objek event, yaitu kejadian ditekannya button. Kejadian atau
event itu ditangkap oleh event listener. Selanjutnya event tersebut harus ditangani oleh program
dengan memanggil method event handler. Method tersebut berisi blok kode program yang
melakukan suatu proses sebagai respon atas terjadinya event tersebut.
Sebuah objek event mempunyai sebuah kelas event sebagai acuan bagi tipe datanya.
Kelas event memiliki akar hirarki yaitu kelas EventObject. Kelas ini berada di package
java.util. Kelas AWTEvent merupakan turunan dari kelas EventObject. Kelas AWTEvent
didefinisikan dalam package java.awt.
Berikut ini adalah daftar kelas yang merupakan turunan dari kelas AWTEvent.
1. ComponentEvent: turunan dari AWTEvent, dijalankan ketika sebuah komponen
dijalankan, di resize, dibuat terlihat, atau disembunyikan.

50
2. InputEvent: turunan dari kelas ComponentEvent dan Abstract root class Event
untuk semua komponen input.
3. KeyEvent: turunan dari kelas InputEvent, dijalankan saat sebuah key pada keyboard
ditekan, dilepas, atau diketikkan.
4. ItemEvent: turunan dari kelas AWTEvent, dijalankan ketika sebuah item dipilih seperti
pada combo box dan list.
5. ActionEvent: turunan dari kelas AWTEvent, dijalankan ketika sebuah tombol ditekan,
melakukan double click pada daftar item, atau memilih menu.
6. MouseEvent: turunan dari kelas InputEvent, dijalankan ketika pengguna melakukan
sesuatu terhadap mouse, seperti, ditekan, dilepas, diklik, masuk atau keluar window, di
drag, dll.
7. TextEvent: turunan dari kelas AWTEvent, dijalankan ketika sebuah nilai text berubah
8. WindowEvent: turunan dari kelas ComponentEvent, dijalankan ketika pengguna
melakukan sesuatu terhadap window, seperti dibuka, ditutup, diaktifkan, atau dinonaktifkan.
Event Listener adalah kelas yang mengimplemetasi interface Listener. Beberapa event
listener yang sering digunakan adalah:
1. ActionListener : listener yang bereaksi jika terjadi event pada mouse atau keyboard.
2. MouseListener: listener yang bereaksi atas event yang terjadi pada mouse.
3. MouseMotionListener: menyediakan beberapa method untuk memantau perubahan
mouse seperti drag atau perpindahan mouse.
4. WindowListener: listener yang bereaksi atas event yang terjadi pada window.
Untuk lebih jelasnya, pelajari dan jalankan kode program berikut:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class EventHandling{ private
JButton b1, b2; private
JTextField t1, t2; private
JPanel panel1,panel2; private
JLabel l1, l2;
private JFrame f;
private double a, b, c;
private String konv1 = "Suhu dalam Celcius adalah...";
private String konv2 = "Suhu dalam Fahrenheit adalah...";
public EventHandling(){
f = new JFrame("Konversi Suhu");
b1 = new JButton("Konversi ke Fahrenheit");
b2 = new JButton("Konversi ke Celcius");

51
l1
l2
t1
t2

=
=
=
=

new
new
new
new

JLabel("Suhu dalam Celcius");


JLabel("Suhu dalam Fahrenheit");
JTextField(10);
JTextField(10);

}
public void
hitungSuhu(){ panel1 =
new JPanel(); panel2 =
new JPanel();
b1.addActionListener(new FahrenheitHandler());
b2.addActionListener(new CelciusHandler());
panel1.add(l1);
panel1.add(t1);
panel1.add(b1);
panel2.add(l2);
panel2.add(t2);
panel2.add(b2);
JTabbedPane tab = new JTabbedPane();
tab.add(panel1,"Celcius ke Fahrenheit");
tab.add(panel2,"Fahrenheit ke Celcius");
f.getContentPane().add(tab, BorderLayout.NORTH);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
; f.setSize(600,100);
f.setVisible(true);
}
private class FahrenheitHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
a = Double.parseDouble(t1.getText()); b = a*1.8+32;
JOptionPane.showConfirmDialog(null,konv2+b,"Hasil",
JOptionPane.OK_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE)
;
}catch(Exception j){
JOptionPane.showConfirmDialog(null,"Masukkan Angka!","Error",
JOptionPane.OK_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE)
;
}
}
}
private class CelciusHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
a = Double.parseDouble(t2.getText());
b = (a-32)/1.8;
JOptionPane.showConfirmDialog(null,konv1+b,"Hasil",
JOptionPane.OK_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE)
;
}catch(Exception
j){ JOptionPane.showConfirmDialog(null,"Masukkan
Angka!","Error",
JOptionPane.OK_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE)
;
}
}
}
public static void main(String[] args){
EventHandling eh = new EventHandling();
eh.hitungSuhu();
}
}

52
Hasil dari kode di atas adalah program untuk mengkonversi suhu dengan tampilan berikut:

Latihan
Buatlah program berbasis GUI yang menerima inputan dua buah bilangan dan dapat melakukan
operasi penjumlahan, pengurangan, perkalian, dan pembagian dua bilangan tersebut, lalu
menampilkan hasilnya!

53
MODUL IV
NETBEANS DAN JAVA DATABASE CONNECTION

Tujuan
-

Mengetahui kegunaan dan mampu menggunakan netbeans

Memahami konsep Java Database Connection dan Java Applet, dan mampu
mengimplementasikannya

7.1

Netbeans
Netbeans adalah suatu perangkat lunak yang mempunyai fungsi sebagai platform

framework Java untuk aplikasi desktop dan sebagai integrated development environment (IDE)
untuk membangun aplikasi yang menggunakan java, javaScript, PHP, C, C++, dan lain-lain.
Netbeans dapat diunduh secara gratis dari website www.netbeans.org. Pada praktikum kali ini
digunakan Netbeans IDE 6.9.1 dan JDK 1.6.0_22.
Dalam netbeans, semua perancangan dan pemrograman dibuat dalam kerangka Project.
Project merupakan sekumpulan file yang dikelompokkan di dalam suatu kesatuan. Untuk
mennguanakan Netbeans dalam pemrograman Java kita buat dulu project. Langkah-langkahnya
adalah:
1. Buka netbeans
2. Lalu klik menu file > new project

3. Setelah kotak dialog new project terbuka, pada kolom categories pilih Java, lalu pada
kolom projects pilih Java Application. Kemudian klik next.

54

4. Maka akan muncul tampilan seperti di bawah. Lalu klik Finish

Project otomatis
telah memiliki main
class dengan nama
yang sama dengan

55
5. Setelah klik Finish, akan tampil tampilan berikut

Jendela kiri atas adalah project view, jendela kiri bawah adalah members view, jendela
kanan atas adalah work area yaitu tempat kita mengetikkan kode program Java, dan jendela
kanan bawah adalah description

yaitu jendela untuk melihat hasil compile dan hasil

running program.
6. Jika kita ingin membuat kelas caranya adalah klik kanan pada package aplikasijava, lalu
pilih new, kemudian pilih java class, seperti pada gambar berikut

7. Setelah itu akan muncul jendela seperti dibawah. Ubah class name sesuai nama kelas yang
anda inginkan. Pada contoh di bawah, nama kelasnya adalah Mahasiswa.

56

Lalu klik Finish.


Latihan
1. Coba ketik kode berikut di kelas Mahasiswa. Setelah itu tekan F9 untuk meng-compile

2. Pada kelas main.java buatlah kode program untuk menampilkan tulisan


Nama Mahasiswa

: Ali Kobra

NIM

: 1500661

Fakultas

: Sains

Catatan: untuk running program tekan Shift+F6

57
7.1.1

Membuat GUI dengan Netbeans


Sekarang mari kita pelajari cara membuat GUI dengan menggunakan Netbeans.

Langkah pertama, pada jendela project view, klik kanan pada project AplikasiJava, lalu pilih
menu > Java Package. Perhatikan gambar di bawah

Buat Package baru dengan nama AplikasiGUI. Setelah package terbentuk, klik kanan pada
nama package, lalu pilih new > JFrameForm seperti pada gambar berikut

Buat kelas GUI yang bernama FormIsian. Tampilan di Netbeans akan menjadi seperti
gambar berikut

58

ini JFrame (Work Area)

Untuk memulai membuat interface, drag komponen Label dari Swing Containers ke dalam
work area. Lalu drag komponen-komponen lain seperti Text Field, Button, dan Text Area
sehingga terbentuk GUI seperti gambar di bawah

Setelah membuat kelas GUI, kita akan membuat action dari tombol masukkan. Untuk
menyisispkan action, klik kanan pada tombol masukkan, lalu pilih Events > Action >
actionPerformed. Maka akan muncul jendela berikut

59

Di jendela inilah kita akan menuliskan kode program action dari tombol Masukkan. Di dalam
blok method jButton1ActionPerformed(), tuliskan kode berikut:

Compile dan run kelas FormIsian.java, maka akan keluar tampilan GUI berikut:

60
7.2

Java Database Connectivity (JDBC)


Java Database

Connectivity (JDBC)

adalah suatu fungsi

dalam

java yang

menghubungkan aplikasi yang dibangun dengan menggunakan bahasa Java dengan database.
JDBC adalah versi ODBC yang dibuat oleh Sun Microsystem. JDBC dibangun dengan Java
API dapat digunakan untuk lintas platform dan didasarkan pada X/Open SQL Level Interface.
Dengan menggunakan JDBC API, database dari vendor-vendor ternama seperti Oracle,
Sysbase, dan lain-lain dapat diakses. Kita dapat melakukan pengiriman perintah-perintah SQL
RDBMS. Kelas-kelas serta interface-interface JDBC API dapat diakses dalam package java.sql
(core API) atau javax.sql(standard extension API).
Untuk dapat mengakses database di server kita membutuhkan driver. Setiap server dari
vendor yang berbeda mempunyai driver yang berbeda-beda. Driver dapat diunduh di alamat
http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
Pada Netbeans 6.9.1 sudah terdapat beberapa driver yang dapat digunakan langsung. Di
antaranya ialah Java DB, MySQL, dan PostgreSQL. Untuk menggunakannya, tinggal klik
kanan pada folder library pada project yang dibuat, lulu pilih driver yang akan kita pakai.
Nama driver berbeda-beda untuk setiap database yang digunakan. Berikut adalah namanama driver untuk database:
-

sun.jdbc.odbc.jdbcOdbcDriver (untuk MS Access)

oracle.jdbc.driver.OracleDriver (untuk Oracle)

org.gjt.mm.mysql.Driver (untuk MySQL)

Sintaks yang digunakan untuk menginisialisasi driver adalah


Class.forName(nama driver);
Setiap database mempunyai nama URL, di antaranya:
-

jdbc:odbc:nama_database (untuk MS Access)

jdbc:oracle:thin:localhost:1521:ORCL (untuk Oracle)

jdbc:mysql://localhost/nama_database (untuk MySQL)

Sintaks yang digunakan untuk koneksi ke data base menggunakan URL adalah
Connection koneksi = DriverManager.getConnection(nama_URL,userID,password)

7.2.1

Menggunakan Database
Kelas pada Java yang digunakan untuk mengeksekusi suatu query adalah Statement.

Kelas ini digunakan setelah menginisialisasi variabel koneksi pada Connection. Misalkan
variabel koneksinya adalah koneksi, maka
Statement stm = koneksi.createStatement();
Suatu query diakhiri dengan cara menutup variabel statement yang sudah diinisialisasi.
Misalkan variabel statementnya adalah stm, maka sintaks untuk menutup variabel statement
tersebiut adalah stm.close().

61
Setelah variabel statement selesai diinisialisasi, selanjutnya kita inisialisasi variabel
ResultSet yang akan digunakan untuk menyimpan suatu baris record pada database.
Artinya, variabel ini adalah pointer yang akan menunjuk suatu baris pada table. Sintaksnya
adalah
ResultSet variabelSet;
Untuk mengakhiri koneksi ke database gunakan sintaks berikut (misalkan nama
variabel koneksinya adalah koneksi)
Koneksi.close()
7.2.2

Contoh kasus
Mari kita lihat contoh kasus penggunaan database. Database yang akan digunakan pada

praktikum kali ini adalah Oracle Database 10g Express Edition yang bisa diunduh di alamat:
http://www.oracle.com/technetwork/database/express-edition/downloads/102xewinsoft090667.html
Ada tiga versi untuk oracle express edition, untuk Windows formatnya EXE, untuk
Linux turunan Debian Formatnya DEB, untuk Linux turunan Redhat formatnya RPM. Di
praktikum ini akan digunakan untuk versi Windows.
Berikut langkah-langkah untuk menginstal Oracle Database 10g Express Edition. Buka
file installernya, setelah itu tunggu sampai proses selesai :

62
Setelah persiapan instalalsi selesai, maka akan keluar dialog ini :

Setelah itu klik next :

Accept untuk lisensinya, setelah itu klik next lagi

63
Setelah itu tentukan lokasi untuk tempat file instalasi Oracle XE tersebut, setelah itu klik next :

Ketikkan password yang anda inginkan sebagai password untuk user, setelah itu klik next :

Gambar di atas adalah tampilan hasil instalasi, dan jangan lupa dicatat untuk portnya, setelah
itu klik INSTALL :

64

Tunggu sampai proses instalasi selesai

Setelah selesai ceklis Launch the database homepage dan klik finish, maka akan keluar
browser yang membuat homepage database oracle express edition :

Setelah itu login menggunakan user SYSTEM dan password yang tadi dimasukkan saat proses
instalasi. Selesai.

65
Sekarang login ke Oracle XE lewat menu :

Setelah browsernya tampil, masukkan username SYSTEM dan password sesuai dengan
password yang anda buat pada saat instalasi :

Setelah itu masuk ke bagian ADMINISTRATOR > DATABASE USERS > CREATE
USER :

Setelah itu buat user baru, otomatis pula akan terbuat schema baru :

66

Setelah selesai, tekan tombol CREATE , dan sekarang kita sudah berhasil membuat user
sekaligus schema baru di Oracle XE dengan nama schema belajar. Sekarang anda bisa login
pada awal halaman website Oracle XE tadi dengan user belajar dan password yang anda
masukkan.
Setelah itu anda log out, lalu coba login lagi dengan username belajar dan password
yang anda buat tadi.

67
Setelah masuk, pilih object browser.

Kita akan membuat tabel database. Tekan tombol Create

68
Lalu pilih Table

Kemudian pada menu Columns. Beri nama tabel database yang akan kita buat. Misalkan nama
database-nya adalah MAHASISWA. Maka ketikkan MAHASISWA pada kolom Table Name.
Selanjutnya beri nama kolom pada Column Name. Isikan nama kolomnya yaitu nama,
Nim, dan fakultas. Tipe data diatur pada menu type. Masukkan VARCHAR2 sebagai tipe
datanya. Lalu pada Scale kita bisa mengatur panjang maksimum kolom yang kita buat.
Misalkan untuk kolom nama panjang maksimumnya 25, kolom Nim panjang
maksimumnya 15, dan kolom fakultas panjang maksimumnya 25.

69
Selanjutnya pada menu Primary key kita pilih Nim sebagai primary key. Ini akan
mengakibatkan Nim tertentu hanya bisa dimiliki oleh satu orang (unik).

Selanjutnya menu Foreign Key bisa dilewati. Menu constraints juga bisa dilewati, karena
dengan memilih primary key otomatis akan terbentuk constraints. Lalu masuk ke menu
confirm. Akan tampil tampilan berikut

Setelah itu, klik tombol Create. Maka akan muncul tampilan yang memperlihatkan tabel
database MAHASISWA

70

Sekarang kita lakukan setting Oracle di Netbeans. Tapi sebelumnya anda harus punya
driver oraclenya terlebih dahulu. Tapi tak perlu khawatir karena waktu anda menginstall oracle
xe,

otomatis

driver

nya

ikut

terinstal.

Coba

lihat

di

folder

C:oraclexeapporacleproduct10.2.0serverjdbclib, disana ada file ojdbc14.jar


yang digunakan sebagai drivernya.
Sekarang jalankan Netbeans, lalu masuk ke bagian SERVICE :

Setelah itu klik kanan treeitem Drivers lalu pilih New Driver :

71

Setelah keluar dialog New JDBC Driver, tinggal klik tombol Add, lalu masukkan file
ojdbc14.jar tadi, lalu ubah Driver Classnya jadi oracle.jdbc.driver.OracleDriver, kalau
nama kelasnya terserah :

Setelah selesai klik tombol OK, dan sekarang driver Oracle sudah terinstall di Netbeans ,
tinggal kita buat koneksi ke schema BELAJAR yang sebelumnya kita buat :

Caranya klik kanan nama driver oraclenya, misalkan namanya Oracle OCI. Setelah itu itu klik
Connect Using :

72
Setelah itu isi atributnya seperti dibawah ini :

Untuk host nya gunakan localhost, dan untuk SID kita pakai XE karena Kita memakai Oracle
Express Edition, sedangkan portnya 1521, soalnya pada saat proses instalasi Oracle XE
menggunakan port ini, untuk username dan password kita gunakan username dan password
yang telah kita buat sebelumnya.
Setelah itu klik tombol OK :

Pilih schema BELAJAR, karena kita menggunakan user BELAJAR,setelah itu klik OK :

73

Selesai.
Selanjutnya klik kanan pada folder Tables lalu pilih create tables

Akan muncul tampilan berikut. Isi Table Name dengan nama tabel yaitu MAHASISWA. Lalu
klik Add Column.

Buat kolom-kolom nama, Nim, dan fakultas seperti gambar berikut:

74

75

Selanjutnya pada project AplikasiJava yang sudah kita buat sebelumnya, lakukan
perubahan pada kelas FormIsian yaitu menambahkan tombol Tampilkan, menghapus
textArea dari panel, dan menambahkan komponen JTable dengan nama jTable1. Buat
desainnya seperti gambar di bawah ini:

Setelah itu tambahkan driver Oracle Database 10g Express Edition dengan cara klik kanan pada
folder Libraries, lalu pilih add Library, maka akan muncul tampilan berikut

76

Tekan tombol Create. Akan muncul dialog berikut:

Isikan nama library, misalkan namanya JDBC-Oracle. Klik OK.


Setelah muncul tampilan berikut, klik Add JAR/Folder

77

Setelah muncul jendela Browse JAR/Folder, cari tempat di mana driver-nya disimpan, misalkan
disimpan di
C:oraclexeapporacleproduct10.2.0serverjdbclibojdbc14.jar.

78
Setelah itu klik tombol Add JAR/Folder. Kemudian klik OK.
Selanjutnya buat package baru dan diberi nama Data dan buat kelas baru dalam
package tersebut dan diberi nama DataBase.java. Tuliskan kode berikut dalam kelas
tersebut:
package Data;
import javax.swing.JOptionPane;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Connection;
public class DataBase {
driver disimpan
private String dbuser = Tempat
"belajar";
private String dbpaswd = "belajar123";
private Statement stm = null;
private Connection con = null;
private String err = "Komunikasi Error";
private ResultSet rss = null;
public DataBase(){
// load driver Oracle
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(Exception e){
JOptionPane.showMessageDialog(null,""+e.getMessage(),"Driver
Error",JOptionPane.WARNING_MESSAGE);
}
try{
con =
DriverManager.getConnection("jdbc:oracle:oci8:@localhost:1521:XE",dbuser,
dbpaswd);
}catch(Exception e){
JOptionPane.showMessageDialog(null,"Error:"+e.getMessage(),err,
JOptionPane.WARNING_MESSAGE);
}
}
public ResultSet getData(String SQLString){
try{
stm = con.createStatement();
rss = stm.executeQuery(SQLString);
}catch(Exception
e){ JOptionPane.showMessageDialog(null,"Err
or :"
+e.getMessage(),err,JOptionPane.WARNING_MESSAGE);
}
return rss;
}
public int query(String SQLString){
int i = 0;
try{
stm = con.createStatement();
stm.executeUpdate(SQLString);
i = 1;
}catch(Exception
e){ JOptionPane.showMessageDialog(null,"err
or: "
+e.getMessage(),err,JOptionPane.WARNING_MESSAGE);
}
return i;
}
}

79

Setelah membuat kelas DataBase.java, selanjutnya modifikasi kelas Mahasiswa.java


dengan menambahkan dua method saveMahasiswa dan getMahasiswa (tambahkan
import java.sql.ResultSet dan import Data.DataBase). Berikut sintaks untuk
kedua method tambahan tersebut
public void
saveMahasiswa(){ DataBase d1
= new DataBase(); int i;
String s = "INSERT INTO MAHASISWA VALUES('"+this.nama+"','"+this.Nim+"',
'"+this.fakultas+"')";
i = d1.query(s);
if(i==1){
javax.swing.JOptionPane.showMessageDialog(null,"insert berhasil");
}
else{javax.swing.JOptionPane.showMessageDialog(null,"insert gagal");}
}
public ResultSet
getMahasiswa(){ ResultSet rs =
null;
DataBase db1 = new DataBase();
String str ="Select * From MAHASISWA";
rs = db1.getData(str);
return rs;
}

Setelah itu, perlu ditambahkan action listener pada button di kelas FormIsian.java untuk
menangkap event yang terjadi pada tombol Masukkan dan Tampilkan. Sintaks kode action
listener untuk tombol Masukkan adalah:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{ Mahasiswa m = new Mahasiswa(jTextField1.getText(),
Integer.parseInt(jTextField2.getText()),jTextField3.getText());
m.saveMahasiswa();
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
}

Sedangkan sintaks kode action listener untuk tombol Tampilkan adalah:


private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)
{ Mahasiswa m = new Mahasiswa();
ResultSet rs = null;
rs = m.getMahasiswa();
int i = 0 ;
try{
while(rs.next()){
jTable1.setValueAt(rs.getString("nama"),i,0);
jTable1.setValueAt(rs.getString("Nim"),i,1);
jTable1.setValueAt(rs.getString("fakultas"),i,2)
; i++;
}
rs.close();
}catch(SQLException ex){
Logger.getLogger(FormIsian.class.getName()).log(Level.SEVERE,null,ex);
}
}

80
Selanjutnya lakukan deploy aplikasi ini dengan mengklik Run > Clean and Build Project atau
tekan Shift + F121. Berikut output dari program tersebut:
Memasukkan data

Menampilkan data:

Modul Java Politeknik Gajah Tunggal

81

Latihan
1. Buatlah sebuah kelas yang dinamakan CalculatorGUI yang mengimplementasikan disain
GUI seperti di bawah ini :

Terdapat text field pada bagian atas frame (diguanakan untuk menampilkan hasil
perhitungan) dan sebuah kumpulan tombol yang berukuran 4 x 4 (16 buah). sebuah label

juga dapat digunakan untuk menampilkan hasil perhitungan.


(sumber: 2)
2. Buatlah sebuah database untuk menyimpan data-data karyawan sebuah perusahaan, yang
terdiri dari: NIP, Nama, Alamat, Tempat Lahir, Tanggal Lahir, Jabatan, Gaji.
Lalu buatlah GUI untuk menampilkan seluruh data karyawan tersebut.

Modul Java Politeknik Gajah Tunggal

82
MODUL 4
GUI dan Database My-SQL

1. Sebelumnya kita install dulu netbeans dengan jdk 1.5.0_7 atau versi diatasnya.
2. lalu kalau sudah terinstall, pilih File->New Project.
Disini kita akan bikin project dan otomatis akan terbentuk Main.java
3. klo sudah kita pilih File ->New File ada banyak tipe java disitu,kita pilih
Java GUI Form -> sesuai anak panah.

Modul Java Politeknik Gajah Tunggal

4. lalu isi nama Classnya dan pilih packagenya sesuai anak panah.

5. kalau sudah pilih Finish.kita akan mulai membuat Form seperti pada tampilan di
bawah ini

83

Modul Java Politeknik Gajah Tunggal

84

:: Tutorial Membuat Tabel ::


1. Pertama kita membuat Table dengan Mendrag JTable pada Palette. Kita beri nama dgn
klik kanan pilih change variable name,kita beri nama misal : table
2. Pilih Table klik kanan Properties,seperti gambar dibawah ini :

-Pilih
Inspector lalu
-pilih
JScrollpane1
- pilih JTable.
Utk
Pengeditan
Tablenya

Modul Java Politeknik Gajah Tunggal

85

3. kita buat kolom dengan klik Model lalu isi nama kolom kolomnya seperti gambar
dibawah ini sesuai anak panah :

Modul Java Politeknik Gajah Tunggal

86

4. Kalau sudah klik OK tinggal kita setting di source code nya.


Pada baris paling akhir di sourcenya sebelum } paling akhir kita bikin objek untuk
TableModel langsung ketik coding dibawah ini :
private javax.swing.table.DefaultTableModel tblModel = getDefaultTabelModel();

5. lalu kita buat fungsi getDefaultTabelModel(); dan Tabel untuk pengaturan


table nya seperti pada gambar dibawah ini, juga diketik secara manual:

Nama Kolom di Tabel

6. Setelah itu kita setting di konstruktornya,untuk pengaturan lebar kolomnya :


Tambahin source code berikut :

// kita modelkan tablenya sesuai dgn objek


tblModel tabel.setModel(tblModel);
// kita kirim data ke fungsi Tabel :nama tabelnya,dan lebar tiap kolom2nya
Tabel(tabel,new int[]{120,180,120,120});

7. Cara menginput data kedalam ke JTable :


Pertama kali kita deklarasikan dulu variable array satu dimensi diluar fungsi supaya
dikenal disemua fungsi yang lain.
4 adalah jumlah kolom dalam tabel

String data[] = new String


[4];
Didalam fungsi private void cmdsimpanactionperformed..

Modul Java Politeknik Gajah Tunggal

87

Tambahkan coding seperti dibawah ini :

8. Cara Menampilkan Data dari Jtable kedalam Form di Netbeans:


Nanti kita akan mengklik 2x baris dalam JTable yang berisi data yang akan ditampilkan
kedalam Form di Netbeans, caranya :
Pilih Inspector kemudian ikuti petunjuk dibawah ini :

Setelah itu akan muncul Fungsi :


private void tabelMouseClicked(java.awt.event.MouseEvent evt) {
}
Kita modifikasi Fungsi tersebut sehingga menjadi seperti dibawah ini :

Modul Java Politeknik Gajah Tunggal

88

Dengan coding diatas maka secara otomatis jika kita klik 2x baris dalam JTable maka
data dalam baris terpilih akan muncul dalam Form kemudian bisa kita edit dan delete.
9. Cara Mengedit Data Dalam JTable
Setelah data muncul dalam Form untuk mengeditnya ikuti coding dibawah ini :

10. Cara Menghapus Data Dalam JTable


Ketikan Coding Dibawah Ini :
private void cmdhapusActionPerformed(java.awt.event.ActionEvent evt) {
tblModel.removeRow(row);
}

Modul Java Politeknik Gajah Tunggal

89

Belajar SQL(Structured Query Language)


1

Untuk belajar SQL bisa menggunakan MysQL Server di Dos untuk menjalankan Querynya atau
dengan editor dari suatu MySQL yaitu MySQL Front,SQL Yog, dll.

SQL adalah standarisasi


SQL adalah sebuah ANSI (American National Standards Institute) yaitu standar bahasa komputer
yang digunakan untuk mengakses dan memanipulasi sebuah database. Perintah SQL ini di
gunakan untuk menemukan dan merubah data di dalam database. SQL bekerja dengan program
database seperti MS Access, DB2, Informix, MS SQL Server, Oracle, Sybase, dll.
Dalam banyak hal, terdapat perbedaan di dalam setiap versi dari Bahasa SQL ini, tetapi
perbedaan tersebut tetap harus mengacu kepada standar ANSI. Yaitu perbedaan tersebut tidak
menghilangkan perintah standar yang sudah ada sebelumnya seperti SELECT, UPDATE, DELETE,
INSERT, WHERE, and others.

SQL sebagai tabel basis data


Sebuah database selalu terdiri dari satu atau lebih tabel. Sebuah tabel diidentifikasi dengan
sebuah nama seperti Customers atau Orders. Tabel terdiri dari record-record (rows) dengan
data didalamnya.
Sebagai contoh dapat kita lihat tabel Peserta dibawah ini :
nm_dpn
Parto
Sandi
Mira

nm_blkg
Listio
Puspita
Dahlia

Alamat
JL.Bungur 10
Jl.Merdeka IX
Jl.Sabar 19

Kota
Ulujami
Pesanggrahan
Pesanggrahan

Pada contoh di atas diperlihatkan satu buah table yang berisi tiga buah record dimana satu
record memiliki empat buah kolom yang nantinya kita sebut sebagai Field yaitu : nm_dpn,
nm_blkg, alamat dan kota.
4

Komponen Sistem Basis Data


Ada
1.
2.
3.
4.
5.

beberapa komponen yang berurutan dalam Database :


Database
Tabel
Field (kolom)
Rows (Baris)
Data

Pembahasan SQL terdiri dari 2 bagian yaitu DML dan DDL.akan lebih dijelaskan dibawah ini

Modul Java Politeknik Gajah Tunggal


5

90

Data Manipulation Language (DML)


SQL (Structured Query Language) adalah sebuah syntax untuk melakukan eksekusi terhadap
sebuah query. Tetapi bahasa SQL harus selalu ada syntak untuk melakukan update, insert, and
delete dari pada sebuah records atau lebih.
Query dan perintah update ini bersamaan muncul dari Data Manipulation Language (DML) yang
merupakan bagian dari SQL diantaranya :
SELECT
: mengelompokkan data terpilih dari sebuah tabel
UPDATE
: ubah/perbaiki dari sebuah tabel basis data
DELETE
: hapus data dari sebuah tabel basis data
INSERT INTO
: input data baru ke dalam sebuah tabel basis data

Data Definition Language (DDL)


Data Definition Language (DDL) juga merupakan bagian dari SQL yang berfungsi untuk untuk
membuat dan menghapur tabel dari sebuah database. Kita juga dapat mendefinisikan indexes
(keys) untuk mencirikan dan membuat hubungan antar tabel.
Yang terpenting dari perintah DDL didalam SQL adalah:
CREATE TABLE
: perintah untuk membuat tabel
ALTER TABLE
: perintah untuk mengubah tabel
DROP TABLE
: perintah untuk menghapus tabel
CREATE INDEX
: perintah untuk membuat index suatu tabel
DROP INDEX
: perintah untuk menghapus index dari suatu tabel

Perintah CREATE dalam SQL


CREATE digunakan untuk membuat suatu database/table dalam SQL.
> Syntax Create Database :
CREATE DATABASE nama_database;
Contoh :
Kita akan membuat database dalam SQL dengan nama system_akademik, dapat digunakan
perintah CREATE seperti berikut :
CREATE DATABASE system_akademik;
> Syntax Create Tabel :
CREATE TABLE nama_tabel(
Nama_field1 tipe(panjang),
Nama_field2 tipe(panjang),
.
.
Nama_fieldn tipe(panjang),
Primary Key(field_key)
);
Contoh :
Sebelum membuat table kita harus memilih database yang akan kita pakai caranya ketik :
USE SYSTEM_AKADEMIK;
Setelah kita melakukan perintah diatas maka ada pesan :
DATABASE Changed
Kita akan membuat database dalam SQL dengan nama system_akademik, dapat digunakan
perintah CREATE seperti berikut :

Modul Java Politeknik Gajah Tunggal

91

CREATE TABLE
MAHASISWA( Nim
varchar(10), Nama
varchar(60), Jenkel
varchar(20), Jurusan
varchar(30),
PRIMARY KEY(NIM)
);
8

Perintah INSERT INTO


Perintah INSERT INTO digunakan untuk menambahkan data ke baris baru dalam suatu tabel.
Syntax :
INSERT INTO table_name VALUES (value1, value2, ..... )
Kita juga dapat menspesifikasikan kolom yang akan dimasukkan data terbaru
INSERT INTO table_name (column1, column2, )
VALUES (value1, value2, )
Contoh Input data ke baris baru
Tabel Peserta
nim
0411500349

nama
Pradana

Jenkel
Laki-Laki

Jurusan
Tekhnik Informatika

Perintah SQL :
INSERT INTO mahasiswa VALUES (0411500349, Pradana, Laki-Laki, Tekhnik Informatika)
Contoh Input Data ke kolom spesifik
Tabel Peserta
nim
0411500349

nama
Pradana

Jenkel
Laki-Laki

Jurusan
Tekhnik Informatika

Perintah SQL
INSERT INTO mahasiswa (nim,Jurusan) VALUES (0411500258, Sistem Informasi)
Hasil :
nim
0411500349
0411500258
9

nama
Pradana

Jenkel
Laki-Laki

Jurusan
Tekhnik Informatika
Sistem Informasi

Perintah SELECT dalam SQL


SELECT statemen digunakan untuk memilih data dari suatu tabel. hasil dalam bentuk tabel yang
disimpan di dalam suatu tabel hasil yang disebut result-set
Syntax :
SELECT column_name(s) FROM table_name
Contoh :
Memilih beberapa kolom dengan nama nim dan nama, dapat digunakan perintah SELECT
seperti berikut :

Modul Java Politeknik Gajah Tunggal

92

SELECT nim, nama from mahasiswa


Tabel Peserta
nim
0411500349
0411500258
Hasil :
nim
0411500349
0411500258
A.

nama
Pradana

Jenkel
Laki-Laki

Jurusan
Tekhnik Informatika
Sistem Informasi

nama
Parto

Memilih Seluruh Kolom


Memilih semua kolom pada table Peserta, dapat digunakan tanda *, seperti contoh
berikut :
SELECT * FROM mahasiswa
Hasil :
nim
0411500349
0411500258

B.

nama
Pradana

Jenkel
Laki-Laki

Jurusan
Tekhnik Informatika
Sistem Informasi

Klausa Where pada SQL


Klausa Where digunakan untuk memilih data yang lebih spesifik dengan sebuah
persyaratan atau lebih
Syntax :
SELECT column FROM table WHERE column operator value
Terdapat beberapa operator pada klausa WHERE yang bisa digunakan antara lain :
Operator
Deskripsi
=
Sama dengan
<>
Tidak sama dengan
>
Lebih besar dari
<
Lebih kecil dari
>=
Lebih besar dari atau
sama dengan
<=
Lebih kecil dari atau
sama dengan
BETWEEN
Diantara range inklusif
LIKE
Mencari sesuai pattern
Catatan : Dalam beberapa versi dari SQL operator <> ini dituliskan seperti !=

C.

Menggunakan Klausa WHERE


Mencari data dengan memilih mahasiwa yang Jurusannya Sistem Informasi", kita dapat
menambahkan WHERE clause dalam perintah SELECT sebagai berikut :
SELECT * FROM Mahasiswa WHERE Jurusan=Sistem Informasi

Modul Java Politeknik Gajah Tunggal


Tabel Peserta
nim
0411500349
0411500258
Hasil :
nim
0411500258

93

nama
Pradana

Jenkel
Laki-Laki

Jurusan
Tekhnik Informatika
Sistem Informasi

nama

Jenkel

Jurusan
Sistem Informasi

SQL menggunakan tanda kutip tunggal untuk data bertipe teks (namun adakalanya
database lain memperbolehkan menggunakan tanda kutip ganda). Sedangkan pada data
bertipe numerik tidak diperbolehkan menggunakan tanda kutip.
Contoh :
SELECT * FROM Mahasiswa where nsms=Pradana
SELECT * FROM Mahasiswa where nsms=Pradana
kutip tunggal)
SELECT * FROM Persons WHERE Year>1965
SELECT * FROM Persons WHERE Year>1965
D.

pernyataan yang benar


pernyataan yang salah (tanpa

pernyataan yang benar


pernyataan yang salah

Kondisi LIKE
LIKE digunakan untuk memilih data dengan kondisi yang spesifik untuk pencarian dalam
sebuah kolom pada tabel.
Syntax :
SELECT column FROM table WHERE column LIKE pattern
Symbol % yang digunakan untuk persyaratan yang akan dicari di awal ataudiakhir dari
yang dicari.
Penggunaan klausa LIKE
Perintah berikut akan menghasilkan data peserta dengan nama depan yang diawali
dengan M :
SELECT * From Mahasiswa WHERE nama LIKE P%
Perintah berikut akan menghasilkan Peserta dengan nama yang diakhiri dengan a :
SELECT * From Mahasiswa WHERE nama LIKE %a
Perintah berikut akan menghasilkan Peserta dengan nama yang memiliki huruf la :
SELECT * From Mahasiswa WHERE nama LIKE %la%

10

Perintah UPDATE
Perintah UPDATE digunakan untuk mengubah data dalam suatu tabel.
Syntax :
UPDATE table_name SET column_name = new_value
WHERE column_name=some value
Tabel Peserta :
Update field untuk sebuah record
Contoh :
UPDATE Mahasiswa SET nama=Joko, Jenkel=Laki-Laki WHERE nim= 0411500258

Modul Java Politeknik Gajah Tunggal

94

Hasil :
nim
0411500349
0411500258
11

nama
Pradana
Joko

Jenkel
Laki-Laki
Laki-Laki

Jurusan
Tekhnik Informatika
Sistem Informasi

Perintah DELETE
Perintah delete digunakan untuk menghapus baris dari suatu tabel.
Syntax :
DELETE FROM table_name WHERE column_name=some value
Tabel Peserta :
nim
0411500349
0411500258

nama
Pradana
Joko

Jenkel
Laki-Laki

Jurusan
Tekhnik Informatika
Sistem Informasi

Menghapus sebuah baris


Contoh :
DELETE FROM Mahasiswa WHERE nim= 0411500349
Hasil :
nim
0411500258

nama
Joko

Menghapus semua baris


Contoh :
DELETE FROM table_name

Jenkel
Laki-Laki

Jurusan
Sistem Informasi

Modul Java Politeknik Gajah Tunggal

95

Tutorial Koneksi Netbeans ke Mysql


1. Pertama kita buat file dengan exetention .ini pada folder lib dengan terlebih dahulu
membuat folder lib(misal : database.ini). yang misal isinya seperti dibawah ini :

2. Lalu kita buat file Database.java untuk melakukan relasi dengan file Database.ini yang
isinya sbb:

Modul Java Politeknik Gajah Tunggal

96

Mengolah file database.ini

3. Kita tinggal memanggil class Database.java(gb diatas) jika kita ingin melakukan
pemrosesan data yang berhubungan ke database. Untuk mengambil data dari file
database.ini kita akan memodifikasi program seperti dibawah ini pada sebelum dan
dalam Konstruktor :

Modul Java Politeknik Gajah Tunggal

4. Lalu kita buat Function setDefaultTable(); yang isinya sbb:

97

Modul Java Politeknik Gajah Tunggal

98

5. Setelah coding diatas selesai. Maka data dari mysql akan tertampil pada table di Form
javanya seperti gambar dibawah ini:

Modul Java Politeknik Gajah Tunggal

Pemrosesan Data Dengan Java dan Mysql


1. Menu Input :
Untuk pembuatan menu input . klik kanan tombol Input lalu pilih
Event ->action->Action Performed
Setelah itu buatlah coding dalam function yg baru terbentuk seperti dibawah ini :

99

Modul Java Politeknik Gajah Tunggal

10
0

2. Menu Cari
Untuk pembuatan menu cari . klik kanan tabel di Netbeans lalu pilih
Event ->Mouse->Mouse Click.
Kita menggunakan metode klik,jika tablenya diklik maka data dari table akan tertampil
di Formnya.Lalu tambahkan coding dalam Fungsi tabelMouseClicked seperti coding
dibawah ini :

Modul Java Politeknik Gajah Tunggal

3. Menu Edit
Untuk pembuatan menu edit . klik kanan tombol ubah di Netbeans lalu pilih
Event ->Action->ActionPerformed.
Data setelah tertampil di Form maka baru kita edit :
Untuk lebih jelasnya lihat coding sbb:

10
1

Modul Java Politeknik Gajah Tunggal

4. Menu Delete
Untuk pembuatan menu Hapus . klik kanan tombol Hapus di Netbeans lalu pilih
Event ->Action->ActionPerformed.
Setelah data dicari, Menu yang terakhir adalah delete (untuk menghapus data):

10
2

Anda mungkin juga menyukai