Pengantar Java Visual
Pengantar Java Visual
PEMROGRAMAN JAVA
Achmad Basuki
Penulis
DAFTAR ISI
Kata Pengantar
Daftar Isi
1. Pengantar Pemrograman Berbasis Obyek 1
1.1. Pemrograman Berbasis Obyek 1
1.2. Inheritance 4
1.3. Constructor 6
2. Komponen-Komponen Visual 8
2.1. JFrame 8
2.2. JLabel 11
2.3. JTextField 14
2.4. JButton 15
2.5. JRadioButton 17
2.6. JCombobox 20
2.7. JTextArea 23
2.8. JCheckBox 24
2.9. JTable 25
2.10. JScrollPane 26
2.11. JMenu 27
2.12. JInternalFrame 29
3. Event Handler 31
3.1. Menangani click mouse pad JButton 31
3.2. Menangani penekanan enter pada keyboard 36
3.3. Event handler Komponen JRadioButton dan JTextArea 40
3.4. Event handler komponen JCheckBox dan JComboBox 45
3.5. JMenu 49
3.6. Latihan 56
4. Pengaturan Layout 58
4.1. FlowLayout 58
4.2. BorderLayout 60
4.3. GridLayout 61
4.4. NoneLayout 63
4.5. JPanel 64
4.6. Latihan 69
5. Pemrograman Grafis 71
5.1. Dasar Pemrograman Grafis 72
5.2. Bekerja Dengan Citra 89
5.3. Latihan 93
6. Pemrograman Database 95
6.1. Membangun Database 95
6.2. Membuat ODBC 99
6.3. Koneksi Database 103
6.4. Menambah Data 104
6.5. Mencari Data 109
6.6. Update Data 111
6.7. Menampilkan Data Melalui Tabel 113
BAB 1
PENGANTAR
PEMROGRAMAN BERORIENTASI OBYEK
Tujuan:
1. Mahasiswa dapat menjelaskan konsep pemrograman berbasis obyek.
2. Mahasiswa dapat menerapkan proses enkapsulisasi, inheritance dan
polimorfisme pada pemrograman berbasis obyek
3. Mahasiswa dapat membuat program berbasis menggunakan bahasa
Java secara sederhana
1
dan lainnya. Obyek mobil ini mempunyai method berupa maju, mundur,
jalan, berhenti, dan berputar.
Dengan demikian dapat dikatakan bahwa obyek mempunyai sifat-
sifat, yaitu:
• Member atau sering juga disebut dengan attribut yang menjelaskan
variable, parameter atau keadaan (state) dari suatu obyek, misalkan
pada obyek mobil terdapat member berupa roda, kemudi, seperti yang
disebutkan di atas
• Method atau sering juga disebut dengan behavior yang menjelaskan
perilaku, kegiatan atau kerja dari suatu obyek, misalkan pada obyek
mobil terdapat method maju, mundur, berhenti, seperti yang
disebutkan diatas.
Menulis program berbasis obyek menggunakan bahasa Java
dilakukan dengan cara membentuk sebuah class, menentukan variabel
member dan menentukan method. Pembentukan class dari suatu obyek
ini dinamakan dengan enkapsulisasi. Untuk menggambarkan suatu
obyek digunakan suatu diagram yang dinamakan dengan class diagram.
Model class di dalam class diagram seperti terlihat pada gambar 1.1.
Nama Class
member
method
2
lingkaran dengan nama Lingkaran1.java. Seperti yang telah diketahui
bahwa lingkaran mempunyai parameter buapa jari-jari dan perhitungan
yang bisa dilakukan adalah luas lingkaran dan keliling lingkaran. Sehingga
class lingkaran1.java memiliki variabel member radius dan beberapa
method seperti
• void inputData(int data),
• double hitungLuas(),
• double hitungKeliling() dan
• void main(String args[]).
Class tersebut dapat dinyatakan dengan model seperti pada gambar 1.2.
Lingkaran1
double radius
void inputData(int data)
double hitungLuas()
double hitungKeliling()
3
double Keliling;
Keliling=2*Math.PI*radius;
return Keliling;
}
1.2. Inheritance
Inheritance atau pewarisan sifat adalah sebuah class yang
memiliki properti (variabel member dan method) dari class induknya.
Dengan inheritance ini maka suatu class anak akan mempunyai semua
member dan semua method yang ada di class induk.
Berikut ini adalah sebuah contoh penggunaan inheritance dimana
class Lingkaran1.java di atas merupakan class induk dan class
Tabung.java merupakan class turunannya. Untuk menyatakan suatu
class sebagai turunan class yang lain dapat dilakukan dengan
menambahkan pernyataan extends pada definisi class tersebut.
class classAnak extends classInduk
4
Pernyataan ini digunakan untuk membuat suatu class yang bernama
classAnak, class ini menjadi class turunan dari classInduk. Dengan
demikian semua member dan method dari classInduk akan berlakuk juga
pada classAnak.
class Tabung extends Lingkaran1
{
public double hitungSelimut(int tinggi)
{
double Selimut;
Selimut=2*hitungLuas()+hitungKeliling()*tinggi;
return Selimut;
}
5
1.3. Constructor
Constructor adalah method yang memiliki nama sama dengan nama
classnya. Berfungsi sebagai inisialisasi ketika sebuah obyek dibuat dari
sebuah class. Class Lingkaran2.java berikut ini adalah class yang
memiliki constructor yang diperoleh dengan melakukan modifikasi
terhadap method inputData(int data) pada class Lingkaran1.java.
class Lingkaran2
{
double radius;
Lingkaran2(int data)
{
radius=data;
}
6
Hasil dari program di atas adalah:
Radius Lingkaran : 10.0
Luas Lingkaran : 314.1592653589793
Keliling Lingkaran : 62.83185307179586
7
BAB 2
KOMPONEN-KOMPONEN VISUAL
Tujuan:
1. Mahasiswa dapat membangun komponen visual menggunakan bahasa
Java.
2. Mahasiswa dapat menerapkan komponen-komponen visual tersebut
ke dalam contoh-contoh sederhana
2.1. JFRAME
JFrame adalah komponen dasar dalam pemrograman visual
dengan java. Dalam frame inilah komponen lain diletakkan. Berikut adalah
kode program yang diperlukan untuk membuat sebuah frame kosong.
Program ini menggunakan constructor tunggal tanpa argumen yang
digunakan untuk menampung properti frame yang dikehendaki.
import javax.swing.*;
8
setLocation(300,100);
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
9
AplikasiPenilaian()
{
setTitle("Lembar Penilaian");
setLocation(300,100);
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
merupakan constructor bagi class AplikasiPenilaian sehingga pada saat
kita membentuk sebuah obyek, semua kode di dalamnya akan
dilaksanakan.
• setTitle digunakan untuk membuat judul frame.
• setLocation(300,100) digunakan untuk menentukan posisi frame
di layar dimana 300 menunjukkan posisi x dan 100 menunjukkan
posisi y,
• setSize(300,150) digunakan untuk menentukan besar frame
dimana 300 menunjukkan lebar frame dan 150 menunjukkan
tinggi frame.
• setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) digunakan
untuk mengakhiri jalannya program bila frame ditutup. Bila
perintah tersebut tidak ada, maka penutupan frame tidak akan
menghentikan jalannya program.
• setVisible(true) digunakan untuk menampilkan frame.
10
2.2. JLABEL
JLabel adalah komponen yang digunakan untuk membuat tulisan
atau gambar pada frame sebagai suatu informasi untuk pengguna
program. Untuk menggunakan jLabel, sebagai suatu class maka
sebelumnya perlu dibuat suatu obyek menggunakan class JLabel.
Program berikut akan menambahkan komponen JLabel pada program
AplikasiPenilaian seperti yang dijelaskan di atas (catatan: penulisan
huruf tebal pada listing program adalah modifikasi untuk menambahkan
komponen Jlabel).
import javax.swing.*;
AplikasiPenilaian()
{
setTitle("Lembar Penilaian");
setLocation(300,100);
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(lblnim);
lblnim.setBounds(10,10,70,20);
setVisible(true);
}
11
Hasil dari program di atas adalah: :
void komponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(lblnim);
lblnim.setBounds(10,10,70,20);
setVisible(true);
}
method void komponenVisual() digunakan untuk meletakkan berbagai
komponen visual yang kita gunakan dalam program.
getContentPane().setLayout(null)
Sintaks di atas digunakan untuk mengatur tata letak komponen dalam
frame, dimana layout null berarti bahwa koordinat tiap komponen dalam
frame harus ditentukan sendiri posisinya oleh programmer.
12
getContentPane().add(lblnim)
adalah perintah yang digunakan untuk menempelkan obyek JLabel ke
frame.
lblnim.setBounds(10,10,70,20);
perintah di atas berhubungan dengan getContentPane().setLayout(null)
di atas yang berguna untuk mengatur posisi dari komponen JLabel
yang bernama lblnim. Pengaturan posisi dilakukan dengan
menggunakan setBounds(10,10,70,20) dimana agrumen pertama
menunjukkan koordinat x dari ujung kiri atas obyek, argumen kedua
menunjukkan koordinat y dari ujung kiri atas obyek, argumen ketiga
menunjukkan lebar dari obyek dan argumen keempat menunjukkan
tinggi dari obyek.
setVisible(true);
digunakan untuk menampilkan frame berserta semua obyek yang ada
di dalamnya. Pada program sebelumnya method ini kita letakkan pada
constructor karena kita belum membuat method komponenVisual().
13
2.3. JTEXTFIELD
JTextField adalah komponen yang digunakan untuk memasukkan
sebaris string yang selanjutnya dapat digunakan sebagai input bagi proses
selanjutnya. Pembuatan JTextfield dilakukan dengan membuat obyek
berdasarkan class JTextField, sperti terlihat pada program berikut.
Perhatikan tulisan tebal menyatakan pemakain JTextField.
import javax.swing.*;
AplikasiPenilaian()
{
setTitle("Lembar Penilaian");
setLocation(300,100);
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(lblnim);
lblnim.setBounds(10,10,70,20);
getContentPane().add(txnim);
txnim.setBounds(75,10,100,20);
setVisible(true);
}
14
Hasil dari program di atas adalah: :
Baris kode yang dicetak tebal adalah perubahan dan penambahan yang
dilakukan terhadap program sebelumnya. Baris perintah :
JTextField txnim=new JTextField(20);
Adalah membentuk obyek dari komponen JTextField yang akan
digunakan untuk menampung nilai dari NIM mahasiswa.
getContentPane().add(txnim);
txnim.setBounds(75,10,100,20);
adalah perintah untuk menempelkan dan mengatur posisi txnim pada
frame.
2.4. JBUTTON
JButton adalah komponen berbentuk tombol. Komponen ini
banyak digunakan sebagai eksekusi terhadap tindakan yang diinginkan.
Pada aplikasi komputer, biasanya dibutuhkan tombol untuk mengeksekusi
sebuah perintah. Misalnya program di atas kita tambahkan sebuah tombol
untuk mencari data mahasiswa sehingga tampilannya akan tampak seperti
berikut:
15
Gambar 2.4. Hasil JButton
AplikasiPenilaian()
{
setTitle("Lembar Penilaian");
setLocation(300,100);
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(lblnim);
lblnim.setBounds(10,10,70,20);
getContentPane().add(txnim);
txnim.setBounds(75,10,100,20);
getContentPane().add(tblcari);
tblcari.setBounds(180,10,95,20);
setVisible(true);
}
16
{
AplikasiPenilaian ap=new AplikasiPenilaian();
ap.komponenVisual();
}
}
Latihan 2.1
Sampai disini, tambahkan sendiri komponen yang diperlukan agar
tampilan aplikasi tampak seperti berikut :
2.5. JRADIOBUTTON
JRadioButton adalah komponen yang digunakan ketika pengguna
perlu memilih satu diantara beberapa pilihan. Program untuk menentukan
kelas mahasiswa adalah sebagai berikut :
import javax.swing.*;
17
JRadioButton kelasC=new JRadioButton("C");
ButtonGroup grupkelas=new ButtonGroup();
AplikasiPenilaian()
{
setTitle("Lembar Penilaian");
setLocation(300,100);
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(lblnim);
lblnim.setBounds(10,10,70,20);
getContentPane().add(txnim);
txnim.setBounds(75,10,100,20);
getContentPane().add(tblcari);
tblcari.setBounds(180,10,95,20);
getContentPane().add(lblnama);
lblnama.setBounds(10,30,70,20);
getContentPane().add(txnama);
txnama.setBounds(75,30,200,20);
getContentPane().add(lblkelas);
lblkelas.setBounds(10,50,100,20);
getContentPane().add(kelasA);
kelasA.setBounds(75,50,50,20);
getContentPane().add(kelasB);
kelasB.setBounds(125,50,50,20);
getContentPane().add(kelasC);
kelasC.setBounds(175,50,50,20);
grupkelas.add(kelasA);
grupkelas.add(kelasB);
grupkelas.add(kelasC);
setVisible(true);
}
18
Hasil dari program di atas adalah: :
Bagian yang dicetak tebal merupakan kode yang perlu kita tambahkan
dari proram sebelumnya untuk menggunakan komponen JRadioButton.
Penjelasan komponen JradioButton adalah sebagai berikut:
getContentPane().add(kelasA);
kelasA.setBounds(75,50,50,20);
getContentPane().add(kelasB);
kelasB.setBounds(125,50,50,20);
getContentPane().add(kelasC);
kelasC.setBounds(175,50,50,20);
digunakan untuk menambahkan dan mengatur posisi masing-masing
obyek dalam frame.
19
grupkelas.add(kelasA);
grupkelas.add(kelasB);
grupkelas.add(kelasC);
adalah cara untuk menyatukan ketiga obyek menjadi satu kesatuan,
sehingga hanya dapat dipilih satu diantara ketiganya.
2.6. JCOMBOBOX
JComboBox juga merupakan komponen yang digunakan untuk
memilih satu diantara sekian banyak pilihan yang berbentuk semacam
TextField dan ada panah ke bawah. Bila program kita dikembangkan agar
diperoleh hasil berikut:
20
JLabel lblkelompok=new JLabel("Kelompok");
String[] jeniskelompok={"1","2","3","4","5","6","7"};
JComboBox cbkelompok=new JComboBox(jeniskelompok);
AplikasiPenilaian()
{
setTitle("Lembar Penilaian");
setLocation(300,100);
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(lblnim);
lblnim.setBounds(10,10,70,20);
getContentPane().add(txnim);
txnim.setBounds(75,10,100,20);
getContentPane().add(tblcari);
tblcari.setBounds(180,10,95,20);
getContentPane().add(lblnama);
lblnama.setBounds(10,30,70,20);
getContentPane().add(txnama);
txnama.setBounds(75,30,200,20);
getContentPane().add(lblkelas);
lblkelas.setBounds(10,50,100,20);
getContentPane().add(kelasA);
kelasA.setBounds(75,50,50,20);
getContentPane().add(kelasB);
kelasB.setBounds(125,50,50,20);
getContentPane().add(kelasC);
kelasC.setBounds(175,50,50,20);
grupkelas.add(kelasA);
grupkelas.add(kelasB);
grupkelas.add(kelasC);
getContentPane().add(lblkelompok);
lblkelompok.setBounds(10,70,100,20);
getContentPane().add(cbkelompok);
cbkelompok.setBounds(75,70,100,20);
setVisible(true);
}
21
AplikasiPenilaian ap=new AplikasiPenilaian();
ap.komponenVisual();
}
}
getContentPane().add(cbkelompok);
cbkelompok.setBounds(75,70,100,20);
adalah cara yang sudah biasa kita gunakan untuk memasang
komponen pada frame.
Latihan 2.2
Buatlah aplikasi untuk menghasilkan form sebagai berikut :
22
2.7. JTextArea
JTextArea merupakan komponen yang mirip dengan JtextField
tetapi dapat menampung lebih dari satu baris. Sebagai contoh
penggunaan dari JtextArea adalah seperti pada program berikut:
import javax.swing.*;
import java.awt.*;
FrameTextArea()
{
setLocation(200,100);
setSize(300,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(label);
getContentPane().add(area1);
getContentPane().setLayout(new FlowLayout());
show();
}
}
class AplikasiTextArea
{
public static void main(String args[])
{
FrameTextArea tf=new FrameTextArea();
}
}
23
2.8. JCheckBox
JCheckBox adalah komponen yang digunakan ketika pengguna
memerlukan komponen untuk melakukan satu atau banyak pilhan
sekaligus. Contoh penggunaan JCheckBox adalah sebagai berikut:
import javax.swing.*;
import java.awt.*;
FrameCheckBox()
{
setLocation(200,100);
setSize(300,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
getContentPane().add(cek1);
getContentPane().add(cek2);
getContentPane().add(cek3);
getContentPane().setLayout(new FlowLayout());
setVisible(true);
}
}
class AplikasiCheckBox
{
public static void main(String args[])
{
FrameCheckBox cb=new FrameCheckBox();
cb.KomponenVisual();
}
}
24
Hasil dari program di atas adalah: berikut:
2.9. JTable
JTable digunakan untuk menampilkan data dalam bentuk tabel, suatu
bentuk yang banyak digunakan dalam pemrograman database. Contoh
penggunaan JTable seperti listing program berikut.
import javax.swing.*;
import java.awt.*;
FrameTabel()
{
setLocation(200,100);
setSize(300,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
getContentPane().add(tabel1);
setVisible(true);
}
}
class AplikasiTabel
{
public static void main(String args[])
25
{
FrameTabel t=new FrameTabel();
t.KomponenVisual();
}
}
2.10. JScrollPane
JScrollPane adalah komponen yang digunakan untuk
menggerakkan obyek ke atas, ke bawah atau ke samping agar semua
sebuah obyek terlihat di layar. COntoh penggunaan JScrollPane adalah
sebagai berikut.
import javax.swing.*;
import java.awt.*;
FrameScrollPane2()
{
setLocation(200,100);
setSize(300,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
JTable tabel1=new JTable(data,header);
JScrollPane scrollPane = new JScrollPane(tabel1);
getContentPane().add(scrollPane, BorderLayout.CENTER);
26
setVisible(true);
}
}
class AplikasiScrollPane2
{
public static void main(String args[])
{
FrameScrollPane2 t=new FrameScrollPane2();
t.KomponenVisual();
}
}
2.11. JMenu
JMenu adalah komponen yang digunakan untuk membuat menu.
Menu membuat program kita menjadi lebih sederhana dan mudah
digunakan. Contoh penggunaan JMenu adalah sebagai berikut.
import javax.swing.*;
import java.awt.*;
27
AplikasiMenu()
{
setTitle("Menu Utama");
setSize(320,160);
setLocation(300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
setJMenuBar(mb);
mb.add(file);
mb.add(help);
file.add(open);
file.add(close);
close.setEnabled(false);
file.add(quit);
help.add(about);
setVisible(true);
}
28
2.12. JInternalFrame
JInternalFrame menyebabkan sebuah frame hanya dapat berada
dalam frame lain. Kondisi ini akan membantu tampilan menjadi lebih rapi
dan teratur. Contoh penggunaan JInternalFrame adalah sebagai berikut.
import javax.swing.*;
import java.awt.*;
AplikasiFrameInternal()
{
setTitle("Aplikasi Internal Frame");
setLocation(100,200);
setSize(300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
iframe.setLocation(20,20);
iframe.setSize(200,100);
iframe.setVisible(true);
desktop.add(iframe);
setContentPane(desktop);
setVisible(true);
}
29
Hasil dari program di atas adalah: berikut:
30
BAB 3
EVENT HANDLER
Tujuan:
1. Mahasiswa dapat menjelaskan konsep even handler pada
pemrograman bahasa Java.
2. Mahasiswa dapat membuat program sederhana untuk even handler
pada komponen-komponen dasar dengan contoh-contoh yang mudah
dipahami
3. Mahasiswa dapat membuat program menu menggunakan bahasa Java
31
hasil. Keluar dari aplikasi dapat dilakukan dengan klik pada tombol exit
atau klik pada icon close.
AplikasiEvent1()
{
setTitle("Event Sederhana");
setLocation(200,100);
setSize(270,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(data1);
data1.setBounds(10,10,50,20);
getContentPane().add(data2);
data2.setBounds(60,10,50,20);
getContentPane().add(operasi);
operasi.setBounds(110,10,50,20);
getContentPane().add(hasil);
hasil.setBounds(160,10,90,20);
32
getContentPane().add(exit);
exit.setBounds(160,35,90,20);
setVisible(true);
}
void AksiReaksi()
{
operasi.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int x=Integer.parseInt(data1.getText());
int y=Integer.parseInt(data2.getText());
String z=String.valueOf(x+y);
hasil.setText(z);
}
});
exit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
}
33
JTextField data1=new JTextField(6);
JTextField data2=new JTextField(6);
JButton operasi=new JButton("+");
JTextField hasil=new JTextField(6);
JButton exit=new JButton("EXIT");
Merupakan deklarasi dari obyek-obyek yang akan digunakan dalam
aplikasi, terdiri dari JTextField dan JButton.
AplikasiEvent1()
{
setTitle("Event Sederhana");
setLocation(200,100);
setSize(270,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
adalah constructor tanpa argumen dari class AplikasiEvent1.
void komponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(data1);
data1.setBounds(10,10,50,20);
getContentPane().add(data2);
data2.setBounds(60,10,50,20);
getContentPane().add(operasi);
operasi.setBounds(110,10,50,20);
getContentPane().add(hasil);
hasil.setBounds(160,10,90,20);
getContentPane().add(exit);
exit.setBounds(160,35,90,20);
setVisible(true);
}
Merupakan method yang digunakan untuk mengatur posisi masing-
masing komponen visual dalam frame.
void AksiReaksi()
{
operasi.addActionListener(new ActionListener()
{
34
public void actionPerformed(ActionEvent e)
{
int x=Integer.parseInt(data1.getText());
int y=Integer.parseInt(data2.getText());
String z=String.valueOf(x+y);
hasil.setText(z);
}
});
exit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
}
method AksiReaksi() inilah yang akan kita gunakan untuk menempatkan
kode-kode program event handler. Pada contoh di atas, terdapat dua
event handler yaitu penekanan mouse pada tombol operasi dan
penekanan mouse pada tombol exit. Reaksi yang timbul akibat klik mouse
pada tombol operasi dan exit diimplementasikan dengan kode berikut :
operasi.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
…
…
}
});
exit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
…
…
}
});
Dalam method public void actionPerformed(ActionEvent e) inilah efek
yang timbul akibat penekanan klik mouse pada tombol operasi dan exit
kita tuliskan.
35
int x=Integer.parseInt(data1.getText());
int y=Integer.parseInt(data2.getText());
Dua baris kode tersebut di atas mempunyai tugas yang sama yaitu
mengambil nilai dari JTextField dengan cara data1.getText() ,
mengubahnya dari String menjadi integer dengan Integer.parseInt dan
menyimpan nilainya ke dalam variabel x dan y.
String z=String.valueOf(x+y);
Baris perintah di atas digunakan untuk melakukan proses penjumlahan
kedua input data x dan y, kemudian mengubah tipe datanya menjadi
String agar hasilnya dapat ditampilkan melalui JTextField hasil dengan
menggunakan sintaks :
hasil.setText(z);
36
int y=Integer.parseInt(data2.getText());
String z=String.valueOf(x+y);
hasil.setText(z);
}
}
});
Yang diletakkan pada method AksiReaksi().Baris-baris program di atas
berhubungan dengan event yang berhubungan dengan tombol-tombol
keyboard. Dan sintaks :
if(e.getKeyCode()==e.VK_ENTER)
{
……….
……….
}
adalah sintaks yang memungkinkan suatu reaksi terjadi bila kita menekan
tombol enter di keyboard.
Dengan cara yang sama, program aplikasi sederhana di atas
dapat kita sempurnakan dengan memberikan event enter pada JTextField
data1 dan JTextField data2 sehingga setelah data pertama dimasukkan
dan kita tekan enter kursor akan pindah ke JTextField data2 siap untuk
mengisi data kedua. Setelah data kedua diisi dan ditekan tombol enter
maka fokus akan menuju ke tombol operasi, siap untuk ditekan. Untuk
lebih jelasnya silahkan dicoba program berikut:
import javax.swing.*;
import java.awt.event.*;
AplikasiEvent1()
{
setTitle("Event Sederhana");
setLocation(200,100);
setSize(300,100);
37
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(data1);
data1.setBounds(10,10,50,20);
getContentPane().add(data2);
data2.setBounds(70,10,50,20);
getContentPane().add(operasi);
operasi.setBounds(130,10,50,20);
getContentPane().add(hasil);
hasil.setBounds(190,10,90,20);
getContentPane().add(exit);
exit.setBounds(190,35,90,20);
setVisible(true);
}
void AksiReaksi()
{
data1.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==e.VK_ENTER)
{
data2.requestFocus();
}
}
});
data2.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==e.VK_ENTER)
{
operasi.requestFocus();
}
}
});
operasi.addActionListener(new ActionListener()
{
38
public void actionPerformed(ActionEvent e)
{
int x=Integer.parseInt(data1.getText());
int y=Integer.parseInt(data2.getText());
String z=String.valueOf(x+y);
hasil.setText(z);
}
});
operasi.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==e.VK_ENTER)
{
int x=Integer.parseInt(data1.getText());
int y=Integer.parseInt(data2.getText());
String z=String.valueOf(x+y);
hasil.setText(z);
exit.requestFocus();
}
}
});
exit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
}
39
data2.requestFocus()
adalah kode yang memungkinkan terjadinya perpindahan kursor dari
JTextfield pertama ke JTextField kedua.
AplikasiTextArea()
{
setTitle("Komponen JTextArea");
setLocation(200,100);
setSize(300,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
getContentPane().add(label);
getContentPane().add(area1);
getContentPane().setLayout(new FlowLayout());
setVisible(true);
}
40
}
}
Hasil dari program di atas adalah:
41
AplikasiEvent5()
{
setTitle("Event Sederhana");
setLocation(300,100);
setSize(300,320);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(lblnama);
lblnama.setBounds(10,10,80,20);
getContentPane().add(txnama);
txnama.setBounds(105,10,175,20);
getContentPane().add(lblnim);
lblnim.setBounds(10,33,80,20);
getContentPane().add(txnim);
txnim.setBounds(105,33,70,20);
getContentPane().add(lblkelamin);
lblkelamin.setBounds(10,56,80,20);
kelompok.add(pria);
kelompok.add(wanita);
getContentPane().add(pria);
pria.setBounds(105,56,50,20);
getContentPane().add(wanita);
wanita.setBounds(160,56,70,20);
getContentPane().add(cetak);
cetak.setBounds(10,80,270,20);
getContentPane().add(hasil);
hasil.setBounds(10,105,270,150);
setVisible(true);
}
void AksiReaksi()
{
cetak.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
hasil.append(txnama.getText()+"\n");
hasil.append(txnim.getText()+"\n");
if(pria.isSelected()==true)
42
{
hasil.append(pria.getText()+"\n");
}
else
{
hasil.append(wanita.getText()+"\n");
}
}
});
}
Pada program di atas, setelah Nama dan NIM diisi, pilihan pria
atau wanita dipilih, serta tombol cetak ditekan, maka hasilnya akan
ditampilkan di JTextArea. Yang perlu diperhatikan dalam baris kode di
43
atas adalah method yang berisi event handler untuk menangani kejadian
ketika tombol cetak di klik.
void AksiReaksi()
{
cetak.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
hasil.append(txnama.getText()+”\n”);
hasil.append(txnim.getText()+”\n”);
if(pria.isSelected()==true)
{
hasil.append(pria.getText()+”\n”);
}
else
{
hasil.append(wanita.getText()+”\n”);
}
}
});
}
if(pria.isSelected()==true)
{
hasil.append(pria.getText()+”\n”);
}
else
{
hasil.append(wanita.getText()+”\n”);
44
}
merupakan baris-baris kode yang digunakan untuk menangkap pilihan
dari pengguna terhadap RadioButton yang disediakan, dimana bila
radiobutton pria yang dipilih maka teks pada JRadioButton pria akan
tercetak pada JTextArea karena sintaks pria.getText() begitu juga
sebaliknya..
45
import java.awt.event.*;
AplikasiEvent5()
{
setTitle("Event Sederhana");
setLocation(300,100);
setSize(300,320);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(lblnama);
lblnama.setBounds(10,10,80,20);
getContentPane().add(txnama);
txnama.setBounds(105,10,175,20);
getContentPane().add(lblnim);
lblnim.setBounds(10,33,80,20);
getContentPane().add(txnim);
txnim.setBounds(105,33,70,20);
getContentPane().add(lblkelamin);
lblkelamin.setBounds(10,56,80,20);
kelompok.add(pria);
kelompok.add(wanita);
getContentPane().add(pria);
pria.setBounds(105,56,50,20);
getContentPane().add(wanita);
46
wanita.setBounds(160,56,70,20);
getContentPane().add(lblhobi);
lblhobi.setBounds(10,80,70,20);
getContentPane().add(baca);
baca.setBounds(105,80,100,20);
getContentPane().add(mancing);
mancing.setBounds(105,103,100,20);
getContentPane().add(jalan);
jalan.setBounds(105,126,100,20);
getContentPane().add(cetak);
cetak.setBounds(10,150,270,20);
getContentPane().add(hasil);
hasil.setBounds(10,180,270,100);
setVisible(true);
}
void AksiReaksi()
{
cetak.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
hasil.append(txnama.getText()+"\n");
hasil.append(txnim.getText()+"\n");
if(pria.isSelected()==true)
{
hasil.append(pria.getText()+"\n");
}
else
{
hasil.append(wanita.getText()+"\n");
}
if(baca.isSelected()==true)
{
hasil.append(baca.getText()+"\n");
}
if(mancing.isSelected()==true)
{
hasil.append(mancing.getText()+"\n");
}
if(jalan.isSelected()==true)
{
hasil.append(jalan.getText()+"\n");
}
47
}
});
}
48
Menu digunakan untuk mengatur berbagai program yang telah kita
buat agar menjadi lebih sederhana dan mudah digunakan dengan
memberikan pilihan-pilihan yang disusun secara rapi dan terstruktur.
Berikut ini adalah contoh program bagaimana caranya membuat
komponen menu di Java menggunakan JMenu.
import javax.swing.*;
import java.awt.*;
AplikasiMenu()
{
setTitle("Menu Utama");
setSize(320,160);
setLocation(300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
setJMenuBar(mb);
mb.add(file);
mb.add(help);
file.add(open);
file.add(close);
close.setEnabled(false);
file.add(quit);
help.add(about);
setVisible(true);
}
49
}
}
void KomponenVisual()
{
50
setJMenuBar(mb);
mb.add(file);
mb.add(help);
file.add(open);
file.add(close);
close.setEnabled(false);
file.add(quit);
help.add(about);
setVisible(true);
}
Pada method inilah kita mengatur letak menu, dan submenu mana
yang merupakan bagian dari menu File dan submenu mana yang
menjadi menu Help.
AplikasiEvent8()
{
setTitle("Menu Utama");
setSize(320,160);
setLocation(300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
51
{
setJMenuBar(mb);
mb.add(data);
mb.add(help);
data.add(input);
data.add(edit);
data.addSeparator();
data.add(quit);
help.add(about);
setVisible(true);
}
void AksiReaksi()
{
input.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JOptionPane.showInputDialog(null,"Masukkan nama anda","Data
Personalia",JOptionPane.INFORMATION_MESSAGE);
}
});
edit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
isidata.KomponenVisual();
isidata.AksiReaksi();
}
});
quit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
about.addActionListener(new ActionListener()
{
52
public void actionPerformed(ActionEvent e)
{
new FrameAbout();
}
});
}
53
Ketika Menu Edit Data di Klik maka akan tampil form dari aplikasi yang
telah kita buat sebelumnya karena kita telah membentuk sebuah obyek
dari class AplikasiEvent5.
AplikasiEvent5 isidata=new AplikasiEvent5();
Dan dengan menggunakan sintak:
edit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
isidata.KomponenVisual();
isidata.AksiReaksi();
}
});
Maka kita memanggil method KomponenVisual() dan method AksiReaksi()
dari class AplikasiEvent5. Tampilannya adalah seperti terlihat pada
gambar 3.10.
Dalam program ini, tampilan ketika Menu Help About di Klik akan muncul
sebuah form yang hanya berisi sebuah gambar. Tentu saja form ini dapat
kita isi dengan informasi lain misalnya versi dari program kita, tahun
pembuatan, tim pembuat atau informasi lain. Class yang digunakan untuk
membuat form about adalah sebagai berikut :
54
Berikutnya membuat aplikasi menu dengan hasil berupa view gambar, bila
pilihan [Data] pada menu dipilih maka akan ditampilkan gambar, seperti
pada listing program di bawah ini.
import javax.swing.*;
import java.awt.*;
FrameAbout()
{
picture.setPreferredSize(new Dimension(200,200));
setLocation(500,300);
setSize(150,200);
getContentPane().add(picture);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setVisible(true);
}
}
about.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new FrameAbout();
}
});
Hasilnya outputnya adalah sebagai berikut:
55
3.6. LATIHAN
(1) Bangunlah sebuah program tebak angka, dengan tampilan sebagai
berikut:
56
(2) Buatlah contoh-contoh program sederhana terhadap Listener-listener
berikut:
FocusListener FocusAdapter focusGained(FocusEvent)
focusLost(Focus Event)
ItemListener none itemStateChanged(ItemEvent)
KeyListener KeyAdapter keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
MouseListener MouseAdapter mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mousePressed(MouseEvent)
mouseReleased(MouseEvent)
WindowListener WindowAdapter windowActivated(WindowEvent)
windowClosed (WindowEvent)
windowClosing (WindowEvent)
windowDeactivated(WindowEvent)
windowOpened(WindowEvent)
57
BAB 4
PENGATURAN LAYOUT
Tujuan:
1. Mahasiswa dapat mengatur layout dari form yang dibuat menggunakan
pemrograman bahasa Java.
2. Mahasiswa dapat menjelaskan perbedaan FormLayour, BorderLayout,
GridLayout dan NoneLayout
3. Mahasiswa dapat menerapkan JPanel.
4.1. FlowLayout
FlowLayout adalah jenis pengaturan layout yang paling
sederhana, dimana semua komponen akan tersusun dari kiri ke kanan
sepanjang frame, dan akan pindah ke bawah bila telah sampai batas
kanan frame. Kode program yang digunakan untuk melakukan pengaturan
flowlayout adalah:
58
getContentPane().setLayout(new FlowLayout())
yang dapat kita letakkan pada method komponenVisual() bersama dengan
komponen-komponen visual. Berikut ini adalah contoh program sederhana
dimana komponen visual yang digunakan diatur menggunakan
FlowLayout.
import javax.swing.*;
import java.awt.*;
AplikasiFlowLayout()
{
setLocation(200,100);
setSize(450,120);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
getContentPane().setLayout(new FlowLayout());
getContentPane().add(nama);
getContentPane().add(txnama);
getContentPane().add(nim);
getContentPane().add(txnim);
getContentPane().add(tombolSimpan);
setVisible(true);
}
59
Hasil program di atas adalah :
4.2. BorderLayout
BorderLayout merupakan jenis layout yang bekerja dengan
membagi frame menjadi lima bagian yaitu NORTH, EAST, SOUTH, WEST
dan CENTER. Komponen visual dapat diletakkan pada bagian-bagian
tersebut. Bila program sebelumnya diganti layout-nya menggunakan
BorderLayout maka programnya adalah sebagai berikut:
import javax.swing.*;
import java.awt.*;
AplikasiBorderLayout()
{
setLocation(200,100);
setSize(450,120);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
60
getContentPane().setLayout(new BorderLayout());
getContentPane().add(nama, "North");
getContentPane().add(txnama, "East");
getContentPane().add(nim, "Center");
getContentPane().add(txnim, "West");
getContentPane().add(tombolSimpan, "South");
setVisible(true);
}
4.3. GRIDLAYOUT
GridLayout adalah jenis layout yang bekerja berdasar baris dan
kolom. Dengan layout ini kita dapat memberikan argumen banyaknya
baris dan kolom sesuai dengan kebutuhan. Berikut ini adalah program
sebelumnya menggunakan pengaturan GridLayout.
61
import javax.swing.*;
import java.awt.*;
AplikasiGridLayout()
{
setLocation(200,100);
setSize(450,120);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
getContentPane().setLayout(new GridLayout(4,2));
getContentPane().add(nama);
getContentPane().add(txnama);
getContentPane().add(nim);
getContentPane().add(txnim);
getContentPane().add(tombolSimpan);
setVisible(true);
}
62
Kode program yang digunakan untuk pengaturan GridLayout adalah :
getContentPane().setLayout(new GridLayout(4,2));
dimana angka 4 pada argumen GridLayout menunjukkan banyaknya baris
dan 2 menunjukkan banyaknya kolom.
4.4. NoneLayout
NoneLayout merupakan jenis layout yang dapat menghasilkan
tampilan yang rapi karena kita dapat mengatur posisi komponen secara
detil berdasar koordinatnya. Konsekuensinya dengan layout ini waktu
yang diperlukan relatif lebih banyak dibanding layout yang lain karena kita
perlu menentukan posisi koordinat tiap komponen.
import javax.swing.*;
import java.awt.*;
AplikasiNoneLayout()
{
setLocation(200,100);
setSize(450,120);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(nama);
nama.setBounds(10,10,100,25);
getContentPane().add(txnama);
txnama.setBounds(150,10,200,20);
getContentPane().add(nim);
nim.setBounds(10,30,100,25);
getContentPane().add(txnim);
txnim.setBounds(150,30,100,20);
63
getContentPane().add(tombolSimpan);
tombolSimpan.setBounds(150,50,100,25);
setVisible(true);
}
4.5. JPANEL
JPanel adalah komponen visual yang digunakan untuk membantu
mengatur letak komponen lain agar terlihat lebih tertata rapi dan nyaman.
Berikut ini adalah contoh penggunaan Jpanel dalam sebuah program.
64
import javax.swing.*;
import java.awt.*;
AplikasiPanel1()
{
setLocation(300,100);
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
panel1.add(label1);
panel1.add(text1);
getContentPane().add(panel1);
setVisible(true);
}
65
Selanjutnya dalam komponen JPanel ini kita letakkan komponen visual
lain sesuai keperluan, kemudian semua komponen tersebut kita letakkan
ke dalam method komponenVisual() sebagai berkut.
void KomponenVisual()
{
panel1.add(label1);
panel1.add(text1);
getContentPane().add(panel1);
setVisible(true);
}
Bila contoh program di atas belum terlalu terlihat peran dari JPanel,
program berikut diharapkan bisa memberikan gambaran yang lebih baik
bagaimana JPanel digunakan.
import javax.swing.*;
import java.awt.*;
AplikasiPanel2()
{
setLocation(300,100);
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
panel1.add(label1);
panel1.add(text1);
getContentPane().add(panel1, BorderLayout.NORTH);
panel2.add(tombol1);
panel2.add(exit);
getContentPane().add(panel2, BorderLayout.SOUTH);
66
setVisible(true);
}
67
Bila diperlukan dapat juga dilakukan pengaturan dengan menggunakan
salah satu diantara beberapa layout terhadap komponen visual dalam
sebuah JPanel. Berikut ini adalah contohnya.
import javax.swing.*;
import java.awt.*;
AplikasiPanel3()
{
setLocation(300,100);
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
panel1.add(label1);
panel1.add(text1);
panel1.setLayout(new GridLayout(2,1));
getContentPane().add(panel1, BorderLayout.NORTH);
panel2.setLayout(new BorderLayout());
panel2.add(tombol1,"Center");
panel2.add(exit,"East");
getContentPane().add(panel2, BorderLayout.SOUTH);
setVisible(true);
}
68
Hasil program di atas adalah:
4.6. LATIHAN
(1) Buatlah sebuah form pemesanan tiket kereta api dengan latout seperti
terlihat pada gambar 4.8 berikut:
69
(2) Bangunlah Form untuk simulasi aplikasi Transaksi Mesin ATM dengan
layout seperti terlihat pada gambar 4.9. berikut:
70
BAB 5
PEMROGRAMAN GRAFIS
Tujuan:
1. Mahasiswa dapat menjelaskan konsep dasar pemrograman grafis
pada bahasa Java.
2. Mahasiswa dapat membuat program untuk mengambar bentuk-bentuk
grafik primitive seperti garis, kotak, segitiga dan lain-lain.
3. Mahasiswa dapat membuat program untuk menampilkan dan
mengolah data gambar (image).
71
5.1. DASAR PEMROGRAMAN GRAFIS
Salah satu cara untuk membuat aplikasi grafis dengan java
adalah dengan membuat class yang merupakan turunan dari class
canvas. Dalam class inilah kita meletakkan gambar atau animasi, dan
membentuk sebuah obyek untuk mengakses gambar kita tersebut. Berikut
ini adalah contoh program dan penjelasan langkah demi langkah
pembuatan program yang berhubungan dengan grafis dalam Java.
import javax.swing.*;
import java.awt.*;
void KomponenVisual()
{
getContentPane().setLayout(new BorderLayout());
getContentPane().add(gambar,BorderLayout.CENTER);
setVisible(true);
}
72
Gambar 5.1. Contoh aplikasi grafis sederhana
73
getContentPane().add(gambar,BorderLayout.CENTER);
Layout diatur menggunakan BorderLayout dan obyek gambar
diletakkan dalam salah satu diantara lima posisi yang ada.
g.drawLine(10,10,250,10);
Digunakan untuk mengambar bentuk garis dimana argumen pertama
dan kedua menunjukkan koordinat titik awal garis, argumen ketiga dan
keempat menunnjukkan koordinat titik akhir garis.
g.drawRect(10,20,100,50);
74
Digunakan untuk menggambar bentuk segi empat dimana argumen
pertama dan kedua merupakan ujung kiri atas, argumen krtiga dan
keempat menunjukkan ujung kanan bawah dari segi empat.
g.drawOval(120,20,50,50);
Digunakan untuk menggambar bentuk lingkaran dimana argumen
pertama dan kedua merupakan koordinat pusat, argumen krtiga jarak
horisontal dan argumen keempat adalah jarak vertikal.
75
Menggambar()
{
super("Aplikasi Grafis Sederhana");
setLocation(100,100);
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
getContentPane().setLayout(new BorderLayout());
getContentPane().add(gambar,BorderLayout.CENTER);
setVisible(true);
}
76
import javax.swing.*;
import java.awt.*;
g.setColor(Color.red);
for(int i=0; i<360; i+=1)
{
int y=(int) (Math.sin(i*Math.PI/180)*100)*-1;
g.drawOval(i+10,y+110,1,1);
}
g.setColor(Color.blue);
for(int i=0; i<360; i+=1)
{
int y=(int) (Math.cos(i*Math.PI/180)*100)*-1;
g.drawOval(i+10,y+110,1,1);
}
}
}
Animasi()
{
setTitle("Plotting Fungsi Sinus dan Cosinus ");
setLocation(200,100);
setSize(400,260);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
77
}
void KomponenVisual()
{
getContentPane().setLayout(new BorderLayout());
getContentPane().add(gambar, BorderLayout.CENTER);
setVisible(true);
}
78
g.drawLine(5,110,380,110);
g.drawString("1",2,14);
g.drawString("-1",14,210);
g.drawString("0",13,123);
g.drawString("90",100,123);
g.drawString("180",190,123);
g.drawString("270",280,123);
g.drawString("360",370,123);
79
Program di atas akan langsung menampilkan grafik sinus ketika
program dijalankan. Kita dapat menambahkan satu baris kode di dalam
proses plotting untuk memunculkan efek animasi. Baris kode berikut :
try
{
Thread.sleep(10);
}
catch(Exception e)
{
}
Perlu ditambahkan pada saat plotting grafik sinus sehingga kode pada
bagian proses menampilkan gambar akan berubah menjadi :
g.setColor(Color.red);
for(int i=0; i<360; i+=1)
{
int y=(int) (Math.sin(i*Math.PI/180)*100)*-1;
g.drawOval(i+10,y+110,1,1);
try
{
Thread.sleep(10);
}
catch(Exception e)
{
}
}
Untuk plotting grafik cosinus dilaksanakan dengan cara yang sama, hanya
mengubah sin menjadi cos.
80
class KanvasAnimasi extends Canvas
{
public void paint(Graphics g)
{
g.setColor(Color.black);
g.drawLine(10,10,10,210);
g.drawLine(5,110,380,110);
g.drawString("1",2,14);
g.drawString("-1",14,210);
g.drawString("0",13,123);
g.drawString("90",100,123);
g.drawString("180",190,123);
g.drawString("270",280,123);
g.drawString("360",370,123);
g.setColor(Color.red);
for(int i=0; i<360; i+=1)
{
int y=(int) (Math.sin(i*Math.PI/180)*100)*-1;
g.drawOval(i+10,y+110,1,1);
try
{
Thread.sleep(10);
}
catch(Exception e)
{
}
}
g.setColor(Color.blue);
for(int i=0; i<360; i+=1)
{
int y=(int) (Math.cos(i*Math.PI/180)*100)*-1;
g.drawOval(i+10,y+110,1,1);
try
{
Thread.sleep(10);
}
catch(Exception e)
{
}
}
}
81
}
Animasi()
{
setTitle("Plotting Fungsi Sinus dan Cosinus ");
setLocation(200,100);
setSize(400,260);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void KomponenVisual()
{
getContentPane().setLayout(new BorderLayout());
getContentPane().add(gambar, BorderLayout.CENTER);
setVisible(true);
}
82
boolean move=true;
int posisi;
int point;
String pointanda="";
int level=0;
public GambarBolaAnimasi4()
{
x=200;
y=100;
dX=5;
dY=5;
setBackground(Color.white);
}
83
System.exit(0);
}
if(posisi==2 && y>130 && x<150)
{
move=false;
JOptionPane.showMessageDialog(null,"Selamat, Point anda "+
point,"Informasi",JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
if((posisi==1 || posisi==2) && y>130)
{
point=point+1;
}
}
String pointanda=Integer.toString(point);
System.out.println(pointanda);
if(point>5)
{
level=5;
}
}
84
{
}
}
}
}
public Animasi4()
{
super("Game Sederhana dengan Level");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(100,100);
setSize(310,220);
proses.start();
}
void komponenVisual()
{
getContentPane().setLayout(null);
getContentPane().add(gambar);
gambar.setBounds(0,0,300,140);
getContentPane().add(kiri);
kiri.setBounds(0,140,150,25);
getContentPane().add(kanan);
kanan.setBounds(150,140,150,25);
getContentPane().add(lblPoint);
lblPoint.setBounds(150,165,150,20);
setVisible(true);
}
void aksiReaksi()
{
kanan.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent k)
{
if(k.getKeyCode()==k.VK_RIGHT)
85
{
gambar.move=true;
kiri.setVisible(true);
kiri.requestFocus(true);
kanan.setVisible(false);
gambar.posisi=1;
}
}
});
kiri.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent k)
{
if(k.getKeyCode()==k.VK_LEFT)
{
gambar.move=true;
kanan.setVisible(true);
kanan.requestFocus(true);
kiri.setVisible(false);
gambar.posisi=2;
}
}
});
}
86
Gambar 5.4 Contoh permainan sederhana
Ketika pada suatu saat kita tidak berhasil menahan jatuhnya bola, maka
akan muncul pesan keberhasilan kita.
87
yang menunjukkan bahwa bila posisi batang penahan disebelah kiri yang
disimbolkan dengan angka 1 dan koordinat y>130 dan koordinat x>150
maka program akan berhenti. Aturan yang lain adalah bila posisi batang
penahan berada di kanan dan koordinat >130 dan koordinat x<150 maka
program juga akan berhenti.
if(point>5)
{
level=5;
}
Dimana variabel level ini akan diberikan sebagai faktor penjumlah pada
kode program yang berurusan dengan gerakan bola, yaitu :
x+=dX;
y+=dY;
if(x<0)
{
dX=5+level;
}
else if(x+10>getWidth())
88
{
dX=-5-level;
}
if(y<0)
{
dY=5+level;
}
else if(y+10>getHeight())
{
dY=-5-level;
}
89
class AmbilCitra3 extends JFrame
{
KanvasCitra3 gambar=new KanvasCitra3();
public AmbilCitra3()
{
setTitle("Dasar Pengolahan Citra");
setLocation(0,0);
setSize(176,317);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
getContentPane().setLayout(new BorderLayout());
getContentPane().add(gambar,BorderLayout.CENTER);
setVisible(true);
}
90
Penjelasan program di atas adalah sebagai berikut:
Seperti juga program-progran grafis sebelumnya, program ini terdiri dari
dua class yaitu class KanvasCitra3 dan class AmbilCitra3. Dalam class
KanvasCitra3 terdapat sintaks :
Image image=new ImageIcon("bungaku.jpg").getImage()
Yang digunakan untuk mengambil citra dari sebuah file.
g.drawImage(image,0,2,this)
Digunakan untuk menampilkan gambar ke dalam frame.
BufferedImage bi=null;
try
{
Image image=new ImageIcon("bungaku.jpg").getImage();
g.drawImage(image,0,2,this);
bi=new BufferedImage(image.getWidth(null),
image.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2=bi.createGraphics();
g2.drawImage(image,null,null);
float[] edgeKernel={0,-1,0,
-1,4,-1,
0,-1,0};
BufferedImageOp edgeop=new ConvolveOp (new Kernel(3, 3,
edgeKernel), ConvolveOp.EDGE_NO_OP, null);
BufferedImage image3=edgeop.filter(bi,null);
91
g.drawImage(image3,170,2,this);
float[] sharpKernel={0,-1,0,
-1,5,-1,
0,-1,0};
BufferedImageOp sharpop=new ConvolveOp(new Kernel(3, 3,
sharpKernel), ConvolveOp.EDGE_NO_OP, null);
BufferedImage image4=sharpop.filter(bi,null);
g.drawImage(image4,340,2,this);
}
catch (Exception e)
{
System.out.println(e);
}
}
}
public Citra7()
{
setTitle("Dasar Pengolahan Citra");
setLocation(0,0);
setSize(510,317);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
getContentPane().setLayout(new BorderLayout());
getContentPane().add(gambar,BorderLayout.CENTER);
setVisible(true);
}
92
Hasil dari program di atas adalah sebagai berikut:
Dasar pengolahan citar pada buku ini sifatnya dasar dan hanya berupa
contoh-contoh dari pengolahan citra. Untuk mempelajari lebih lanjut dapat
dibaca pada materi pengolahan citra.
5.3. Latihan
(1) Kembangkan program Animasi.java di depan dengan menambahkan
batas awal dan batas akhir yang dapat dimasukkan secara interaktif
melalui keyboard. Contoh tampilannya adalah sebagai berikut :
93
(2) Ubahlah program di atas dengan menambahkan tombol sinus dan
cosinus dimana bila diklik tombol sinus maka grafik sinus yang akan
ditampilkan dan bila diklik tombol cosinus maka grafik cosinus yang
akan ditampilkan. Berikut adalah ilustrasi output yang diharapkan.
94
BAB 6
KONEKSI DATABASE
Tujuan:
1. Mahasiswa dapat menjelaskan konsep dasar pemrograman database
pada bahasa Java.
2. Mahasiswa dapat melakukan koneksi database
3. Mahasiswa dapat membuat program untuk mengelola data pada suatu
database.
95
Gambar 6.1. Membuat file database
96
Klik New, pilih Design New, klik OK
97
Pada tabel di atas kita isi dengan field dan tipe data yang akan kita
gunakan sebagai berikut:
98
6.2. Membuat ODBC
ODBC merupakan aturan digunakan uttuk mengakses sebuah
database. Dengan menggunakan ODBC ini maka akses sebuah database
dapat dilakukan cukup dengan menggunakan nama yang kita kehendaki.
Cara membuat ODBC adalah dengan masuk ke control panel,
masuk ke Administrative tool, memilih data source dan membuat nama
ODBC berdasar driver database yang digunakan.
Pilih Control Panel
99
Pilih Administrative Tool pada control panel sehingga muncul tampilan
berikut:
Pilih Data Source dan akan muncul tampilan Data Source lalu klik Add
untuk menambahkan User Data Source
100
Menentukan driver database yang digunakan
101
Klik tombol advanced untuk mengisi login name dan password.
Hasil akhir pembuatan ODBC adalah muncul nama dari koneksi yang
telah kita buat pada user DSN
102
6.3. Koneksi Database
ODBC (Open DataBase Connection) adalah suatu protocol
koneksi database standard yang disediakan oleh sistem operasi. Hal ini
perlu dilakukan karena saat ini DBMS dan aplikasi merupakan dua hal
yang berbeda. Setelah ODBC dibuat, kita dapat menghubungkan sebuah
program untuk mengakses database tersebut. Cara menghubungkan
aplikasi dan database ini dinamakan koneksi database.
Contoh program berikut ini digunakan untuk melakukan koneksi
database.
import javax.swing.*;
import java.awt.*;
import java.sql.*;
103
Gambar 6.14. Tampilan konfirmasi koneksi database
104
JLabel lbltugas4=new JLabel("Tugas4");
JTextField txtugas4=new JTextField(10);
JLabel lbltugas5=new JLabel("Tugas5");
JTextField txtugas5=new JTextField(10);
JLabel lbluts=new JLabel("UTS");
JTextField txuts=new JTextField(10);
JLabel lbluas=new JLabel("UAS");
JTextField txuas=new JTextField(10);
JButton tblsimpan=new JButton("Save");
JButton tblupdate=new JButton("Update");
JButton tblkeluar=new JButton("Exit");
String nim="";
String nama="";
String kelas="";
String kelompok="";
String tugas1="";
String tugas2="";
String tugas3="";
String tugas4="";
String tugas5="";
String uts="";
String uas="";
String cari="";
AplikasiPenilaian()
{
txtugas1.setText("0");
txtugas2.setText("0");
txtugas3.setText("0");
txtugas4.setText("0");
txtugas5.setText("0");
txuts.setText("0");
txuas.setText("0");
setTitle("Lembar Penilaian");
setLocation(300,100);
setSize(300,320);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void komponenVisual()
{
getContentPane().add(lblnim);
lblnim.setBounds(10,10,70,20);
105
getContentPane().add(txnim);
txnim.setBounds(75,10,100,20);
getContentPane().add(tblcari);
tblcari.setBounds(180,10,95,20);
getContentPane().add(lblnama);
lblnama.setBounds(10,30,70,20);
getContentPane().add(txnama);
txnama.setBounds(75,30,200,20);
getContentPane().add(lblkelas);
lblkelas.setBounds(10,50,100,20);
getContentPane().add(kelasA);
kelasA.setBounds(75,50,50,20);
getContentPane().add(kelasB);
kelasB.setBounds(125,50,50,20);
getContentPane().add(kelasC);
kelasC.setBounds(175,50,50,20);
grupkelas.add(kelasA);
grupkelas.add(kelasB);
grupkelas.add(kelasC);
getContentPane().add(lblkelompok);
lblkelompok.setBounds(10,70,100,20);
getContentPane().add(cbkelompok);
cbkelompok.setBounds(75,70,100,20);
getContentPane().add(lblnilai);
lblnilai.setBounds(10,110,100,20);
getContentPane().add(lbltugas1);
lbltugas1.setBounds(10,130,100,20);
getContentPane().add(txtugas1);
txtugas1.setBounds(75,130,100,20);
getContentPane().add(lbltugas2);
lbltugas2.setBounds(10,150,100,20);
getContentPane().add(txtugas2);
txtugas2.setBounds(75,150,100,20);
getContentPane().add(lbltugas3);
lbltugas3.setBounds(10,170,100,20);
getContentPane().add(txtugas3);
txtugas3.setBounds(75,170,100,20);
getContentPane().add(lbltugas4);
lbltugas4.setBounds(10,190,100,20);
getContentPane().add(txtugas4);
txtugas4.setBounds(75,190,100,20);
getContentPane().add(lbltugas5);
lbltugas5.setBounds(10,210,100,20);
getContentPane().add(txtugas5);
106
txtugas5.setBounds(75,210,100,20);
getContentPane().add(tblsimpan);
tblsimpan.setBounds(180,210,100,20);
getContentPane().add(lbluts);
lbluts.setBounds(10,230,100,20);
getContentPane().add(txuts);
txuts.setBounds(75,230,100,20);
getContentPane().add(lbluas);
lbluas.setBounds(10,250,100,20);
getContentPane().add(txuas);
txuas.setBounds(75,250,100,20);
getContentPane().add(tblupdate);
tblupdate.setBounds(180,230,100,20);
getContentPane().add(tblkeluar);
tblkeluar.setBounds(180,250,100,20);
getContentPane().setLayout(null);
setVisible(true);
}
void AksiReaksi()
{
tblsimpan.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
if (event.getSource()==tblsimpan)
{
try
{
nim=txnim.getText();
nama=txnama.getText();
if(kelasA.isSelected()==true)
kelas=kelasA.getText();
if(kelasB.isSelected()==true)
kelas=kelasB.getText();
if(kelasC.isSelected()==true)
kelas=kelasC.getText();
kelompok=(String) cbkelompok.getSelectedItem();
tugas1=txtugas1.getText();
tugas2=txtugas2.getText();
tugas3=txtugas3.getText();
tugas4=txtugas4.getText();
tugas5=txtugas5.getText();
107
uts=txuts.getText();
uas=txuas.getText();
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection connection = DriverManager.getConnection("jdbc:
odbc:AksesDataMhs;uid='admin';pw='admin'");
Statement statement = connection.createStatement();
String sql="insert into MasterMhs values ('"+nim+"','"+nama+"',
'"+kelas+"','"+kelompok+"','"+tugas1+"','"+tugas2+"'
'"+tugas3+"','"+tugas4+"','"+tugas5+"','"+uts+"',
'"+uas+"');";
statement.executeUpdate(sql);
statement.close();
connection.close();
System.out.println("Data telah masuk");
txnim.setText("");
txnama.setText("");
txnim.requestFocus();
}
catch(Exception e)
{
System.out.println("Error :"+e);
}
}
}
});
}
108
Gambar 6.15. Tampilan memasukkan data
Setelah kita klik tombol Save maka data akan masuk ke dalam
database DataMahasiswa. Untuk memastikan kebenarannya kita dapat
membuka database tersebut dan melihat data pada tabel MasterMhs.
tblcari.addActionListener(new ActionListener()
{
109
public void actionPerformed(ActionEvent e)
{
if (e.getSource()==tblcari)
{
try
{
cari=txnim.getText();
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection connection = DriverManager.getConnection("jdbc:odbc:
AksesDataMhs;uid='admin';pw='admin'");
Statement statement = connection.createStatement();
String sql="select * from MasterMhs where NIM like '"+cari+"'";
ResultSet rs=statement.executeQuery(sql);
if(rs.next())
{
txnim.setText(rs.getString(1));
txnama.setText(rs.getString(2));
kelas=rs.getString(3);
if(kelas.equals("A"))
{
kelasA.setSelected(true);
}
else if(kelas.equals("B"))
{
kelasB.setSelected(true);
}
else
{
kelasC.setSelected(true);
}
cbkelompok.setSelectedItem(rs.getString(4));
txtugas1.setText(rs.getString(5));
txtugas2.setText(rs.getString(6));
txtugas3.setText(rs.getString(7));
txtugas4.setText(rs.getString(8));
txtugas5.setText(rs.getString(9));
txuts.setText(rs.getString(10));
txuas.setText(rs.getString(11));
}
else
{
110
System.out.println(nim+" tidak ada");
}
statement.close();
connection.close();
}
catch(Exception ex)
{
System.out.println("Error :"+ex);
}
}
}
});
111
public void actionPerformed(ActionEvent event)
{
if (event.getSource()==tblupdate)
{
try
{
nim=txnim.getText();
nama=txnama.getText();
if(kelasA.isSelected()==true) kelas=kelasA.getText();
if(kelasB.isSelected()==true) kelas=kelasB.getText();
if(kelasC.isSelected()==true) kelas=kelasC.getText();
kelompok=(String) cbkelompok.getSelectedItem();
tugas1=txtugas1.getText();
tugas2=txtugas2.getText();
tugas3=txtugas3.getText();
tugas4=txtugas4.getText();
tugas5=txtugas5.getText();
uts=txuts.getText();
uas=txuas.getText();
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection connection =
DriverManager.getConnection("jdbc:odbc:
AksesDataMhs;uid='admin';pw='admin'");
Statement statement = connection.createStatement();
String sql="update MasterMhs set nama='"+nama+"',kelas='"
+kelas+"',kelompok='"+kelompok+"',tugas1='"+tugas1+"',
tugas2='"+tugas2+"',tugas3='"+tugas3+"',tugas4='"+tugas4+"',
tugas5='"+tugas5+"',uts='"+uts+"',uas='"+uas+"'
where NIM='"+nim+"'";
statement.executeUpdate(sql);
statement.close();
connection.close();
System.out.println("Data teredit");
}
catch(Exception e)
{
System.out.println("Error :"+e);
}
}
}
});
Cara kerja program dimulai dengan memasukkan NIM mahasiswa yang
akan dilakukan perubahan lalu klik tombol cari, seperti berikut:
112
Gambar 6.18. Update data
Kemudian ubah beberapa nilai attrbut seperti gambar 6.18 di atas. Setelah
ditemukan ubah atribut yang ingin diubah, dan klik tombol update.
Misalnya kita ingin mengubah kelompok menjadi kelompok 6. Untuk
melihat perubahan, table Data Mahasiswa dapat kita buka menggunakan
Ms. Access, dan hasilnya seperti pada gambar 6.19 berikut.
113
Agar tidak selalu membuka dan menutup database untuk melihat
data mahasiswa, kita juga dapat membuat sebuah aplikasi yang secara
spesifik digunakan untuk melihat data melalui sebuah tabel. Programnya
adalah sebagai berikut :
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
void KomponenVisual()
{
tableView=new JTable(data,headers);
JScrollPane scrollpane=new JScrollPane(tableView);
scrollpane.setPreferredSize(new Dimension(500,80));
getContentPane().setLayout(new BorderLayout());
getContentPane().add(BorderLayout.CENTER,scrollpane);
pack();
setVisible(true);
}
void KoneksiDatabase()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
114
Connection
connection=DriverManager.getConnection("jdbc:odbc:AksesDataMhs;uid
='admin';pw='admin'");
Statement
state=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIV
E,ResultSet.CONCUR_READ_ONLY);
String sql="select * from MasterMhs";
ResultSet rs=state.executeQuery(sql);
rs.last();
n=rs.getRow();
data=new Object[n][11];
int p=0;
rs.beforeFirst();
while(rs.next())
{
data[p][0]=rs.getString(1);
data[p][1]=rs.getString(2);
data[p][2]=rs.getString(3);
data[p][3]=rs.getString(4);
data[p][4]=rs.getString(5);
data[p][5]=rs.getString(6);
data[p][6]=rs.getString(7);
data[p][7]=rs.getString(8);
data[p][8]=rs.getString(9);
data[p][9]=rs.getString(10);
data[p][10]=rs.getString(11);
p++;
}
state.close();
connection.close();
}
catch(Exception DBException)
{
System.err.println("Error : "+DBException);
}
}
115
Hasil program di atas adalah sebagai berikut:
vd.KoneksiDatabase();
vd.KomponenVisual();
}
});
116