Anda di halaman 1dari 104

BAHASA PEMROGRAMAN JAVA

GUI

WINDU GATA, SKOM


1

PENDAHULUAN
Buku Bahasa Pemrograman JAVA-GUI, yang ada dihadapan anda sekarang, menggunakan bahasa pemrograman java standard J2SDK yang dikembangkan oleh Sun Microsystem (www.sun.com). Selain itu, buku ini disusun menggunakan konsep praktik langsung (learning by doing) yang dilengkapi pembahasan contoh program dengan menggunakan beberapa objek java, lengkap dengan pembahasannya. Harapannya, buku ini bisa mengantarkan pembaca mampu mengembangkan program GUI (Grafik User Interface) layaknya form dan objek lainnya. Sekaligus dapat digunakan dalam form, grafik 2 (dua) dimensi, event handling, error handling, file akses, multithread, dan database (mysql). Dikarenakan buku ini diperuntukkan pada pembaca yang sudah mengenal dasardasar algoritma dan dasar-dasar bahasa pemrograman java. Pembahasannya terdiri dari 14 (empat belas) bab, yaitu : BAB I Pengenalan GUI dan cara menggunakan Jframe. BAB II Penggunaan grafik 2D pada Jframe. BAB III Contoh program input mahasiswa menggunakan objek JLabel, JTextField, JCheckBox, JRadioButton, JComboBox, JButton , Action Listener Dan Layout (FlowLayout dan Border Layout). BAB IV Merubah contoh program input pada bab III dengan merubah objek JCheck box dengan JList Multi Selected, dan objek JRadioButton dengan JList Single Selected. Sedangkan layout yang digunakan adalah Border Layout BAB V Bab ini menerangkan bagaimana menggunakan peralatan mouse dan keyboard dengan fasilitas java objek MouseMotionListener, MouseListener, KeyListener, dan ActionListener. BAB VI Membuat program konversi susu menggunakan objek JSlider BAB VII Membuat program editor berita menggunakan objek JMenuBar, JMenu, JPopupMenu, JMenuItem, JTextArea, dan Box BAB VIII Mengenal penggunaan JInternalFrame BAB IX Mengenal penggunaan tampilan group beraupa tab dengan objek JTabbedPane BAB X Mengenal model desain tampilan pada standar java BAB XI Bagaimana cara mengatasi kesalahan program atau yang kita kenal dengan Error Exception.

BAB XII Thread BAB XIII Mengenal cara mengakses file dan mengembangkan program pada bab VII menggunakan fasilitas akses file. BAB XIV Cara menggunakan database mysql dan interface koneksi database JDBC

BAB I

GUI (Grafik User Interface)


Pertanyaan mendasar mengenai penggunaan tampilan atau GUI dalam program adalah seberapa penting hal itu dilakukan. Bukankah program sudah berjalan sesuai dengan permintaan? Pertanyaan itu biasanya menghantui setiap pengembang program (programmer) pada saat membuat program. Tentu saja kepentingan penggunaan tampilan akan berpulang pada penempatan program itu sendiri. Untuk program yang hanya ditempatkan pada sisi komputer server yang jarang berinteraksi dengan pengguna, maka fungsi dasar program dirasa cukup memadai. Tetapi apabila program tersebut diperkirakan akan banyak berinteraksi dengan pengguna, maka ada baiknya jika program menggunakan tampilan. Beberapa alasan bahwa program harus menggunakan tampilan, yaitu - Dengan tampilan, program akan nampak jauh lebih menarik - Interaktif - User Friendly atau mudah dalam penggunaannya - Dapat berinteraksi dengan peralatan seperti mouse, joystick dan peralatan lainnya. Jika pengembang program peduli terhadap tampilan, biasanya program yang dihasilkan akan lebih diterima oleh pengguna. Bahkan sering karena tampilan yang menarik, program itu memiliki nilai yang lebih tinggi dibandingkan dengan program lain dengan tampilan yang sederhana. Saat ini, terdapat beberapa model Frame GUI yang dapat digunakan saat mengembangkan program java yaitu java.awt.* dan javax.swing.*. Didalam buku ini, untuk tampilan GUI, penulis menggunakan javax.swing.*, yaitu JFrame, Jlabel, JTextField, JRadioButton, JCheckBox, JComboBox, JTextArea, JSlider, JMenuBar, JPopUpMenu, JMenuItem, dan tools lainnya. JFRAME Saat kita membuat program java GUI, yang pertama kali kita harus kuasai adalah penggunaan JFrame. JFrame digunakan untuk mendesain model tampilan yang didalamnya dapat kita tempatkan komponen-komponen lainnya. Contoh penggunaan tampilan frame pada program java :
//program pertama //Tidak Menggunakan Construktor import javax.swing.JFrame; class frame1{ public static void main(String args []){ JFrame tampil = new JFrame(); tampil.show(); } }

Atau
//program kedua //menggunakan konstruktor import javax.swing.*; class frame21 extends JFrame{ frame21(){ //construktor show();

} } class frame22{ public static void main(String args[]){ new frame21(); } }

Apabila kedua program tersebut dikompilasi dan dijalankan maka akan terdapat tampilan seperti dibawah ini :

Gambar 1. JFrame Untuk membuat frame dengan tulisan Universitas Budi Luhur, pada posisi x = 10 dan Y = 100, lebar = 300, tinggi = 200, Resizable false, dan akan terhapus di alokasi memori setelah aplikasi di tutup seperti pada gambar 2 sebagai berikut :

setLocation (10,100);

super("Universitas Budi Luhur");

setResizable(false);

this.setSize(300,200)

Gambar 2. JFrame Dan Property

//program ketiga import javax.swing.*; class frame61 extends JFrame{ frame61(){ super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation (10,100); this.setSize(300,200); setResizable(false); show(); } } class frame62{ public static void main (String args[]){ new frame61(); } }

BAB II

GRAFIK DUA DIMENSI (2D) PADA JFRAME


Grafik dua dimensi (2D) menggunakan class yang terdapat pada java.awt.*, yaitu Canvas. Komponen Canvas tersebut berbentuk kotak kosong pada layar. Didalam Canvas tersebut dapat kita gunakan sebagai media gambar 2 (dua) dimensi. Penggunaan Canvas harus dibarengi dengan sub class paint sebagai media gambar yang berupa perintah. Cara menggabungkan penggunaan Canvas dan Jframe adalah sebagai berikut :

Gambar 3. Grafik dua Dimensi (2D) Dan JFRAME

//program ke empat import javax.swing.*; import java.awt.*; //Class Canvas class grap1 extends Canvas{ public void paint (Graphics g){ //(x,y,width,height) g.drawRect(1,5,50,20); g.drawLine(35,50,100,70); //(x,y,width,height,arcwidth,archeight g.drawRoundRect(1,50,30,40,5,100); g.setColor(Color.YELLOW); //set warna g.drawOval(110,50,40,30); g.setFont(new Font("Tahoma",Font.ITALIC,20)); g.drawString("9511500134",80,15); g.setColor(Color.BLUE); //set warna g.fillRect(1,110,30,20); g.fillOval(50,110,30,20); } } //Class frame class grap11 extends JFrame{ private Container konten=new Container(); private grap1 duaD =new grap1(); grap11(){

super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(10,100); this.setSize(250,200); konten= getContentPane(); konten.add(duaD); show(); } public static void main(String args[]){ new grap11(); } }

Contoh tampilan pada gambar ke 3, terdapat 2 (dua) class, yaitu


class grap1 extends Canvas class grap11 extends JFrame

Pada class pertama, class yang bernama grap1, merupakan turunan dari objek Canvas yang berasal dari java.awt yang digunakan untuk melakukan design grafik 2D. Adapun struktur dasar dari canvas bersifat abstrak dengan bentuk dasar pemgrogramannya adalah sebagai berikut :
[public|private] class <nameclass> extends Canvas{ public void paint(Graphics <objectname>){ .. } }

Perumpamaan membuat gambar 2D menggunakan objek Canvas adalah seperti menggambar pada sebuah kertas kosong dengan pensil gambar. Hanya saja penggunaan objek Canvas menggunakan posisi piksel pada frame. Posisi 0 pada horizontal (X=0) dan posisi 0 pada vertikal (Y=0), menunjukan posisi tersebut berada pada posisi ujung paling kiri dan paling atas dari frame. Jika X > 0 maka posisi berada ke arah kanan dari frame, sedangkan jika Y > 0 maka posisi berada ke arah bawah dari frame. Banyak objek yang dapat digunakan untuk menggambar 2D pada Canvas, yaitu bulat, kotak, garis dan lain-lain. Pada gambar 3 terdapat beberapa objek, yaitu : - Kotak
drawRect (x,y,width, height)

Kotak dengan bundaran di pinggir


drawRoundRect (x, y, width, height, arcwidth, archeight)

Kotak dengan warna didalamnya


fillRect (x,y,width,height)

Penggunaan Font
setFont(new Font("<Model Font>", <STANDAR|BOLD|ITALIC>, <Size>))

String
drawstring(<tulisan>,x,y)

Garis
drawLine(x,y,width,height)

Bundar
drawOval(x,y,width,height)

Bundar dengan warna didalamnya 8

fillOval(x,y,width, height)

Pewarnaan
setColor(<color>)

Ketika hendak menggunakan Class pertama pada class kedua (frame) perlu menggunakan perintah :
private grap1 duaD =new grap1();

Kemudian class pertama tersebut ditampilkan pada JFrame dengan menggunakan perintah :
konten.add(duaD);

Latihan 1 : Buatlah program 2 (dua) dimensi seperti pada gambar 4 dibawah ini

Gambar 4. Grafik 2D bendera Merah Putih

BAB III

JLabel, JTextField, JCheckBox, JRadioButton, JComboBox, JButton , Action Listener Dan Layout (FlowLayout dan Border Layout)
Objek GUI yang dapat digunakan pada bahasa pemrograman java standard, khususnya javax.swing.*, sangat banyak dan fleksibel. Contoh pada gambar 5, menunjukan form input-an mahasiswa yang menggunakan beberapa objek javax.swing.*, yaitu : JLabel, JTextField, JCheckBox, JRadioButton, JComboBox dan JButton. Ditambah dengan penggunaan Action Listener dari java.awt.event.* dan model-model tampilan (FlowLayout dan GridLayout )
JLabel JTextField

JCheckBox JRadioButton JComboBox JButton

Gambar 5. Input Data Mahasiswa Sebelum membuat program, sebaiknya kita mengenal masing-masing objek satu persatu, yaitu : JLabel Berfungsi untuk menampilkan tulisan atau gambar ikon pada frame

Constructor
JLabel()

Membuat JLabel tanpa gambar dan tanpa tulisan didalamnya


JLabel(Icon image) Membuat JLabel dengan gambar. JLabel(Icon image, int horizontalAlignment) Membuat JLabel dengan Gambar dan model horizontal alignment (LEFT, CENTER, RIGHT, LEADING atau TRAILING) JLabel(String text) Membuat JLabel dengan isi teks didalamnya. JLabel(String text, Icon icon, int horizontalAlignment) Membuat JLabel dengan isi text didalamnya, gambar dan horizontal

10

alignment (LEFT, CENTER, RIGHT, LEADING atau TRAILING).


JLabel(String text, int horizontalAlignment) Membuat JLabel dengan isi text didalamnya dan horizontal alignment (LEFT, CENTER, RIGHT, LEADING atau TRAILING).

Beberapa Method yang harus diketahui


String getText()

Mendapatkan nilai string pada JLabel


void setText(String text)

Memberikan nilai string pada JLabel Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/label.html JTextField Berfungsi sebagai media edit single teks

Constructor
JTextField()

Membuat JTextField.
JTextField(Document doc, String text, int columns) Membuat JTextField yang menggunakan model text, isi dari JTextField

dan kolom.
JTextField(int columns) Membuat JTextField dengan model kolom. JTextField(String text) Membuat JTextField dengan isi teks didalamnya. JTextField(String text, int columns) Membuat JTextField dengan isi teks didalamnya dan kolom.

Beberapa Method yang harus diketahui


void addActionListener(ActionListener l)

Memberikan action listener pada JTextField


String getText()

Mendapatkan nilai string dari JTextField.


void setFont(Font f)

Merubah Font pada JTextField


void setText(String Text)

Memberikan nilai string pada JTextField

11

Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/textfield.html JCheckBox Digunakan untuk pilihan yang dapat lebih dari satu pilihan

Constructor
JCheckBox()

Membuat JCheckBox dalam posisi tidak tercentang/terpilih tanpa text dan ikon.
JCheckBox(Action a)

Creates a check box where properties are taken from the Action supplied.
JCheckBox(Icon icon) Membuat JCheckBox dengan posisi tidak tercentang/terpilih dengan tampilan

gambar ikon.
JCheckBox(Icon icon, boolean selected) Membuat JCheckBox dengan tampilan gambar ikon dan posisi tercentang/terpilih

tergantung dengan parameter Boolean yang diberikan.


JCheckBox(String text) Membuat JCheckBox dengan posisi tidak tercentang/terpilih dengan teks. JCheckBox(String text, boolean selected) Membuat JCheckBox dengan isian berupa teks dan posisi tercentang/terpilih

disesuaikan dengan parameter Boolean yang diberikan.


JCheckBox(String text, Icon icon) Membuat JCheckBox dengan posisi tidak tercentang dengan teks dan tampilan

gambar ikon.
JCheckBox(String text, Icon icon, boolean selected) Membuat JCheckBox dengan teks dengan tampilan gambar ikon dan posisi

tercentang/terpilih disesuaikan dengan parameter Boolean yang diberikan.

Beberapa Method yang harus diketahui


Boolean isSelected()

Mendapatkan nilai dari JCheckBox. Jika tercentang/terpilih maka nilainya adalah true, apabila tidak tercentang nilainya adalah false.
void setSelected()

Memberikan nilai true atau false pada objek JCheckBox.

Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/button.html

12

JRadioButton Digunakan untuk memilih satu dari beberapa pilihan.

Constructor
JRadioButton() Membuat JRadioButton dengan posisi tidak tercentang/terpilih dan tanpa isian

teks.
JRadioButton(Icon icon) Membuat JRadioButton dengan posisi tidak tercentang/terpilih dengan tampilan

gambar dengantanpa teks.


JRadioButton(Icon icon, boolean selected) Membuat JRadioButton dengan gambar, tanpa teks dan posisi tercentang/terpilih

sesuai dengan parameter Boolean yang diberikan.


JRadioButton(String text) Membuat JRadioButton dengan posisi tidak tercentang/terpilih dengan teks. JRadioButton(String text, boolean selected) Membuat JRadioButton dengan teks dan posisi tercentang/terpilih sesuai dengan

parameter boolean yang diberikan.


JRadioButton(String text, Icon icon) Membuat JRadioButton dengan teks dan gambar ikon dengan posisi tidak

tercentang/terpilih.
JRadioButton(String text, Icon icon, boolean selected) Membuat JRadioButton dengan teks, gambar ikon dan posisi tercentang/terpilih

disesuaikan dengan parameter Boolean yang diberikan.

Beberapa Method yang harus diketahui


Boolean isSelected()

Mendapatkan nilai dari JRadioButton. Jika tercentang/terpilih maka nilainya adalah true, apabila tidak tercentang nilainya adalah false.
void setSelected()

Memberikan nilai true atau false pada objek JRadioButton.

Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/button.html Saat penggunaan JRadioButton harus menggunakan ButtonGroup untuk menggabungkan JRadioButton.

13

ButtonGrop Berfungsi sebagai penggabungan komponen pada java

Constructor
ButtonGroup()

Membuat ButtonGroup

Beberapa Method yang harus diketaui


void add(AbstractButton b)

Menambah button pada group.


void remove(AbstractButton b)

Menghapus button dari the group. JComboBox Berfungsi untuk memilih satu dari beberapa pilihan dengan tampilan list dan dapat diedit sesuai dengan kebutuhan

Constructor
JComboBox()

Membuat JComboBox.
JComboBox(ComboBoxModel aModel) Membuat JComboBox dengan ComboBoxModel yang diinginkan (DefaultComboBoxModel, MetalFileChooserUI.DirectoryComboBoxModel, MetalFileChooserUI.FilterComboBoxModel). JComboBox(Object[] items) Membuat JComboBox dengan isian berupa array. JComboBox(Vector items) Membuat JComboBox dengan element Vector.

14

Beberapa Method yang harus diketahui


Void addItem(Object anObject) Menambah Item pada JComboBox. Int getItemCount()

Mendapat nilai jumlah item pada JComboBox.


Object getItemAt(int index)

Mendapatkan nilai dari item dengan Index yang ditentukan.


int getMaximumRowCount()

Mendapatkan jumlah nilai maksimum list pada JComboBox


int getSelectedIndex()

Mendapatkan nilai item ke berapa (index) pada JComboBox.


Object getSelectedItem()

Mendapatkan isi dari JComboBox.


boolean isEditable()

Mendapatkan nilai true atau false dari status editable JComboBox.


void removeAllItems()

Menghapus semua item pada JComboBox.


void removeItem(Object anObject)

Menghapus salah satu item pada JComboBox.


void setEditable(boolean aFlag)

Merubah status editable pada JComboBox.


void setEnabled(boolean b)

Mengaktifkan atau menon aktifkan JComboBox .


void setMaximumRowCount(int count)

Menampilkan maximum item yang dapat ditampilkan JComboBox.


void setSelectedIndex(int anIndex) merubah pointer Index. void setSelectedItem(Object anObject)

Merubah posisi item berdasarkan object. Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html JButton Mengimplementasikan penggunaan push button

Constructor
JButton()

Membuat tombol tanpa teks dan gambar ikon. 15

JButton(Icon icon)

Membuat tombol dengan gambar ikon.


JButton(String text)

Membuat tombol dengan tampilan teks.


JButton(String text, Icon icon)

Membuat tombol dengan tampilan teks dan gambar ikon. Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/button.html Dalam tampilan layar pada gambar 5, apabila tombol Tampilkan ditekan maka akan tampil isi data dari form. Pada pemrograman java, fungsi tersebut dapat menggunakan method addActionListener dan actionPerformed.

Method
void actionPerformed(ActionEvent e)

Mendeteksi Action yang diberikan. Rancangan tampilan dibuat dengan menggunakan layout FlowLayout dan GridLayout. Dalam layout FlowLayout terdapat tiga jenis layout, yaitu FlowLayout.LEFT untuk posisi kiri, FlowLayout.CENTER untuk posisi tengah dan FlowLayout.RIGHT untuk posisi kanan LEFT CENTER RIGHT

Sedangkan GridLayout disesuaikan dengan parameter yang diberikan. Sebagai contoh, GridLayout(6,2), berarti baris dari grid adalah 6 dan kolomnya sebanyak 2. Untuk lebih jelasnya pada gambar 5 adalah sebagai berikut : lblNim lblNama lblSertifikat lblJurusan lblKampus cmdSave chSD rdTI txtNim txtNama chSMP rdMI rdAK chSMA rdTK

cmbKampus cmdExit

Terdapat satu Container dengan layout FlowLayout.CENTER, yang berarti Container selalu berada di tengah Frame. Dengan 3 (tiga) panel, yaitu : - panel1, dengan layout GridLayout(6,2) untuk penempatan lblNim, txtNim, lblNama, txtNama, lblSertifikat, panel2, lblJurusan, panel3, lblKampus, cmbKampus, cmdSave, dan cmdExit

16

panel2, dengan layout GridLayout(1,3) untuk penempatan chSD, chSMP, dan chSMA panel3, dengan layout GridLayout(1,4), untuk penempatan rdTI, rdMI, rdAK, dan rdTKD

Setelah mengenal objek yang akan digunakan, maka kita dapat menganalisa program untuk tampilan pada layer seperti pada gambar 5
//program ke lima import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; class frame23 extends JFrame{ //deklarasi private Container konten = new Container(); private JPanel panel1 = new JPanel(); private JLabel lblNim = new JLabel(); private JTextField txtNim = new JTextField(10); private JLabel lblNama = new JLabel(); private JTextField txtNama = new JTextField(20); private private private private private private private private private private private private JLabel lblSertifikat = new JLabel(); JPanel panel2 = new JPanel(); JCheckBox chSD = new JCheckBox("SD"); JCheckBox chSMP = new JCheckBox("SMP"); JCheckBox chSMA = new JCheckBox("SMA"); JPanel panel3 = new JPanel(); JLabel lblJurusan = new JLabel(); ButtonGroup grpJurusan = new ButtonGroup(); JRadioButton rdTI = new JRadioButton("TI"); JRadioButton rdMI = new JRadioButton("MI"); JRadioButton rdAK = new JRadioButton("AK"); JRadioButton rdTK = new JRadioButton("TK");

private JLabel lblKampus = new JLabel(); String sKampus[] = {"Cempaka Putih","Cileduk","Roxy","Salemba"}; private JComboBox cmbKampus = new JComboBox(sKampus); private JButton cmdSave = new JButton("Tampilkan"); private JButton cmdEnd = new JButton("Selesai"); frame23(){ super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(10,100); this.setSize(500,200); konten=getContentPane(); konten.setLayout(new FlowLayout(FlowLayout.CENTER)); lblNim.setText("NIM"); lblNama.setText("NAMA"); lblSertifikat.setText("Sertifikat"); lblJurusan.setText("Jurusan"); lblKampus.setText("Kampus"); panel1.setLayout(new GridLayout(6,2)); panel1.add(lblNim); panel1.add(txtNim); panel1.add(lblNama); panel1.add(txtNama); panel1.add(lblSertifikat); panel2.setLayout(new GridLayout(1,3)); panel2.add(chSD);

17

panel2.add(chSMP); panel2.add(chSMA); panel1.add(panel2); grpJurusan.add(rdTI); grpJurusan.add(rdMI); grpJurusan.add(rdAK); grpJurusan.add(rdTK); panel3.setLayout(new GridLayout(1,4)); panel3.add(rdTI); panel3.add(rdMI); panel3.add(rdAK); panel3.add(rdTK); panel1.add(lblJurusan); panel1.add(panel3); cmbKampus.setSelectedIndex(1); cmbKampus.setMaximumRowCount(3); panel1.add(lblKampus); panel1.add(cmbKampus); itemHandler itemHandler = new itemHandler(); panel1.add(cmdSave); cmdSave.addActionListener(itemHandler); panel1.add(cmdEnd); cmdEnd.addActionListener(itemHandler); konten.add(panel1); show(); } private class itemHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ Object obj=e.getSource(); //mendapatkan nama objek action if(obj==cmdSave){ String sTampil; sTampil = "NIM : " + txtNim.getText(); sTampil+= "\nNama : " + txtNama.getText(); sTampil+= "\nSertifikat"; if (chSD.isSelected()) sTampil+= ", SD"; if (chSMP.isSelected()) sTampil+= ", SMP"; if (chSMA.isSelected()) sTampil+= ", SMA"; sTampil+= "\nJurusan"; if (rdTI.isSelected()) sTampil+= ", TI"; else if(rdMI.isSelected()) sTampil+=",MI"; else if(rdAK.isSelected()) sTampil+=",AK"; else if(rdTK.isSelected()) sTampil+=",TK"; else sTampil+=", Ngak Jelas"; sTampil+="\nKampus,"; sTampil+=cmbKampus.getItemAt( cmbKampus.getSelectedIndex()); JOptionPane.showMessageDialog(null, sTampil , "HASIL", JOptionPane.INFORMATION_MESSAGE); } else {System.exit (0);} } } public static void main(String args[]){ new frame23(); } }

18

BAB IV

JList (Single Selected dan Multi Selected) DAN LAYOUT (Border Layout)
Gambar 6 adalah merupakan model form yang mirip seperti pada gambar 5 dimana JCheckBox diganti dengan JList model multiselection dan JRadioButton diganti dengan JList model singleselection.

JList Multiple Selection

JList Single Selection

Gambar 6. Form Input Mahasiswa (JLIST) JLIST Membuat tampilan data list

Constructor
JList()

Membuat JList standar


JList(ListModel dataModel) Membuat JList yang menampilkan elemen dengan non-null model. JList(Object[] listData) Membuat JList yang menampilkan elemen array. JList(Vector listData) Membuat JList yang menampilkan elemen dengan model Vector.

Beberapa Method yang harus diketahui


19

int getSelectedIndex()

Mendapatkan nilai Index jika tidak ada yang terpilih maka Jlist akan memberikan nilai -1.
Object getSelectedValue()

Mendapatkan nilai terpilih jika tidak ada yang terpilih maka Jlist akan memberikan nilai null.
Object[] getSelectedValues()

Mendapatkan nilai dalam bentuk Array dari sel terpilih.


boolean isSelectedIndex(int index)

Mendapatkan nilai true apabila index terpilih dan akan mengembalikan nilai false jika tidak terpilih.
boolean isSelectionEmpty()

Mendapatkan nilai true apabila tidak ada sel yang terpilih.


void setSelectedIndex(int index)

Mengaktifkan sebuah sel .


void setSelectedValue(Object anObject, boolean shouldScroll)

Mengaktifkan objek pada list.


void setSelectionBackground(Color selectionBackground)

Memberikan warna background.


void setSelectionForeground(Color selectionForeground)

Memberikan warna foreground.


void setSelectionMode(int selectionMode) Merubah model Jlist menjadi single selection <object>.setSelectionMode(ListSelectionModel.SINGLE_SE LECTION)

atau multiple selection.


<object>.setSelectionMode(ListSelectionModel.MULTIPLE_ INTERVAL_SELECTION)

Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/list.html dalam rancangan tampilan pada gambar 6, kita menggunakan layout FlowLayout, Gridlayout dan BorderLayout. Perlu diingat bahwa layout FlowLayout dan GridLayout telah diterangkan sebelumnya, khususnya dalam contoh pada gambar 5. Sedangkan ilustrasi dari penggunaan layout BorderLayout dapat dilihat dalam bentuk berikut : WEST NORTH CENTER SOUTH EAST

20

Layout BorderLayout menggunakan arah mata angin sebagai patokan, misalkan : - North, berarti objek berada pada posisi atas. - West, berarti objek berada pada posisi kiri. - Center, berarti objek berada pada tengah. - East, berarti objek berada pada posisi kanan. - South, berarti objek berada pada posisi bawah. Untuk lebih jelasnya rancangan tampilan pada gambar 6 adalah sebagai berikut : lblNim lblNama txtNim txtNama

lblSertifikat

lstSertifikat

lblJurusan

lstJurusan

lblKampus cmdSave

cmbKampus cmdExit

Terdapat 1(satu) Container dengan model FlowLayout.CENTER dengan jumlah panel sebanyak 4 (empat) panel : - panel1, dengan model layout GridLayout(2,2) untuk penempatan lblNim, txtNim, lblNama dan txtNama - panel2, dengan model layout GridLayout(2,2) untuk penempatan lblSertifikat, lstSertifikat, lblJurusan, dan lstJurusan - panel3, dengan model layout GridLayout(2,2) untuk penempatan lblKampus, cmbKampus, btnSave, dan btnExit - panel4, dengan model BorderLayout. Dimana pada posisi NORTH untuk penempatan panel1, posisi CENTER untuk penempatan panel2, dan posisi SOUTH untuk penempatan panel3 Contoh program java untuk gambar 6 :
//program ke enam import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; class frame31 extends JFrame{ private Container konten = new Container(); private JPanel panel1 = new JPanel(); private JLabel lblNim = new JLabel();

21

private JTextField txtNim = new JTextField(10); private JLabel lblNama = new JLabel(); private JTextField txtNama = new JTextField(20); private JPanel panel2 = new JPanel(); private JLabel lblSertifikat = new JLabel(); String sSertifikat[] = {"SD", "SMP", "SMA"}; private JList lstSertifikat; private JLabel lblJurusan = new JLabel(); String sJurusan[] = {"TI", "MI", "AK", "TK"}; private JList lstJurusan; private JPanel panel3 = new JPanel(); private JLabel lblKampus = new JLabel(); String sKampus[] = {"Cempaka Putih","Cileduk","Roxy","Salemba"}; private JComboBox cmbKampus = new JComboBox(sKampus); private JButton cmdSave = new JButton("Tampilkan"); private JButton cmdEnd = new JButton("Selesai"); private JPanel panel4 = new JPanel(); frame31(){ super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(10,100); this.setSize(500,450); konten=getContentPane(); konten.setLayout(new FlowLayout(FlowLayout.CENTER));

lblNim.setText("NIM"); lblNama.setText("NAMA"); lblSertifikat.setText("Sertifikat (Multiple Selection)"); lblJurusan.setText("Jurusan (Single Selection)"); lblKampus.setText("Kampus"); panel1.setLayout(new GridLayout(2,2)); panel1.add(lblNim); panel1.add(txtNim); panel1.add(lblNama); panel1.add(txtNama);

panel2.setLayout(new GridLayout(2,2)); lstSertifikat = new JList(sSertifikat); lstSertifikat.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); panel2.add(lblSertifikat, BorderLayout.NORTH); //untuk mengaktifkan scroll menu gunakan JScrollPane panel2.add(new JScrollPane(lstSertifikat)); lstJurusan = new JList(sJurusan); lstJurusan.setSelectionMode( ListSelectionModel.SINGLE_SELECTION); panel2.add(lblJurusan); panel2.add(new JScrollPane(lstJurusan));

panel3.setLayout(new GridLayout(2,2)); cmbKampus.setSelectedIndex(1); cmbKampus.setMaximumRowCount(3); panel3.add(lblKampus); panel3.add(cmbKampus); itemHandler itemHandler = new itemHandler(); panel3.add(cmdSave); cmdSave.addActionListener(itemHandler); panel3.add(cmdEnd);

22

cmdEnd.addActionListener(itemHandler); panel4.setLayout(new BorderLayout()); panel4.add(panel1, BorderLayout.NORTH); panel4.add(panel2, BorderLayout.CENTER); panel4.add(panel3, BorderLayout.SOUTH); konten.add(panel4, BorderLayout.EAST); show(); } private class itemHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ Object obj=e.getSource(); if(obj==cmdSave){ String sTampil; sTampil = "NIM : " + txtNim.getText(); sTampil+= "\nNama : " + txtNama.getText(); sTampil+= "\nSertifikat "; if (lstSertifikat.isSelectedIndex(0)) sTampil+=", " + sSertifikat[0]; if (lstSertifikat.isSelectedIndex(1)) sTampil+=", " + sSertifikat[1]; if (lstSertifikat.isSelectedIndex(2)) sTampil+=", " + sSertifikat[2]; sTampil+= "\nJurusan, "; sTampil+= lstJurusan.getSelectedValue(); sTampil+="\nKampus,"; sTampil+=cmbKampus.getItemAt(cmbKampus.getSelectedIndex()); JOptionPane.showMessageDialog(null, sTampil , "HASIL", JOptionPane.INFORMATION_MESSAGE); } else {System.exit (0);} } } public static void main(String args[]){ new frame31(); } }

23

Latihan 2 - Buatlah tampilan Handphone seperti pada gambar 7 kemudian aktifkan tombol numerik (*,#,0-9) sehingga dapat tampil pada TextField dibawah ini

Gambar 7. HandPhone Buatlah program konversi suhu celcius, Kelvin dan Farenheit dengan tampilan seperti pada gambar 8.

Gambar 8. Konversi Suhu

24

BAB V

MouseMotionListener, MouseListener, KeyListener, dan ActionListener.


Salah satu keunggulan GUI sehingga sering digunakan pada pemrograman, yaitu karena dapat berinteraksi dengan media Mouse dan tentu saja Keyboard. Fasilitas listener juga ada pada objek java.awt.event.*. Pada pemrograman java, untuk mengenali pergerakan mouse dikenal sebutan MouseMotionListener, sedangkan mengenali penggunaan tombol pada mouse disebut dengan MouseListener, sedangkan penggunaan tombol pada keyboard disebut dengan KeyListener. MouseMotionListener Mendeteksi pergerakan mouse

Method
void mouseDragged(MouseEvent e)

Mouse dengan posisi ditekan kemudian digerakkan.


void mouseMoved(MouseEvent e)

Mouse digerakkan tanpa ada tombol yang ditekan. MouseListener Mendeteksi tombol mouse yang digunakan

Method
void mouseClicked(MouseEvent e)

Mouse di-click atau ditekan tombolnya kemudian langsung dilepaskan.


void mouseEntered(MouseEvent e)

Ketika mouse memasuki komponen.


void mouseExited(MouseEvent e)

Ketika mouse keluar dari komponen.


void mousePressed(MouseEvent e)

Tombol mouse ditekan.


void mouseReleased(MouseEvent e)

Tombol mouse dilepaskan KeyListener Mendeteksi tombol keyboard yang digunakan

Method
void keyPressed(KeyEvent e)

Tombol keyboard ditekan.

25

void keyReleased(KeyEvent e)

Tombol keyboard dilepas.


void keyTyped(KeyEvent e)

Tombol keyboard melakukan pengetikan

ActionListener Mendeteksi aksi yang diberikan dari komponen..

Method
void actionPerformed(ActionEvent e) Mengetahui Action yang dilakukan.

Coba perhatikan program ke tujuh dan ke delapan perbedaannya dan jalankan.


//program ketujuh import javax.swing.*; import java.awt.*; import java.awt.event.*; class grap22 extends JFrame implements MouseMotionListener, MouseListener, KeyListener { private Container konten = new Container(); private JLabel label1 = new JLabel(); private JLabel label2 = new JLabel(); private JTextField txtKey = new JTextField(20); private JLabel label3 = new JLabel(); grap22(){ super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(10,100); this.setSize(250,200); konten=getContentPane(); konten.setLayout(new FlowLayout(FlowLayout.CENTER)); label1.setForeground(Color.YELLOW); label1.setText("Mouse Event"); label2.setFont(new Font("Tahoma",Font.BOLD,20)); label2.setForeground(Color.BLUE); label2.setText("Mouse Move");

konten.add(label1); konten.add(label2); konten.add(txtKey); konten.add(label3); label2.setForeground(Color.RED); //contoh event handling konten.addMouseMotionListener(this); konten.addMouseListener(this); txtKey.addKeyListener(this); show();

26

} //Mouse Motion Listener public void mouseDragged(MouseEvent e){ label2.setText("Dragged at [" + e.getX()+","+e.getY()+"]"); } public void mouseMoved(MouseEvent e){ label2.setText("Moved at [" + e.getX()+","+e.getY()+"]"); } //Mouse Listener public void mouseReleased(MouseEvent e){ label1.setText("Mouse Released"); } public void mousePressed(MouseEvent e){ label1.setText("Mouse Pressed"); } public void mouseExited(MouseEvent e){ label1.setText("Mouse Exited"); } public void mouseEntered(MouseEvent e){ label1.setText("Mouse Entered"); } public void mouseClicked(MouseEvent e){ label1.setText("Mouse Clicked"); } //Key Listener public void keyTyped(KeyEvent e){ label3.setText(e.getKeyText(e.getKeyCode())); } public void keyPressed(KeyEvent e){ label3.setText(e.getKeyText(e.getKeyCode())); } public void keyReleased(KeyEvent e){ label3.setText(e.getKeyText(e.getKeyCode())); } public static void main(String args[]){ new grap22(); } } //program kedelapan import javax.swing.*; import java.awt.*; import java.awt.event.*; class grap22 extends JFrame{ private Container konten = new Container(); private JLabel label1 = new JLabel(); private JLabel label2 = new JLabel(); private JTextField txtKey = new JTextField(20); private JLabel label3 = new JLabel(); grap22(){ super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(10,100); this.setSize(250,200); konten=getContentPane(); konten.setLayout(new FlowLayout(FlowLayout.CENTER)); label1.setForeground(Color.YELLOW); label1.setText("Mouse Event"); label2.setFont(new Font("Tahoma",Font.BOLD,20)); label2.setForeground(Color.BLUE); label2.setText("Mouse Move");

27

konten.add(label1); konten.add(label2); konten.add(txtKey); konten.add(label3); //contoh event handling label2.setForeground(Color.RED); konten.addMouseMotionListener( new MouseMotionListener(){ public void mouseDragged(MouseEvent e){ label2.setText("Dragged at [" + e.getX()+","+e.getY()+"]"); } public void mouseMoved(MouseEvent e){ label2.setText("Moved at [" + e.getX()+","+e.getY()+"]");} } );

konten.addMouseListener( new MouseListener(){ public void mouseReleased(MouseEvent e){ label1.setText("Mouse Released"); } public void mousePressed(MouseEvent e){ label1.setText("Mouse Pressed"); } public void mouseExited(MouseEvent e){ label1.setText("Mouse Exited"); } public void mouseEntered(MouseEvent e){ label1.setText("Mouse Entered"); } public void mouseClicked(MouseEvent e) {label1.setText("Mouse Clicked");} } ); txtKey.addKeyListener( new KeyListener(){ public void keyTyped(KeyEvent e){ label3.setText(e.getKeyText(e.getKeyCode())); } public void keyPressed(KeyEvent e){ label3.setText(e.getKeyText(e.getKeyCode())); } public void keyReleased(KeyEvent e){ label3.setText(e.getKeyText(e.getKeyCode())); } } ); show(); } public static void main(String args[]){ new grap22(); } }

Kedua program tersebut apabila dijalankan mempunyai hasil yang sama (gambar 9) namun model penulisannya berbeda.

28

Gambar 9. MouseMotionListener, MouseListener, dan KeyListener Pada program ke tujuh penggunaan listener, yaitu MouseMotionListener, MouseListener, dan KeyListener kita akan menggunakan perintah implements, kemudian pada saat penambahan listener cukup menambahkan kata this atau nama objek class seperti pada penggalan program ke enam yang menggunakan listener ActionListener. Sedangkan pada program ke delapan listener ditempatkan pada objek yang mempunyai method listener.
//penggalan program ke enam import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; class frame31 extends JFrame{ { itemHandler itemHandler = new itemHandler(); panel3.add(cmdSave); cmdSave.addActionListener(itemHandler); panel3.add(cmdEnd); cmdEnd.addActionListener(itemHandler); } private class itemHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ Object obj=e.getSource(); //menangkap nama objek if(obj==cmdSave){ } else {System.exit (0);} } } public static void main(String args[]){ new frame31(); } }

29

BAB VI

JSlider
Pada bab ini penulis membuat contoh program konversi suhu menggunakan komponen Jslider. Dengan rumus : - Fahrenheit = (Celcius * 1.8) + 32 - Kelvin = Celcius + 273.15; JSlider JSlider digunakan untuk menandakan nilai dengan model slide. Nilai tersebut berupa nilai minimum, nilai maksimum dan nilai-nilai antara serta bertipe data integer.

Constructor
JSlider()

Membuat horizontal slider dengan nilai minimum 0 sampai dengan maximum 100 dan dengan nilai aktif 50.
JSlider(BoundedRangeModel brm)

Membuat horizontal slider menggunakan model BoundedRangeModel.


JSlider(int orientation)

Membuat slider dengan model oreintasi sesuai dengan parameter input (0=horizontal||1=vertical) dengan nilai minimum 0 sampai dengan nilai maximum 100 dan nilai aktif 50.
JSlider(int min, int max)

Membuat horizontal slider menggunakan nilai minimum dan maximum yang disesuaikan dengan parameter input.
JSlider(int min, int max, int value)

Membuat horizontal slider dengan menggunakan nilai minmum, maximum, dan nilai aktif sesuai dengan parameter input.
JSlider(int orientation, int min, int max, int value)

Membuat slider dengan model orientasi, minimum, maximum, dan nilai aktif sesuai dengan parameter input.

Beberapa Method yang harus diketahui


Int getMaximum()

Mendapatkan nilai maximum.


Int getMinimum()

Mendapatkan nilai minimum.


Int getOrientation()

Mendapatkan model model oreintasi slider, apakah berbentuk vertical atau horizontal.

30

int getValue()

Mendapatkan nilai aktif.


void setMaximum(int maximum)

Merubah nilai maximum.


void setMinimum(int minimum)

Merubah nilai minimum.


void setOrientation(int orientation)

Merubah model oreintasi (1=VERTICAL atau 0=HORIZONTAL).


void setValue(int n)

Merubah nilai aktif. Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/slider.html

Gambar 10. Jslider Gambar 10 merupakan bentuk program lain dari program konversi suhu yang terdapat pada latihan 2. Gambar 10 menggunakan Jslider sebagai petunjuk nilai aktif.

31

Rancangan tampilan dari gambar 10 adalah sebagai berikut :

lblCelcius sldCelcius

lblCelciusCapt

lblFahrenheit lblFahrenheitCapt s l d F a h r e n h e i t

lblCalvin lblKelvinCapt

s l d K e l v i n

Terdapat 6 (enam) panel, yaitu : - pane11, dengan model FlowLayout.CENTER, untuk penempatan lblCelcius dan lblCelciusCapt - panel2, dengan model BorderLayout, dimana BorderLayout.NORTH untuk penempatan panel1 dan BorderLayout.SOUTH untuk penempatan sldCelcius - panel3, dengan model GridLayout(2,2), untuk penempatan lblFahrenheit, lblKelvin, lblFahreinheitCapt, dan lblKelvinCapt - panel4, dengan model layout BorderLayout, dimana BorderLayout.WEST untuk penempatan sldFahrenheit dan BorderLayout.EAST untuk penempatan sldKelvin - panel5, dengan model layout BorderLayout, dimana BorderLayout.NORTH untuk penempatan panel3 dan BorderLayout.SOUTH untuk penempatan panel4 - panel6, dengan model layout BorderLayout, dimana BorderLayout.NORTH untuk penempatan panel2 dan BorderLayout.SOUTH untuk penempatan panel5

32

//program ke sembilan import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; class frame1 extends JFrame { //penggunaan slider //JSlider (posisi <0-horisontal|1-vertical>,min,max,0) private private private private private private private private private private private Container konten = new Container(); JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); JLabel lblCelcius = new JLabel(); JLabel lblCelciusCapt = new JLabel(); JSlider sldCelcius = new JSlider(); JPanel JLabel JLabel JLabel JLabel panel3 = new JPanel(); lblFahrenheit = new JLabel(); lblFahrenheitCapt = new JLabel(); lblKelvin = new JLabel(); lblKelvinCapt = new JLabel();

private JPanel panel4 = new JPanel(); private JSlider sldFahrenheit = new JSlider(1,0,200,0); private JSlider sldKelvin = new JSlider(1,0,200,0); private JPanel panel5 = new JPanel(); private JPanel panel6 = new JPanel(); frame1() { super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(200,325); setLocation(10,100); konten = getContentPane(); lblCelcius.setText("Celcius"); lblCelciusCapt.setText("0 Derajat"); panel1.setLayout(new FlowLayout(FlowLayout.CENTER)); panel1.add(lblCelcius); panel1.add(lblCelciusCapt); panel2.setLayout(new BorderLayout()); panel2.add(panel1, BorderLayout.NORTH); sldCelcius.setValue(0); panel2.add(sldCelcius, BorderLayout.SOUTH);

lblFahrenheit.setText("Fahrenheit "); lblFahrenheitCapt.setText("0 Derajat"); lblKelvin.setText("Kelvin "); lblKelvinCapt.setText("273.15 Derajat"); panel3.setLayout(new GridLayout (2, 2)); panel3.add(lblFahrenheit); panel3.add(lblKelvin); panel3.add(lblFahrenheitCapt); panel3.add(lblKelvinCapt); panel4.setLayout(new BorderLayout()); panel4.add(sldFahrenheit, BorderLayout.WEST); sldKelvin.setMaximum(1000); sldKelvin.setMinimum((int) 273.15); sldKelvin.setValue((int) 273.15); panel4.add(sldKelvin, BorderLayout.EAST);

33

panel5.setLayout(new BorderLayout()); panel5.add(panel3, BorderLayout.NORTH); panel5.add(panel4, BorderLayout.SOUTH); panel6.setLayout(new BorderLayout()); panel6.add(panel2, BorderLayout.NORTH); panel6.add(panel5, BorderLayout.SOUTH); sldCelcius.addChangeListener ( //jika nilai slider Berubah new ChangeListener() {public void stateChanged(ChangeEvent e) { lblCelciusCapt.setText(sldCelcius.getValue() + " Derajat"); } } ); sldCelcius.addMouseListener ( //jika mouse selesai melakukan pergerakan new java.awt.event.MouseAdapter() { public void mouseReleased(MouseEvent e) { double dFahrenheit,dKelvin; dFahrenheit = (sldCelcius.getValue() * 1.8) + 32; dKelvin = sldCelcius.getValue() + 273.15; sldFahrenheit.setValue((int) dFahrenheit); lblFahrenheitCapt.setText(dFahrenheit + " Derajat"); lblKelvinCapt.setText(dKelvin + " Derajat"); sldKelvin.setValue((int) dKelvin); } } ); sldFahrenheit.addChangeListener ( new ChangeListener() {public void stateChanged(ChangeEvent e) { lblFahrenheitCapt.setText( sldFahrenheit.getValue() + " Derajat"); } } ); sldFahrenheit.addMouseListener (new java.awt.event.MouseAdapter() { public void mouseReleased(MouseEvent e) { double dCelcius,dKelvin; dCelcius=(sldFahrenheit.getValue()-32)* 0.5555; dKelvin = dCelcius + 273.15; sldCelcius.setValue((int) dCelcius); lblCelciusCapt.setText(dCelcius + " Derajat"); sldKelvin.setValue((int) dKelvin); lblKelvinCapt.setText(dKelvin + " Derajat"); } } ); sldKelvin.addChangeListener ( new ChangeListener() {public void stateChanged(ChangeEvent e) { lblKelvinCapt.setText(sldKelvin.getValue() + " Derajat");

34

} } ); sldKelvin.addMouseListener (new java.awt.event.MouseAdapter() { public void mouseReleased(MouseEvent e) { double dCelcius,dFahrenheit; dCelcius = sldKelvin.getValue()-273.15; dFahrenheit = (dCelcius * 1.8) + 32; sldCelcius.setValue((int) dCelcius); lblCelciusCapt.setText(dCelcius + " Derajat"); sldFahrenheit.setValue((int) dFahrenheit); lblFahrenheitCapt.setText(dFahrenheit + " Derajat"); } } ); konten.add(panel6); show(); } } public class praktek51 { public static void main(String args[]) { new frame1(); } }

Latihan 3 Buatlah program konversi jarak dari sentimeter, meter, inci (inch), dan kaki (feet)

35

BAB VII

JMenuBar, JMenu, JPopupMenu, JMenuItem, JTextArea, dan Box


Kali ini contoh program menggunakan JMenuBar, JPopupMenu, JMenuItem, JTextArea dan layout Box komponen untuk membuat program editor teks berita. JMenuBar Untuk mengimplementasikan menu pada form dapat menggunakan komponen JMenuBar

Constructor
JMenuBar()

Membuat Bar Menu.

Beberapa Method yang harus diketahui


JMenu add(JMenu c)

Menambah objek JMenu ke JMenuBar


JMenu getMenu(int index)

Mendapat posisi menu yang disesuaikan dengan parameter index.


int getMenuCount()

Mendapatkan jumlah menu.


boolean isSelected()

Melakukan pengecekan apakah menu yang dimaksud dalam posisi terpilih.


void setSelected(Component sel)

Mengaktifkan menu yang diinginkan. Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html JMenu Untuk menambahkan item pada JMenuBar kita harus menggunakan JMenu, dimana JMenu juga dapat ditambahkan JmenuItem dan juga Jseparators.

Constructor
JMenu()

Membuat JMenu tanpa teks.


JMenu(Action a)

Membuat menu dengan penambahan Action.


JMenu(String s) Membuat JMenu dengan teks.

36

JMenu(String s, boolean b) Membuat JMenu dengan teks dan penandaan tear-off menu atau tidak.

Beberapa Method yang harus diketahui


JMenuItem add(Action a)

Membuat menu item dengan penambahan Action objek dan menambahkannya pada akhir menu.
Component add(Component c)

Menambahkan komponen pada akhir menu.


Component add(Component c, int index)

Menambah komponen pada posisi (index) tertentu.


JMenuItem add(JMenuItem menuItem) Menambah JMenuItem pada akhir menu. JMenuItem add(String s)

Menambah JMenuItem dengan teks dan menambahnya pada akhir menu.


void addMenuListener(MenuListener l)

Menambahkan listener pada menu.


void addSeparator()

Menambahkan garis separator pada akhir menu.


Int getDelay()

Mendapatkan nilai delay menu


JMenuItem getItem(int pos) Mendapat JMenuItem pada posisi tertentu. int getItemCount()

Mendapatkan jumlah JMenuItem pada menu termasuk dengan garis separator.


JMenuItem insert(Action a, int pos) Menyisipkan Action pada posisi tertentu. JMenuItem insert(JMenuItem mi, int pos) Menyisipkan JMenuitem pada posisi tertentu. Void insert(String s, int pos)

Menyisipkan menu tertentu dengan teks pada posisi tertentu.


Void insertSeparator(int index)

Menyisipkan garis separator pada posisi tertentu.


boolean isPopupMenuVisible()

Mendapatkan nilai true atau false mengenai kemungkinan popup.


boolean isSelected()

37

Mendapatkan nilai true apabila menu tersebut dalam posisi terpilih (highlighted).
void remove(Component c)

Menghapus komponen c dari menu.


Void remove(int pos) Menghapus JMenuItem pada posisi tertentu pada

menu.
void remove(JMenuItem item) Menghapus JMenuItem dari menu. void removeAll()

Mengapus semua menu item dari menu.


Void setDelay(int d)

Memberikan waktu delay Sets the suggested delay before the menu's PopupMenu is popped up or down.
void setMenuLocation(int x, int y)

Menempatkan lokasi X dan Y dari pop menu.


void setPopupMenuVisible(boolean b)

Memberikan status true (tampil) atau false (tidak) pada menu popup. JPopupMenu Mengimplementasikan menu dengan model popup, sebuah tampilan kecil yang tampil dengan beberapa pilihan. JPopupMenu digunakan pada menu yang tampil pada saat pengguna memilih komponen pada bar menu. Dan juga digunakan pada saat mouse ditekan klik kanan. Popup menu dapat tampil diposisi manapun yang diinginkan.

Constructor
JPopupMenu()

Membuat JPopupMenu.
JPopupMenu(String label) Membuat JPopupMenu dengan title.

Beberapa Method yang harus diketahui


JMenuItem add(Action a)

Menambahkan Action object.


JMenuItem add(JMenuItem menuItem) Menambahkan JMenuItem dan ditempatkan pada

posisi terakhir menu.


JMenuItem add(String s)

38

Menambahkan menu teks dan ditempatkan pada posisi akhir menu.


void addSeparator()

Menambahakan garis separator pada akhir menu.


String getLabel()

Mendapatkan label popup menu


void insert(Action a, int index) Menyisipkan Action pada posisi tertentu. void insert(Component component, int index)

Inserts the specified component into the menu at a given position.


boolean isVisible()

Mendaptkan nilai true jika pada posisi tampil.


void remove(int pos)

Menghapus komponen pada posisi tertentu.


void setLabel(String label)

Memberikan label pada popup menu.


void setLocation(int x, int y)

Menempatkan lokasi popup menu di koordinat X dan Y


void setPopupSize(Dimension d)

Memberikan ukuran berdasarkan dimensi.


void setPopupSize(int width, int height)

Memberikan ukuran berdasarkan lebar dan tinggi.


void setSelected(Component sel)

Menempatkan sel aktif pada komponen tertentu.


void setVisible(boolean b)

Menampilkan popup menu jika parameter input adalah true.


void show(Component invoker, int x, int y)

Menampilkan popup menu berdasarkan koordinat X dan Y. JMenuItem Memberikan komponen pada Jmenu dan JPopupMenu

Constructor
JMenuItem()

Membuat JMenuItem tanpa teks dan gambar ikon.


JMenuItem(Action a) Membuat JMenuItem dengan Action. JMenuItem(Icon icon)

39

Membuat JMenuItem dengan gambar ikon.


JMenuItem(String text) Membuat JMenuItem dengan teks. JMenuItem(String text, Icon icon) Membuat JMenuItem dengan teks dan gambar ikon. JMenuItem(String text, int mnemonic) Membuat JMenuItem dengan teks dan shortcut keyboard mnemonic.

Beberapa Method yang harus diketahui


void setEnabled(boolean b)

Enables or disables the menu item. Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html JTextArea JTextArea berfungsi sebagai teks editor dalam bentuk multiline, sedangkan dalam penggunaannya, untuk mengaktifkan scroll pada JTextArea menggunakan bantuan JScrollPane.

Constructor
JTextArea()

Membuat TextArea.
JTextArea(Document doc) Membuat JTextArea dengan model dokumen. JTextArea(Document doc, String text, int rows, int columns) Membuat JTextArea dengan model dokumen, teks, baris dan kolom sesuai

dengan parameter yang diberikan.


JTextArea(int rows, int columns) Membuat JTextArea dengan baris dan kolom yang sesuai dengan parameter input. JTextArea(String text) Membuat JTextArea dengan teks didalamnya. JTextArea(String text, int rows, int columns) Membuat JTextArea dengan teks didalamnya beserta baris dan kolom.

40

Menu Bar
JMenuBar() JMenu(File) JMenuItem(Buka File) JMenuItem(Simpan File) JMenuItem(Keluar) JMenu(Edit) JMenuItem(Copy) JMenuItem(Cut) JMenuItem(Paste) Jmenu(Tentang)

JPopupMenu
JPopupMenu(); JMenuItem("Copy"); JMenuItem("Cut"); JMenuItem("Paste");

JTextArea
private JTextArea txtArea; txtArea = new JTextArea(20,15); txtArea.setLineWrap(true);

Gambar 11. Program Editor Berita Gambar 11, merupakan program yang menerapkan sistem menu, popmenu, textarea dan box layout. Menu yang akan tampil pada program tersebut adalah sebagai berikut : - File (JMenu mniFile) o Buka File (JMenuItem mniFileBuka) o Simpan File (JMenuItem mniFileSimpan) o Keluar (JMenuItem mniKeluar) - Edit (JMenu mniEdit) o Copy (JMenuItem mniCopy) o Cut (JMenuItem mniCut) o Paste (JMenuItem mniPaste) - Tentang (JMenu mniTentang) Menu popup akan tampil apabila JtextArea di click kanan dengan tampilan : - Copy (JMenuItem mniCopy) - Cut (JMenuItem mniCut) - Paste (JMenuItem mniPaste) Rancangan tampilan menggunakan 2 (dua) panel dan box dengan model VerticalBox. Yang dimaksud dengan Vertical Box adalah setiap komponen objek yang ditambahkan pada box berada pada posisi bawah (vertikal).
Komponen 1 Komponen 2 Komponen 3

Gambar 12. VerticalBox

41

Untuk lebih jelasnya adalah sebagai berikut : - panel1, dengan model layout GridLayout(2,2), untuk penempatan lblKategori, cmbKategori, lblDaerah dan cmbDaerah - panel2, dengan model layout GridLayout(3,1), untuk penempatan lblJudul, txtJudul, dan lblIsi. - Box, dengan komponen pertama adalah panel1 dan komponen kedua adalah panel2
//program ke sepuluh import javax.swing.*; import java.awt.*; import java.awt.event.*; class frame52 extends JFrame { private Container konten = new Container(); private private private private private private private private private private JMenuBar bar = new JMenuBar(); JMenu mnFile = new JMenu("File"); JMenuItem mniFileBuka = new JMenuItem("Buka File"); JMenuItem mniFileSimpan = new JMenuItem("Simpan File"); JMenuItem mniFileKeluar = new JMenuItem("Keluar"); JMenu mnEdit = new JMenu("Edit"); JMenuItem mniCopy = new JMenuItem("Copy"); JMenuItem mniCut = new JMenuItem("Cut"); JMenuItem mniPaste = new JMenuItem("Paste"); JMenu mnTentang = new JMenu("Tentang");

private JLabel lblKategori = new JLabel("Kategori"); String pilKategori[]={"Nasional","Daerah","Internasional"}; private JComboBox cmbKategori = new JComboBox(pilKategori); private JLabel lblDaerah = new JLabel("Daerah"); String pilDaerah[]={"Indonesia Bagian Barat", "Indonesia Bagian Timur"}; private JComboBox cmbDaerah = new JComboBox(pilDaerah); private JLabel lblJudul = new JLabel("Judul"); private JTextField txtJudul = new JTextField(); private JLabel lblIsi = new JLabel("Isi"); private JTextArea txtArea; private JScrollPane jScrollPane1 = new JScrollPane(); private JPanel panel1 = new JPanel(); private JPanel panel2 = new JPanel(); private Box box1 = Box.createVerticalBox(); private JPopupMenu popmenu = new JPopupMenu();

frame52() { super("Universitas Budi Luhur"); setSize(500,500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ItemHandler itemHandler = new ItemHandler(); mniFileBuka.addActionListener(itemHandler); mniFileSimpan.addActionListener(itemHandler); mniFileKeluar.addActionListener(itemHandler); mniCopy.addActionListener(itemHandler); mniCut.addActionListener(itemHandler); mniPaste.addActionListener(itemHandler);

42

mnFile.add(mniFileBuka); mnFile.add(mniFileSimpan); mnFile.add(mniFileKeluar); mnEdit.add(mniCopy); mnEdit.add(mniCut); mnEdit.add(mniPaste); bar.add(mnFile); bar.add(mnEdit); bar.add(mnTentang); //jangan lupa gunakan setJMenuBar setJMenuBar(bar); popmenu.add(mniCopy); popmenu.add(mniCut); popmenu.add(mniPaste); panel1.setLayout(new GridLayout(2,2)); panel1.add(lblKategori); panel1.add(cmbKategori); panel1.add(lblDaerah); panel1.add(cmbDaerah); box1.add(panel1); panel2.setLayout(new GridLayout(3,1)); panel2.add(lblJudul); panel2.add(txtJudul); panel2.add(lblIsi); box1.add(panel2); txtArea = new JTextArea(20,15); txtArea.setLineWrap(true); txtArea.addMouseListener ( new MouseListener() { public void mousePressed(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public void mouseReleased(MouseEvent e) { //jika Click kanan maka tampilkan popup if (e.getButton() == 3) popmenu.show(e.getComponent(), e.getX(), e.getY()); } } ); jScrollPane1.getViewport().add(txtArea,null); box1.add(jScrollPane1);

konten = getContentPane(); konten.setLayout(new BorderLayout()); konten.add(box1, BorderLayout.NORTH); setVisible(true); //sama dengan show() } private class ItemHandler implements ActionListener {public void actionPerformed(ActionEvent e) { Object objek = e.getSource(); if (objek == mniFileBuka) JOptionPane.showMessageDialog (frame52.this,"Buka File","Buka",

43

JOptionPane.PLAIN_MESSAGE); else if (objek == mniFileSimpan) JOptionPane.showMessageDialog (frame52.this,"Simpan","Simpan File", JOptionPane.PLAIN_MESSAGE); else if (objek == mniCopy) JOptionPane.showMessageDialog(frame52.this,"Copy " + txtArea.getSelectedText() + " Di Text Area ", "Copy", JOptionPane.PLAIN_MESSAGE); else if (objek == mniCut) JOptionPane.showMessageDialog (frame52.this,"Cut Teks di Teks Area","Cut", JOptionPane.PLAIN_MESSAGE); else if (objek == mniPaste) JOptionPane.showMessageDialog (frame52.this,"Paste Teks di Text Area","Paste", JOptionPane.PLAIN_MESSAGE); else if (objek == mniFileKeluar) System.exit(0); } } } public class praktek52{ public static void main(String args[]){ new frame52(); } }

44

BAB VIII

JInternalFrame
Pada pemrograman java GUI, kita mengenal frame dan internal frame. Frame yang telah dibahas pada bab sebelumnya merupakan model single frame. Tetapi dapat pula kita berikan frame didalamnya, yaitu internal frame. Contoh pada gambar 12 merupakan gabungan dari penggunaan JSlider dan JinternalFrame sebai konversi warna dari nilai-nilai yang sedang aktif pada slider. JInternalFrame Berfungsi sebagai frame yang berada pada internal

Constructor
JInternalFrame() Membuat JInternalFrame yang ukurannya tidak dapat berubah, tidak dapat

ditutup, tidak dapat menjadi ukuran maksimum dan tanpa title.


JInternalFrame(String title) Membuat JInternalFrame yang ukurannya tidak dapat berubah, tidak dapat

ditutup, dan tidak dapat menjadi ukuran maksimum. Tetapi mempunyai titel
JInternalFrame(String title, boolean resizable) Membuat JInternalFrame yang tidak dapat ditutup, dan tidak dapat menjadi

ukuran maksimum. Tetapi mempunyai titel dan dapat dirubah ukurannya.


JInternalFrame(String title, boolean resizable, boolean closable) Membuat JInternalFrame yang tidak dapat menjadi ukuran maksimum dan

tanpa gamba ikon. Tetapi mempunyai title, dapat dirubah ukurannya dan dapat ditutup.
JInternalFrame(String title, boolean resizable, boolean closable, boolean maximizable) Membuat JInternalFrame dengan title,dapat ditutup, dapat dirubah ukurannya

dan dapat dirubah menjadi ukuran maximal. Tetapi tidak mempunyai gambar ikon.
JInternalFrame(String title, boolean resizable, boolean closable, boolean maximizable, boolean iconifiable) Membuat JInternalFrame dengan title,dapat ditutup, dapat dirubah

ukurannya, dapat dirubah menjadi ukuran maximal dan mempunyai gambar ikon. Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/internalframe.html Gambar 12 merupakan contoh penggunaan JInternalFrame dan Jslider. Dengan rancangan tampilan adalah sebagai berikut : - Container dengan model layout GridLayout (1,1) untuk penempatan panel left - left, merupakan panel dengan model layout GridLayout(2,1) untuk penempatan Colors - Colors, merupakan InternalFrame untuk penempatan sliders - Sliders, merupakan panel dengan model layout(5,1) untuk penempatan panel r, panel g, panel b, color canvas, dan <kosong>. 45

R G B colorCanvas <kosong>

Gambar 12. InternalFrame Contoh Program :


//program ke sebelas //diambil dan edit dari www.sun.com import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.event.*; public class AppSide extends Canvas implements ChangeListener, ItemListener

46

{ JFrame frame = new JFrame("Internal Frame-Universitas Budi Luhur"); JInternalFrame Colors = new JInternalFrame("Colors", true, true, true); JPanel left = new JPanel(true); Canvas colorCanvas = new Canvas(); //JSliders JSlider r = new JSlider(0, 255); JSlider g = new JSlider(0, 255); JSlider b = new JSlider(0, 255); Color rgb; int rInt, gInt, bInt;

///Main Constructor /// AppSide() { frame.pack(); frame.setSize(700, 500); frame.setVisible(true); frame.getContentPane().setLayout(new GridLayout(1,1)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(left); } //Left JPanel private void fillLeft(){ left.setLayout(new GridLayout(2, 1)); left.add(Colors); Colors.show(); } //Color Jif private void fillColors(){ JPanel sliders = new JPanel(true); sliders.setLayout(new GridLayout(5, 1)); Colors.getContentPane().add(sliders); sliders.add(r); sliders.add(g); sliders.add(b); sliders.add(colorCanvas); colorCanvas.setBackground(Color.black); r.addChangeListener(this); g.addChangeListener(this); b.addChangeListener(this); } //Sliders Change public void stateChanged(ChangeEvent e){ if(e.getSource() == r){ JSlider rS = (JSlider)e.getSource(); rInt = (int)rS.getValue(); } if(e.getSource() == g){ JSlider rS = (JSlider)e.getSource(); gInt = (int)rS.getValue(); } if(e.getSource() == b){ JSlider rS = (JSlider)e.getSource(); bInt = (int)rS.getValue(); } rgb = new Color(rInt, gInt, bInt); colorCanvas.setBackground(rgb); }

47

public void itemStateChanged(ItemEvent e){} public void actionPerformed(ActionEvent e) {} //Main public static void main(String[] args){ AppSide as = new AppSide(); as.fillColors(); as.fillLeft(); } }

48

BAB IX

JTabbedPane
Contoh program pada gambar 13 diambil dari http://java.sun.com mengenai penggunaan Tab. JTabbedPane Komponen yang dapat digunakan oleh pengguna, dengan tampilan berdasarkan group komponen dalam bentuk tab. Tab tersebut dapat diberikan tampilan teks maupun gambara ikon.

Constructor
JTabbedPane()

Membuat TabbedPane kosong dengan posisi atas/TOP.


JTabbedPane(int tabPlacement) Membuat TabbedPane kosong dengan posisi sesuai dengan parameter input JTabbedPane.TOP, JTabbedPane.BOTTOM, JTabbedPane.LEFT, atau JTabbedPane.RIGHT. JTabbedPane(int tabPlacement, int tabLayoutPolicy) Membuat TabbedPane kosong dengan posisi sesuai dengan parameter input JTabbedPane.TOP, JTabbedPane.BOTTOM, JTabbedPane.LEFT, atau JTabbedPane.RIGHT beserta model policy

Beberapa Method yang harus diketahui


void addTab(String title, Component component)

Menambah tab dengan judul, dan tanpa gambar ikon.


void addTab(String title, Icon icon,Component component)

Menambah tab dengan judul dan gambar Ikon beserta komponennya.


void addTab(String title, Icon icon, Component component, String tip)

Menambah tab dengan judul dan gambar Ikon beserta komponennya dan teks tip.
int getSelectedIndex()

Mendapatkan index aktif dari tabbpane


int getTabCount()

Mendapatkan jumlah tab dari tabbedpane.


String getTitleAt(int index)

Mendapatkan teks judul sesuai index


void insertTab(String title, Icon icon, Component component, String tip, int index)

Menyisipkan komponen pada index tertentu dengan

49

judul teks, gambar Ikon, komponen, teks tip.


boolean isEnabledAt(int index)

Memberikan nilai true apabila tab pada index tertentu dalam posisi aktif.
void remove(Component component) Menghapus komponen JTabbedPane. void remove(int index)

Menghapus tab dan komponen didalamnya pada index tertentu.


void removeAll()

Menghapus semua tab pada tabbedpane.


void removeTabAt(int index)

Menghapus tab dan komponen didalamnya pada index tertentu.


void setEnabledAt(int index, boolean enabled)

Mengaktifkan atau menonaktifkan tab pada index tertentu.


void setSelectedIndex(int index)

Memberikan status terpilih pada tab tertentu.


void setTitleAt(int index, String title)

Memberikan judul teks pada index tertentu.


void setToolTipTextAt(int index, String toolTipText)

Memberikan tek tooltip pada tab index tertentu. Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/tabbedpane.html

Tab 0

Tab 1

Gambar 13. TabbedPane Gambar 13 mempunyai rancangan desain sebagai berikut : - tabbedpane, dengan model TabbedPane yang mempunyai dua tab, yaitu tab 0 untuk penempatan card1 dan tab 1 untuk penempatan card2 - card1, merupakan panel untuk penempatan Button1, Button2, dan Button3 - card2, merupakan panel untuk penempatan TextField.
//program ke duabelas /* * ===diambil dari sun.java.documen.book.sample ==== */ import java.awt.*; import javax.swing.*;

50

public class TabDemo { final static String BUTTONPANEL = "JPanel with JButtons"; final static String TEXTPANEL = "JPanel with JTextField"; public void addComponentToPane(Container pane) { JTabbedPane tabbedPane = new JTabbedPane(); JPanel card1 = new JPanel() { //besarnya panel disesuakan dengan besar frame public Dimension getPreferredSize() { Dimension size = super.getPreferredSize(); size.width += 100; return size; } }; card1.add(new JButton("Button 1")); card1.add(new JButton("Button 2")); card1.add(new JButton("Button 3")); JPanel card2 = new JPanel(); card2.add(new JTextField("TextField", 20)); tabbedPane.addTab(BUTTONPANEL, card1); tabbedPane.addTab(TEXTPANEL, card2); pane.add(tabbedPane, BorderLayout.CENTER); } private static void createAndShowGUI() { //look and feel JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("TabDemo - Universitas Budi Luhur"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); TabDemo demo = new TabDemo(); demo.addComponentToPane(frame.getContentPane()); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { createAndShowGUI(); } }

51

BAB X

MODEL DESAIN TAMPILAN


Pada meteri sebelumnya, kita sebenarnya sudah menyinggung sedikit mengenai penggunaan layout. Pada pembahasan dibawah selanjutnya, akan dibahas seluruh model layout pada java standar dan xy layout pada JBuilder borland. Layout-layout tersebut adalah sebagai berikut : BorderLayout Membuat layout tampilan berdasarkan arah mata angin yaitu NORTH, EAST, SOUTH, dan WEST. NORTH WEST CENTER EAST SOUTH FlowLayout Layout FlowLayout mempunyai beberapa tampilan yaitu LEFT, CENTER, dan RIGHT. LEFT CENTER RIGHT GridLayout Penggunaan layout GridLayout dengan metode yang sama seperti saat kita menggunakan table, yaitu terkait jumlah baris dan jumlah kolom. Contoh : - jumlah baris 2 dengan kolom 4, menggunakan perintah GridLayout(2,4), yang berarti terdapat 8 (delapan) komponen yang dapat ditempatkan ; o Komponen 1, berada pada posisi baris pertama dan kolom pertama o Komponen 2, berada pada posisi baris pertama dan kolom kedua o Komponen 3, berada pada posisi baris pertama dan kolom ketiga o Komponen 4, berada pada posisi baris pertama dan kolom keempat. o Komponen 5, berada pada posisi baris kedua dan kolom pertama. o Komponen 6, berada pada posisi baris kedua dan kolom kedua. o Komponen 7, berada pada posisi baris kedua dan kolom ketiga. o Komponen 8, berada pada posisi baris kedua dan kolom keempat. 1 5 2 6 3 7 4 8

BoxLayout BoxLayout digunakan untuk membuat tampilan berdasarkan AXIS, yaitu : - X_AXIS Setiap komponen yang ditambahkan pada layout, akan diposisikan pada kanan sesudah komponen sebelumnya.

52

Gambar 14. BoxLayout X_AXIS Y_AXIS Setiap komponen yang ditambahkan pada layout, akan diposisikan pada komponen sebelumnya

Gambar 15. BoxLayout Y_AXIS Box Penggunaan Box sama dengan BoxLayout, hanya penamaannya saja yang berbeda, yaitu : - Horizontal Box Setiap komponen yang ditambahkan pada layout, akan diposisikan pada kanan sesudah komponen sebelumnya.

Gambar 16. Box Horizontal Vertical Box Setiap komponen yang ditambahkan pada layout, akan diposisikan pada komponen sebelumnya

53

Gambar 16.Box Horizontal GridBagLayout Penggunaan layout GridBagLayout secara logika menyerupai GridLayout, hanya saja benar memposisikan kolom dengan intial gridy dan baris dengan intial gridy. Kelebihan dari layout ini adalah dapat membuat menyatukan kolom dan baris untuk satu komponen., lihat gambar 17 pada button 6.

Gambar 17.Box Horizontal Contoh aplikasi pada gambar 17 dapat didesripsikan sebagai berikut : - Button1, berada pada posisi x = 0 dan y =1 - Button2, berada pada posisi x = 0 dan y =1 - Button3, berada pada posisi x= 0 dan y=2 - Button4, berada pada posisi x =1 dan y= 1 - Button5, berada pada posisi x =1 dan y =2 - Button6, berada pada posisi x=2 dan y = 0-1 Contoh program :
//program ke tiga belas //diambil dari www.sun.com import java.awt.*; public class Direction extends Frame { Button btn1, btn2, btn3, btn4, btn5, btn6; GridBagLayout gridbag; GridBagConstraints c; public static void main(String argv[])

54

{ new Direction().show(); } void makeButtons() { btn1 = new Button("Button btn2 = new Button("Button btn3 = new Button("Button btn4 = new Button("Button btn5 = new Button("Button btn6 = new Button("Button }

1"); 2"); 3"); 4"); 5"); 6");

add(btn1); add(btn2); add(btn3); add(btn4); add(btn5); add(btn6);

public Direction() { gridbag = new GridBagLayout(); setLayout(gridbag); c = new GridBagConstraints(); makeButtons(); // use defaults for btn1 gridbag.setConstraints(btn1, c); // btn2 below btn1 c.gridx = 0; // gridy is still RELATIVE gridbag.setConstraints(btn2, c); // btn3 below of btn2 - reuse constraint gridbag.setConstraints(btn3, c); // btn4 right of btn2 c.gridx = GridBagConstraints.RELATIVE; c.gridy = 0; gridbag.setConstraints(btn4, c); // btn5 below of btn4 c.gridx = 1; c.gridy = 2; gridbag.setConstraints(btn5, c); // btn6 up and to right of btn5 c.gridx = 2; c.gridy = 0; c.weightx = 0.0; c.gridwidth = 2; c.gridheight = 2; c.fill = GridBagConstraints.BOTH; gridbag.setConstraints(btn6, c); resize(400, 200); } }

com.borland.jbcl.layout.* (XYLayout/jbcl.jar) Layout X dan Y, memilii banyak model dari banyak pengembang dan salah satunya adalah dari Borland. Model ini menggunakan pixel sebagai posisi X dan Y. Begitu pula dengan panjang dan tinggi dari komponen. Contoh pada gambar 5 dikembangkan dengan menggunakan XYLayout :

55

Gambar 18. XYLayout Contoh program :


//program ke empatbelas import javax.swing.*; import java.awt.*; import com.borland.jbcl.layout.*; import java.awt.event.*; class frame1 extends JFrame { XYLayout xYLayout1 = new XYLayout(); JLabel lblNim = new JLabel(); JLabel lblNama = new JLabel(); JLabel lblSertifikat = new JLabel(); JLabel lblJurusan = new JLabel(); JLabel lblKampus = new JLabel(); JTextField txtNim = new JTextField(); JTextField txtNama = new JTextField(); JCheckBox chSD = new JCheckBox(); JCheckBox chSMP = new JCheckBox(); JCheckBox chSMA = new JCheckBox(); ButtonGroup grpJurusan = new ButtonGroup(); JRadioButton rdTI = new JRadioButton(); JRadioButton rdMI = new JRadioButton(); JRadioButton rdAK = new JRadioButton(); JRadioButton rdTK = new JRadioButton(); String sKampus[] = {"Cempaka Putih","Cileduk","Roxy","Salemba"}; JComboBox cmbKampus = new JComboBox(sKampus); JButton cmdSave = new JButton(); JButton cmdEnd = new JButton(); public frame1() { super("Universitas Budi Luhur"); setSize(400,250); setLocation(10,100); try { jbInit(); } catch(Exception ex) { ex.printStackTrace(); } } void jbInit() throws Exception { lblNim.setText("Nim"); this.getContentPane().setLayout(xYLayout1);

56

lblNama.setText("Nama"); lblSertifikat.setText("Sertifikat"); lblJurusan.setText("Jurusan"); lblKampus.setText("Kampus"); txtNim.setText(""); txtNama.setText(""); chSD.setToolTipText(""); chSD.setText("SD"); chSMP.setText("SMP"); chSMA.setText("SMA"); rdTI.setText("TI"); rdMI.setText("MI"); rdAK.setText("AK"); rdTK.setText("TK"); cmdSave.setText("Tampil"); cmdEnd.setActionCommand(""); cmdEnd.setText("Selesai"); grpJurusan.add(rdTI); grpJurusan.add(rdMI); grpJurusan.add(rdAK); grpJurusan.add(rdTK); xYLayout1.setWidth(400); xYLayout1.setHeight(193); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.getContentPane().add(lblNim, new XYConstraints(37, 26, 77, 18)); this.getContentPane().add(lblNama, new XYConstraints(36, 53, 72, 9)); this.getContentPane().add(lblJurusan, new XYConstraints(33, 98, 55, 13)); this.getContentPane().add(rdTI, new XYConstraints(114, 92, 42, 25)); this.getContentPane().add(rdMI, new XYConstraints(164, 93, 42, 20)); this.getContentPane().add(rdAK, new XYConstraints(222, 96, 42, 21)); this.getContentPane().add(rdTK, new XYConstraints(276, 96, 64, 19)); this.getContentPane().add(cmbKampus, new XYConstraints(118, 120, 145, 22)); this.getContentPane().add(lblKampus, new XYConstraints(32, 123, 67, 11)); this.getContentPane().add(cmdSave, new XYConstraints(29, 153, 114, 27)); this.getContentPane().add(cmdEnd, new XYConstraints(160, 152, 142, 29)); this.getContentPane().add(chSMA, new XYConstraints(221, 77, 56, 16)); this.getContentPane().add(lblSertifikat, new XYConstraints(34, 77, 64, 14)); this.getContentPane().add(chSD, new XYConstraints(114, 77, 47, 16)); this.getContentPane().add(chSMP, new XYConstraints(161, 76, 58, 16)); this.getContentPane().add(txtNama, new XYConstraints(116, 50, 195, 23)); this.getContentPane().add(txtNim, new XYConstraints(117, 29, 70, 20)); } } public class praktek62 { public static void main(String args[]) { new frame1().show(); } }

57

BAB X

Error Exception
Waktu paling ideal untuk mendeteksi adanya kesalahan pada program (error) adalah saat kompilasi program. Namun tidak semua kesalahan program dapat dideteksi pada saat itu, kesalahan justru terlihat program dijalankan atau digunakan. tjava hal 219. Sebagai contoh, untuk program yang dibuat pada saat mesin cetak atau printer sedang on, program dapat melakukan pencetakan dengan baik saat kondisi itu. Namun apabila mesin cetak sedang dalam posisi off, maka program tidak dapat melakukan pencetakan, kemudian mengirimkan sinyal kesalahan. Apabila sinyal kesalahan tersebut tidak ditangkap maka program akan terhenti. Hal tersebut tidak akan terjadi apabila si pengembang program menangkap sinyal tersebut atau melewatinya. Contoh penggunaan lainnya adalah : - perbedaan variable - penggunaan file dan direktori - dan lain-lain. Pada java standard, beberapa error yang harus diketahui adalah sebagai berikut : - java.lang.RuntimeException - java.lang.ArithmeticException - java.lang.ArrayStoreException - java.lang.ClassCastException - java.util.EmptyStackException - java.lang.IllegalArgumentException - java.lang.IllegalThreadStateException - java.lang.NumberFormatException - java.lang.IllegalMonitorStateException - java.lang.IndexOutOfBoundsException - java.lang.ArrayIndexOutOfBoundsException - java.lang.StringIndexOutOfBoundsException - java.lang.NegativeArraySizeException - java.util.NoSuchElementException - java.lang.NullPointerException - java.lang.SecurityException - java.awt.AWTException - java.lang.ClassNotFoundException - java.lang.CloneNotSupportedException - java.io.IOException - java.io.EOFException - java.io.FileNotFoundException - java.io.InterruptedIOException - java.net.MalformedURLException - java.net.ProtocolException - java.net.SocketException - java.io.UTFDataFormatException

58

java.net.UnknownHostException java.net.UnknownServiceException java.lang.IllegalAccessException java.lang.InstantiationException java.lang.InterruptedException java.lang.NoSuchMethodException

penulisan Error Exception, diawali dengan try{} dengan minimal satu catch{} atau finnaly{} untuk menangkap kesalahan program.
try{ // Kode Program Yang Akan Diperkirakan Terjadi Error Exception } catch(type1 id1) { // Penanganan Error Exception dari type1 } catch(type2 id2) { // Penanganan Error Exception dari type2 } catch(type3 id3) { // Penanganan Error Exception dari type3 } // dst

Contoh program :
//program kelima belas public class ExceptionMethods { public static void main(String args[]) { try { //sengaja dikasih error throw new Exception("Here's my Exception"); } catch(Exception e) { System.out.println("Caught Exception"); System.out.println("e.getMessage(): " + e.getMessage()); System.out.println("e.toString(): " + e.toString()); System.out.println("e.printStackTrace():"); e.printStackTrace(); } } }

Dengan hasil program :


Caught Exception e.getMessage(): Here's my Exception e.toString(): java.lang.Exception: Here's my Exception e.printStackTrace(): java.lang.Exception: Here's my Exception at ExceptionMethods.main

Penanganan kesalahan program pada modul dapat juga dilewati atau tidak diindahkan dengan menggunakan perintah throw sehingga kesalahan program tersebut dapat ditangkap oleh modul pemanggil. Apabila throw ditempatkan pada posisi main, hal itu mempunyai arti biarkanlah kesalahan tersebut ditangani oleh sistem. Contoh program keenambelas menggunakan logika sebagai berikut : main g() f()

Throw error dari g

Throw error dari f

Gambar 19. Throw Error

59

//program ke enambelas public class Rethrowing { public static void f() throws Exception { System.out.println( "originating the exception in f()"); throw new Exception("thrown from f()"); } public static void g() throws Throwable { try { f(); } catch(Exception e) { System.out.println("Inside g(), e.printStackTrace()"); e.printStackTrace(); throw e; } } public static void main(String args[]) throws Throwable { try { g(); } catch(Exception e) { System.out.println(Caught in main, e.printStackTrace()"); e.printStackTrace(); } } }

Dengan hasil program :


originating the exception in f() Inside g(), e.printStackTrace() java.lang.Exception: thrown from f() at Rethrowing.f(Rethrowing.java:8) at Rethrowing.g(Rethrowing.java:12) at Rethrowing.main(Rethrowing.java:24) Caught in main, e.printStackTrace() java.lang.Exception: thrown from f() at Rethrowing.f(Rethrowing.java:8) at Rethrowing.g(Rethrowing.java:12) at Rethrowing.main(Rethrowing.java:24)

Untuk mengurangi beban memori pada saat pengecekan kesalahan program menggunakan perintah finally. Sebelum membahas penggunaan finally terlebih dahulu perhatikan program ketujuhbelas.
//program ke tujuhbelas //Tidak Menggunakan Finally class Switch { boolean state = false; boolean read() { return state; } void on() { state = true; } void off() { state = false; } } public class OnOffSwitch { static Switch sw = new Switch(); public static void main(String args[]) { try { sw.on(); // code that may throw exceptions... } catch(NullPointerException e) { System.out.println("NullPointerException"); sw.off(); } catch(IllegalArgumentException e) { System.out.println("IOException"); sw.off(); } } }

60

Bandingkan dengan program ke-delapan belas


//program ke delapanbelas //mrnggunakan Finally class Switch2 { boolean state = false; boolean read() { return state; } void on() { state = true; } void off() { state = false; } } public class WithFinally { static Switch2 sw = new Switch2(); public static void main(String args[]) { try { sw.on(); // code that may throw exceptions... } catch(NullPointerException e) { System.out.println("NullPointerException"); } catch(IllegalArgumentException e) { System.out.println("IOException"); } finally { sw.off(); } } }

Pada program ke-tujuhbelas pengecekan error dilakukan. Setiap pengecekan memangil objek sw.off(). Sedangkan pada program k-e delapanbelas setelah pengecekan pemanggilan objek sw.off(), maka cukup sekali panggilan pada posisi finally.

61

BAB XII

Thread
Pada pemrograman yang terstruktur, pengembang program melakukan pemanggilan modul secara berurutan. Maksudnya adalah jika ada ada tiga modul, yaitu modul A, modul B, dan modul C maka modul utama akan memanggil sesuai urutannya.

Gambar 20. Single Thread Modul utama memanggil modul A kemudian memanggil modul B, lalu memanggil modul C, yang berarti setelah modul A selesai diproses, maka modul B akan diproses kemudian baru modul C. Dengan kata lain modul B tidak akan diproses apabila modul A belum habis diproses. Begitu pula modul C, modul tersebut tidak akan diproses apabila modul A dan B belum diproses. Program ke-sembilanbelas adalah merupakan contoh program yang berjalan secara terstruktur atau single thread. Dimana setelah horse1 telah selesai di proses maka horse2 diproses, kemudian horse3 diproses.
//program ke sembilanbelas //single thread public class racesingle{ public static void main(String args[]){ raceTest horse1 = new raceTest(); raceTest horse2 = new raceTest(); raceTest horse3 = new raceTest(); System.out.println("\nRace Starting ....\n"); System.out.println("Race started!\n\n"); horse1.run("horse1"); horse2.run("horse2"); horse3.run("horse3"); } } class raceTest{ private int pause; private int stage=0; public void run(String name){ try{ System.out.println(name + " started!"); do{ System.out.println( " - stage: " + (stage+1)); pause = (int) (Math.random() * 1000); stage++;

62

} while (stage<5); } catch(Exception exception){ System.out.println(exception.toString()); } System.out.println(name + " finished!"); } }

Hasil program :
Race Starting .... Race started! horse1 started! - stage: 1 - stage: 2 - stage: 3 - stage: 4 - stage: 5 horse1 finished! horse2 started! - stage: 1 - stage: 2 - stage: 3 - stage: 4 - stage: 5 horse2 finished! horse3 started! - stage: 1 - stage: 2 - stage: 3 - stage: 4 - stage: 5 horse3 finished! Finished executing

Berbeda dengan dengan multithread, setiap modul dapat dijalankan pada waktu yang bersamaan. Sebagai ilustrasinya terlihat pada gambar 21 dibawah ini.

Gambar 21. Multi Thread Jika ada modul A, modul B dan modul C yang dipanggil oleh main, maka proses yang terjadi adalah modul A akan diproses, kemudian tanpa menunggu proses modul A selesai, modul B dapat diproses, begitu pula dengan modul C, tanpa menunggu proses modul A dan B selesai, modul C sudah dapat diproses. Dengan kata lain, multithread adalah :

63

Satu atau beberapa modul yang dijalankan secara bersamaan (multiproses), dimana masing-masing modul tersebut dijalankan pada jalur masing-masing Masing modul menjalankan kode atau script program secara berurutan Multithread sering pula disebut dengan multiproses atau multitasking pada sistem operasi.

Cara penulisan multithread ada dua macam, yaitu - extends Thread o Multithread diimplementasikan sebagai objek dimana objek tersebut mempunyai Method run()
class MyThread extends Thread{ public void run() { // thread body of execution } }

o Membuat thread:
MyThread thr1 = new MyThread();

o Menjalankan thread:
thr1.start();

o Atau Membuat Thread Kemudian Dijalankan


new MyThread().start();

implements runnable o struktur


class MyThread implements Runnable{ ..... public void run(){ // thread body of execution } }

o Membuat Objek
MyThread myObject = new MyThread();

o Membuat Thread Object:


Thread thr1 = new Thread( myObject );

o Cara menjalankan
thr1.start();

Program ke-duapuluh adalah program yang telah dimodifikasi dari program kesembilanbelas, dari yang menggunakan single thread menjadi program yang menggunakan multithread
//program keduapuluh //multithread public class race{ public static void main(String args[]){ raceThread horse1 = new raceThread("horse1"); raceThread horse2 = new raceThread("horse2"); raceThread horse3 = new raceThread("horse3"); System.out.println("\nRace Starting ....\n"); // Mulai Thread horse1.start(); horse2.start(); horse3.start(); System.out.println("Race started!\n\n"); } } class raceThread extends Thread{ private int pause;

64

private int stage=0; public raceThread(String name){ super(name); } public void run(){ try{ do { System.out.println( this.getName() + " - stage: " + (stage+1)); pause = (int) (Math.random() * 1000); Thread.sleep(pause); stage++; } while (stage<5); } catch(InterruptedException exception){ System.out.println(exception.toString()); } System.out.println(getName() + " finished!"); } }

Program diatas menggunakan multithread yang berarti modul horse1 diproses, kemudian tanpa harus menunggu horse1 selesai diproses, maka horse2 dapat diproses, begitu pula horse3, sudah dapat diproses tanpa harus menunggu horse1 dan horse2 selesai. Hasil program :
Race Starting .... horse1 - stage: 1 horse2 - stage: 1 Race started! horse3 - stage: 1 horse1 - stage: 2 horse1 - stage: 3 horse3 - stage: 2 horse2 - stage: 2 horse3 - stage: 3 horse1 - stage: 4 horse2 - stage: 3 horse1 - stage: 5 horse3 - stage: 4 horse3 - stage: 5 horse1 finished! horse3 finished! horse2 - stage: 4 horse2 - stage: 5 horse2 finished!

Pada penggunaan multithread modul, objek dapat juga diberikan prioritas, sehingga objek yang diberikan prioritas akan diproses sesuai dengan prioritas yang diberikan. Cara memberikan prioritas adalah sebagai berikut :
ThreadName.setPriority(intNumber)

Parameter intNumber pada setPriority(intNumber) dapat diberikan nilai dari 1 sampai dengan 10. Atau menggunakan variable system sebagai berikut : MIN_PRIORITY = 1 NORM_PRIORITY=5 MAX_PRIORITY=10

65

Contoh program :
//program ke duapuluhsatu //programpriority class A extends Thread{ public void run(){ System.out.println("Thread A started" ); for(int i=1;i<=4;i++){ System.out.println("\t From ThreadA: i= "+i); } System.out.println("Exit from A"); } } class B extends Thread{ public void run(){ System.out.println("Thread B started"); for(int j=1;j<=4;j++){ System.out.println("\t From ThreadB: j= "+j); } System.out.println("Exit from B"); } } class C extends Thread{ public void run(){ System.out.println("Thread C started"); for(int k=1;k<=4;k++){ System.out.println("\t From ThreadC: k= "+k); } System.out.println("Exit from C"); } } class ThreadPriority{ public static void main(String args[]){ A threadA=new A(); B threadB=new B(); C threadC=new C(); threadA.setPriority(Thread.NORM_PRIORITY); threadB.setPriority(Thread.MIN_PRIORITY); threadC.setPriority(Thread.MAX_PRIORITY); threadA.start(); threadB.start(); threadC.start(); System.out.println("End of main thread"); } }

Program ke-duapuluhsatu adalah program yang memberikan nilai prioritas normal,yaitu 5, pada threadA, kemudian pada threadB diberikan nilai prioritas minimum, yaitu 1, dan pada threadC, diberikan nilai prioritas tertinggi, yaitu 10. Sehingga pada saat threadA, threadB, dan threadC dijalankan, maka program java akan mendahulukan threadC untuk diproses, kemudian threadA dan threadB. Penggunaan multithread dapat mengakibatkan bentrokan yang dikenal dengan istilah Inconsistent State, yaitu apabila terdapat lebih dari satu thread yang melakukan proses pada data yang sama. Untuk menghindari bentrokan tersebut, maka pada pemrograman java disediakan fasilitas Synchronized (Locking The Object). Contohnya adalah ketika ada objek yang bernama account digunakan oleh beberapa objek, yaitu MyThread, YourThread, dan HerThread, lihat gambar 22. Didalam objek account tersebut ada nilai yang dirubah oleh ketiga objek yang mengakses objek account. MyThread menambah nilai 1 sebanyak 10 kali dengan pemanggilan objek sebanyak 5 kali pada variabel balance didalam objek account.

66

YourThread mengurangi nilai 1 sebanyak 10 kali pada variable balance didalam objek account dengan pemanggilan objek sebanyak 5 kali Dan HerThread hanya menampilkan nilai variable balance sebanyak 10 kali didalam objek. Dengan kata lain balance = 0 + (1 X 10 X 5) (1 X 10 X 5), hasilnya adalah 0. Apabila objek tersebut tidak menggunakan synchronized, maka akan terjadi inconsistent state sehingga nilai tersebut belum tentu menghasilkan nilai 0.

MyThread

account (shared object)

YourThread

HerThread Gambar 22. Shared Object Contoh program :


//program ke duapuluh dua class InternetBankingSystem { public static void main(String [] args ) { Account accountObject = new Account (); Thread t1 = new Thread(new MyThread(accountObject)); Thread t2 = new Thread(new YourThread(accountObject)); Thread t3 = new Thread(new HerThread(accountObject)); t1.start(); t2.start(); t3.start(); } } class MyThread implements Runnable { Account account; private int pause; private int i = 0; public MyThread (Account s) { account = s;} public void run() { try { do { account.deposit(); pause = (int) (Math.random() * 10); Thread.sleep(pause); i++; } while (i<5); }catch(InterruptedException exception){ System.out.println(exception.toString()); } }

67

} class YourThread implements Runnable { Account account; private int pause; private int i = 0; public YourThread (Account s) { account = s;} public void run() { try { do { account.withdraw(); pause = (int) (Math.random() * 10); Thread.sleep(pause); i++; } while (i<5); }catch(InterruptedException exception){ System.out.println(exception.toString()); } } } class HerThread implements Runnable { Account account; private int pause; private int i = 0; public HerThread (Account s) { account = s; } public void run() { try { do { account.enquire(); pause = (int) (Math.random() * 10); Thread.sleep(pause); i++; } while(i<5); }catch(InterruptedException exception){ System.out.println(exception.toString()); } } } //shared object class Account { int balance = 0; int i=0; public void deposit( ) { i=0; do { balance += 1; i++; System.out.println(balance + " deposit " + i); }while (i<10); } public void withdraw( ) { i=0; do { balance -= 1; i++; System.out.println(balance + " withdraw " + i ); }while (i<10); } public void enquire( ) { i=0; do { i++; System.out.println(balance + " Enquire " + i); }while (i<10); } }

68

Hasil program
1 deposit 1 2 deposit 2 3 deposit 3 4 deposit 4 5 deposit 5 7 Enquire 6 7 Enquire 7 7 Enquire 8 7 Enquire 9 7 Enquire 10 Finished executing

Kemudian rubahlah program ke-duapuluhdua dengan tambahan synchronized pada semua method di objek class account.
class Account { int balance = 0; int i=0; public synchronized void deposit( ) { i=0; do { balance += 1; i++; System.out.println(balance + " deposit " + i); }while (i<10); } public synchronized void withdraw( ) { i=0; do { balance -= 1; i++; System.out.println(balance + " withdraw " + i ); }while (i<10); } public synchronized void enquire( ) { i=0; do { i++; System.out.println(balance + " Enquire " + i); }while (i<10); } }

Jalankan program dan lihat hasilnya :


1 deposit 1 2 deposit 2 3 deposit 3 4 deposit 4 5 deposit 5 -5 deposit 5 -4 deposit 6 -3 deposit 7 -2 deposit 8 -1 deposit 9 0 deposit 10 0 Enquire 1 0 Enquire 2 0 Enquire 3 0 Enquire 4 0 Enquire 5 0 Enquire 6 0 Enquire 7 0 Enquire 8 0 Enquire 9 0 Enquire 10 Finished executing

69

BAB XIII

AKSES FILE
Pada pemrograman java standar, fasilitas untuk mengakses file menggunakan java.io.*. Untuk mengakses file pada sistem operasi Unix, pemisah antara direktori dan file menggunakan tanda slash (/), contohnya /home/windu/test.txt. Yang harus diperhatikan adalah Unix merupakan sistem operasi yang case sensitive, sehingga penulisan perintah atau nama dibedakan antara huruf besar dan huruf kecil. Pada sistem operasi Ms. Windows, pemisah antara direktori dan file menggunakan tanda backslash (\), contohnya :c:\windu\test.txt, dimana penggunaan huruf besar dan huruf kecil sama saja. Hanya saja pada pemrograman java untuk membaca backslash menggunakan dua backslash (\\), contohnya c:\\windu\\test.txt. Untuk membaca file terdapat 2 (dua) cara, yaitu sequential access dan random access. Sequential Access Yang dimaksud dengan sequential access adalah pembacaan data secara berurutan. Lebih jelasnya, untuk mendapatkan data/informasi, maka program membuat koneksi stream dari source (file, memori, socket, dll), kemudian program akan membaca data/informasi tersebut secara berurutan/sequential.

Gambar 23. Sequential Access Membaca Source Begitu juga sebaliknya, program dapat mengirimkan data/informasi kepada target (file, memori, socket, dll) dengan membuat koneksi stream dan mengirimkannya secara berurutan/sequential.

Gambar 24. Sequential Access Menyimpan ke Target

70

Cara pembacaan maupun penulisan terdapat dua cara, yaitu char stream dan byte stream. Character stream adalah penggunaan 16 bit karakter untuk melakukan pembacaan dan penyimpanan data teks. Untuk membaca file secara character stream menggunakan objek FileReader dan untuk melakukan penulisannya menggunakan objek FileWriter. FileReader

Constructor
FileReader(File file) Membuat objek FileReader baru, dengan parameter objek File untuk

pembacaan.
FileReader(FileDescriptor fd) Membuat objek FileReader baru dengan parameter FileDescriptor FileReader(String fileName) Membuat objek FileReader baru dengan parameter string

Methods bawaan dari class java.io.InputStreamReader


close, getEncoding, read, read, ready

Methods bawaan dari class java.io.Reader


mark, markSupported, read, reset, skip

FileWriter

Constructor
FileWriter(File file)

Membuat objek FileWriter dengan parameter objek File.


FileWriter(File file, boolean append)

Membuat objek FileWriter dengan parameter File dan boolean append.


FileWriter(FileDescriptor fd)

Membuat objek FileWriter dengan parameter objek filedescriptor.


FileWriter(String fileName)

Membuat objek FileWriter dengan nama file.


FileWriter(String fileName, boolean append)

Membuat objek FileWriter dengan parameter nama file dan boolean append. Methods bawaan dari class java.io.OutputStreamWriter
close, flush, getEncoding, write, write, write

Methods bawaan dari class java.io.Writer


write, write

Methods bawaan dari class java.lang.Object


clone, equals, finalize, getClass, hashCode, notify, notifyAll,

71

toString, wait, wait, wait

Sedangkan byte stream menggunakan 8 bit binari untuk melakukan pembacaan dan penyimpanan data. Byte stream digunakan untuk mengirimkan data berupa file (teks, foto, audio dan bentuk file lainnya). Dibawah ini terdapat beberapa program sequential access dengan rancangan seperti pada gambar 25. Di sana terdapat file yang bernama farrago.txt yang akan dibaca oleh program, kemudian progam akan menyimpannya dengan nama file outagain.txt pada direktori yang sama. Farrago.txt program outagain.txt

Gambar 25. Membaca File Farrago.txt dan Disimpan Ke outagain.txt Contoh program character stream :
//program ke dua puluh tiga //character stream import java.io.*; public class dofile { public static void main(String[] args) throws IOException { String txtmsg=""; try { FileReader in = new FileReader("farrago.txt"); FileWriter out = new FileWriter("outagain.txt"); int c; while ((c = in.read()) != -1){ out.write(c); txtmsg=txtmsg + (char) c; } in.close(); out.close(); } catch (FileNotFoundException e) { System.err.println("CheckedIOTest: " + e); System.exit(-1); } catch (IOException e) { System.err.println("CheckedIOTest: " + e); System.exit(-1); } System.out.println(txtmsg ); } }

Contoh program byte stream :


//program kedua puluh empat //byte stream import java.io.*; public class dostream { public static void main(String[] args) throws IOException { try { FileInputStream in = new FileInputStream("farrago.txt"); FileOutputStream out = new FileOutputStream("outagain.txt"); int bytelength=in.available(); for (int bytecount=0;bytecount<bytelength;bytecount++){

72

out.write(in.read()); } in.close(); out.close(); } catch (FileNotFoundException e) { System.err.println("CheckedIOTest: " + e); System.exit(-1); } catch (IOException e) { System.err.println("CheckedIOTest: " + e); System.exit(-1); } } }

Random Access Random Access melakukan pembacaan atau penyimpanan dengan acak/non sequential dengan penandaan berupa pointer.

Gambar 26. Perbedaan Random Access dan Sequential Access Untuk melakukan pembacaan atau penyimpanan data menggunakan objek RandomAccessFile.

Constructor
RandomAccessFile(File file, String mode)

Membuat objek RandomAccessFile stream dengan parameter objek File dan parameter mode r untuk membaca, w untuk menyimpan atau rw untuk membaca dan menulis.
RandomAccessFile(String name, String mode)

Membuat objek RandomAccessFile stream dengan parameter r untuk membaca, w untuk menyimpan atau rw untuk membaca dan menulis.

Beberapa Method Yang perlu diketahui


Void close()

Menutup aktivitas RandomAccessFile.


long getFilePointer()

Mendapat nilai pointer.


long length()

73

Mendapat nilai ukuran panjang.


int read()

Membaca data byte.


int read(byte[] b)

Membaca data byte kemudian dimasukkan kedalam array.


int read(byte[] b, int off, int len)

Membaca panjang byte yang ditentukan parameter kemudian disimpan ke dalam array.
boolean readBoolean()

Membaca tipe Boolean.


byte readByte()

Membaca dengan model eight-bit.


char readChar()

Membaca karakter Unicode.


double readDouble()

Membaca tipe data double.


float readFloat()

Membaca tipe data float.


int readInt()

Membaca tipe data 32-bit integer.


String readLine()

Membaca baris berikutnya.


long readLong()

Membaca tipe data 64-bit integer.


short readShort()

Membaca tipe data 16-bit angka.


String readUTF()

Membaca tipe data string.


void seek(long pos)

Mencari posisi pointer offset dari posisi awal dari file sampai akhir.
void write(byte[] b)

Menyimpan tipe data byte array.


void write(byte[] b, int off, int len)

Menyimpan tipe data byte array dengan panjang tertentu dengan posisi pointer.
void write(int b)

Menyimpan tipe data byte dan integer.


void writeBoolean(boolean v) Mnyimpan tipe data boolean. void writeByte(int v)

74

Menyimpan dengan model one-byte value.


void writeBytes(String s)

Menyimpan tipe data string.


void writeChar(int v)

Menyimpan tipe data char.


void writeChars(String s)

Menyimpan tipe data string.


void writeDouble(double v)

Menyimpan tipe data double.


void writeFloat(float v)

Menyimpan tipe data float.


void writeInt(int v)

Menyimpan tipe data integer.


void writeLong(long v)

Menyimpan tipe data long.


void writeShort(int v)

Menyimpan tipe data short.


void writeUTF(String str)

Menyimpan tipe data string dalam bentuk atau model UTF-8 Contoh program :
//program ke duapuluh lima //random access import java.io.*; public class dorandomaccess { public static void main(String[] args) throws IOException { String txtmsg=""; try { RandomAccessFile in = new RandomAccessFile("farrago.txt", "r"); RandomAccessFile out = new RandomAccessFile("outagain.txt", "rw"); long bytelength=in.length(); for (long bytecount=0;bytecount<bytelength;bytecount++) { char fch=(char)in.read(); out.write((byte) fch); txtmsg=txtmsg+fch; } in.close(); out.close(); } catch (FileNotFoundException e) { System.err.println("CheckedIOTest: " + e); System.exit(-1); } catch (IOException e) { System.err.println("CheckedIOTest: " + e); System.exit(-1); } System.out.println(txtmsg ); } }

75

Selain penggunaan Sequential dan Random Access, melakukan akses file bisa dengan menggunakan filter stream, yaitu dengan cara membuat olahan dari data stream kemudian dibentuk menjadi model yang lain. Contoh filter stream, salah satunya adalah BufferedReader, yang salah satu method, readline, merubah data stream menjadi perbaris.

Constructor
BufferedReader(Reader in)

Membuat buffer dari model karakter kebentuk standar buffer.


BufferedReader(Reader in, int sz)

Membuat buffer dari model karakter kebentuk standar buffer dengan panjang tertentu.

Beberapa Method yang perlu diketahui


int read()

Membaca single karakter


Int read(char[] cbuf, int off, int len)

Membaca berdasarkan panjang dan pointer yang ditentukan.


String readLine()

Membaca perbaris dari teks. Contoh program :


//program ke duapuluh enam //buffred reader import java.io.*; public class dobuffer { public static void main(String[] args) throws IOException { String txtmsg=""; try { FileReader in = new FileReader("farrago.txt"); FileWriter out = new FileWriter("outagain.txt"); BufferedReader br = new BufferedReader(in); String str; while((str=br.readLine())!=null) { txtmsg=txtmsg+str+"\n"; } out.write(txtmsg); in.close(); out.close(); } catch (FileNotFoundException e) { System.err.println("CheckedIOTest: " + e); System.exit(-1); } catch (IOException e) { System.err.println("CheckedIOTest: " + e); System.exit(-1); } System.out.println(txtmsg); } }

76

Latihan 4. rubah program sepuluh dengan akses file

Gambar 27. Gui dan akses file


//program kedua puluh tujuh //latihan ke empat import javax.swing.*; import java.awt.*; import java.awt.datatransfer.*; import java.awt.event.*; import java.lang.*; import java.io.*; class frame52 extends JFrame { private Container konten = new Container(); private private private private private private private private private private private private JMenuBar bar = new JMenuBar(); JMenu mnFile = new JMenu("File"); JMenuItem mniFileBaru = new JMenuItem("File Baru"); JMenuItem mniFileBuka = new JMenuItem("Buka File"); JMenuItem mniFileSimpan = new JMenuItem("Simpan File"); JMenuItem mniFileKeluar = new JMenuItem("Keluar"); JMenu mnEdit = new JMenu("Edit"); JMenuItem mniCopy = new JMenuItem("Copy"); JMenuItem mniCut = new JMenuItem("Cut"); JMenuItem mniPaste = new JMenuItem("Paste"); JMenu mnTentang = new JMenu("Tentang"); JMenuItem mniTentang = new JMenuItem("Tentang Kami");

private JLabel lblKategori = new JLabel("Kategori"); String pilKategori[]={"Nasional","Daerah","Internasional"}; private JComboBox cmbKategori = new JComboBox(pilKategori); private JLabel lblDaerah = new JLabel("Daerah"); String pilDaerah[]={"Indonesia Bagian Barat", "Indonesia Bagian Timur"};

77

private JComboBox cmbDaerah = new JComboBox(pilDaerah); private JLabel lblJudul = new JLabel("Judul"); private JTextField txtJudul = new JTextField(); private JLabel lblIsi = new JLabel("Isi"); private JTextArea txtArea; private JScrollPane jScrollPane1 = new JScrollPane(); private JPanel panel1 = new JPanel(); private JPanel panel2 = new JPanel(); private Box box1 = Box.createVerticalBox(); private private private private JPopupMenu popmenu = new JPopupMenu(); JMenuItem mnipopCopy = new JMenuItem("Copy"); JMenuItem mnipopCut = new JMenuItem("Cut"); JMenuItem mniPaste = new JMenuItem("Paste");

FileDialog fd2=new FileDialog(this,"Save As..",FileDialog.SAVE); FileDialog fd1=new FileDialog(this,"Open..",FileDialog.LOAD); String txtmsg, cuttext; Clipboard clipb;

frame52() { super("Universitas Budi Luhur"); setSize(500,500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ItemHandler itemHandler = new ItemHandler(); mniFileBaru.addActionListener(itemHandler); mniFileBuka.addActionListener(itemHandler); mniFileSimpan.addActionListener(itemHandler); mniFileKeluar.addActionListener(itemHandler); mniCopy.addActionListener(itemHandler); mniCut.addActionListener(itemHandler); mniPaste.addActionListener(itemHandler); mniTentang.addActionListener(itemHandler); mnipopCopy.addActionListener(itemHandler); mnipopCut.addActionListener(itemHandler); mnipopPaste.addActionListener(itemHandler); mnFile.add(mniFileBaru); mnFile.add(mniFileBuka); mnFile.add(mniFileSimpan); mnFile.add(mniFileKeluar); mnEdit.add(mniCopy); mnEdit.add(mniCut); mnEdit.add(mniPaste); mnTentang.add(mniTentang); bar.add(mnFile); bar.add(mnEdit); bar.add(mnTentang); setJMenuBar(bar); popmenu.add(mnipopCopy); popmenu.add(mnipopCut); popmenu.add(mnipopPaste); panel1.setLayout(new GridLayout(2,2)); panel1.add(lblKategori); panel1.add(cmbKategori); panel1.add(lblDaerah); panel1.add(cmbDaerah);

78

box1.add(panel1); panel2.setLayout(new GridLayout(3,1)); panel2.add(lblJudul); panel2.add(txtJudul); panel2.add(lblIsi); box1.add(panel2); txtArea = new JTextArea(20,15); txtArea.setLineWrap(true); txtArea.addMouseListener ( new MouseListener() { public void mousePressed(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public void mouseReleased(MouseEvent e) { //jika Click kanan maka tampilkan popup if (e.getButton() == 3) popmenu.show(e.getComponent(), e.getX(), e.getY()); } } ); jScrollPane1.getViewport().add(txtArea,null); box1.add(jScrollPane1);

konten = getContentPane(); konten.setLayout(new BorderLayout()); konten.add(box1, BorderLayout.NORTH); setVisible(true); //sama dengan show() } private class ItemHandler implements ActionListener {public void actionPerformed(ActionEvent e) { clipb=Toolkit.getDefaultToolkit().getSystemClipboard(); Object objek = e.getSource(); if (objek == mniFileBaru) { cmbKategori.setSelectedIndex(0); cmbDaerah.setSelectedIndex(0); txtJudul.setText(""); txtArea.setText(""); }else if (objek == mniFileBuka) { try{ fd1.setVisible(true); String filename=fd1.getFile(); String dirname=fd1.getDirectory(); File openfile=new File(dirname,filename); FileInputStream fis=new FileInputStream(openfile); int bytelength=fis.available(); txtmsg = ""; for (int bytecount=0;bytecount<bytelength;bytecount++){ char fch=(char)fis.read(); txtmsg=txtmsg+fch; } String atxt[] = txtmsg.split("~"); System.out.println(atxt.length); if ( atxt.length == 1){ txtArea.setText(atxt[0]);

79

} else { cmbKategori.setSelectedIndex(Integer.parseInt(atxt[0])); cmbDaerah.setSelectedIndex(Integer.parseInt(atxt[1])); txtJudul.setText(atxt[2]); txtArea.setText(atxt[3]); } }catch(Exception ioe){ JOptionPane.showMessageDialog (frame52.this,ioe.toString(), "Error", JOptionPane.PLAIN_MESSAGE); } }else if (objek == mniFileSimpan) try{ String sSimpan; sSimpan = cmbKategori.getSelectedIndex() + "~" + cmbDaerah.getSelectedIndex() + "~" + txtJudul.getText() + "~" + txtArea.getText(); fd2.setVisible(true); FileOutputStream fos1=new FileOutputStream( fd2.getDirectory()+fd2.getFile()); fos1.write(sSimpan.getBytes()); fos1.close(); }catch(Exception ioe) { JOptionPane.showMessageDialog (frame52.this,ioe.toString(), "Error",JOptionPane.PLAIN_MESSAGE); }else if (objek == mniCopy || objek == mnipopCopy){ try{ cuttext=txtArea.getSelectedText(); if (cuttext.equals("")) cuttext = txtArea.getText(); StringSelection sel=new StringSelection(cuttext); clipb.setContents(sel,null); }catch(Exception ioe) { JOptionPane.showMessageDialog (frame52.this,ioe.toString(), "Error Copy",JOptionPane.PLAIN_MESSAGE); } }else if (objek == mniCut || objek == mnipopCut ){ try{ cuttext=txtArea.getSelectedText(); StringSelection sel=new StringSelection(cuttext); clipb.setContents(sel,null); int cutindex=txtArea.getText().indexOf(cuttext); txtArea.replaceRange("",cutindex, cutindex+cuttext.length()); }catch(Exception ioe){ JOptionPane.showMessageDialog (frame52.this,ioe.toString(), "Error",JOptionPane.PLAIN_MESSAGE); } }else if (objek == mniPaste || objek == mnipopPaste){ try{ Transferable cont=clipb.getContents(this); cuttext=(String)(cont.getTransferData (DataFlavor.stringFlavor)); int getcaretpos=txtArea.getCaretPosition(); txtArea.insert(cuttext,getcaretpos); }catch(Exception ioe){ JOptionPane.showMessageDialog (frame52.this,ioe.toString(), "Error",JOptionPane.PLAIN_MESSAGE); } }else if (objek == mniTentang){ JOptionPane.showMessageDialog (frame52.this,"Bahasa Pemrograman 3-Universitas Budi Luhur", "Tentang",JOptionPane.PLAIN_MESSAGE); }else if (objek == mniFileKeluar)

80

System.exit(0); } } } public class praktek52{ public static void main(String args[]){ new frame52(); } }

81

BAB XIV

Database (jdbc & mysql)


Pengertian dari database adalah sekumpulan informasi yang terorganisir sehingga mudah diakses dan kelola. Dimana database tersebut dapat menyimpan informasi dengan tipe data String, Numerik, Date, dan tipe data lainnya. Untuk melakukan perintah manipulasi data, user dapat menggunakan bahasa Structure Query Language (SQL). Berbagai macam database yang telah ada dalam dunia aplikasi adalah seperti Oracle, DB2, MySql, dan lain-lain. Pada buku ini, yang dibahas adalah bagaimana bahasa pemrograman java dapat berinteraksi dengan database MySql dengan menggunakan database connector (jdbc). Sebelum lebih jauh membahas mengenai program java dan konektor, lebih dulu kita mengenal sedikit mengenai database. Untuk lebih lengkapnya kita dapat merujukpada mata kuliah sistem database. Tipe data yang umum pada database adalah : String Contoh : Char, Varchar Numeric Contoh : Byte, Integer, Single, Double, Float Date Contoh : Date, Time CLOB (Character Large Object)/TEXT BLOB (Binary Large Object) FILE : Suara, Gambar, Video, Dan Lain Terdapat penggunaan relasi sebagai penghubung antara satu tabel degan tabel lainnya beserta model-model key pada tabel di database. Model-model key tersebut adalah : Primary Key Juga Disebut Primary Keyword berfungsi sebagai Field Kunci dari Tabel dan Bersifat Unique (Tidak Ada Duplikasi), Contoh : NIM pada Mahasiswa Atau Nomor Rekening Pada Aplikasi Perbank-an Secondary Key Field Kunci Dari Tabel Setelah Primary Key. Contoh : Nomor ATM pada Perbank-an Dapat Digunakan Sebagai Secondary Key Setelah Nomor Rekening Candidat Key Kemungkinan Pemakaian Field Sebagai Kunci Dari Sebuah Tabel Foreign Key Merupakan Field Dari Tabel, Tapi Field Tersebut Merupakan Primary Key Pada Tabel Lainnya

82

Gambar 28. Relasi Tabel Pada gambar 28 ada 2 (dua) table yang berhubungan, yaitu tabel nasabah dan tabel transaksi. Pada tabel Nasabah yang menjadi Primary Key adalah Norek dan sebagai Secondary Key adalah NoATM. Sedangkan pada table Transaksi terdapat Primary Key yaitu NoTrans dan Foreign Key hasil dari relasi dengan table nasabah, yaitu NoRek. Penggunaan query sebagai sarana untuk berinteraksi dengan database, secara standar, dapat melakukan manipulasi data seperti membuat tabel (create), mengubah tabel (alter), menambah data (Insert), merubah data (update/edit), menghapus data (delete), membaca data (select) dan fasilitas lainnya. Membuat table mahasiswa
Create Table <Nama Tabel> (<Nama Field> <Nama Field>], ) <Tipe Data> (<Panjang>), [<Model Key>

Contoh :
CREATE TABLE mahasiswa ( Nim varchar(10) NOT NULL default '', Nama varchar(50) default NULL, Alamat varchar(200) default NULL, Umur int(2) default 0, Lulus int(2) default 0, PRIMARY KEY (`Nim`) )

Gambar 29. Tabel mahasiswa

83

Menghapus tabel mahasiswa


Drop Table <Nama Tabel>

Contoh :
drop table mahasiswa

Merubah tabel mahasiswa


Alter Table <Nama (<panjang>)] Tabel> <Add|Modify|Change|Drop> <Nama Field> [<Tipe Data>

Contoh : Merubah nama field lulus menjadi kelulusan


alter table mahasiswa Change Lulus Kelulusan int(1)

Menghapus field kelulusan


alter table mahasiswa Drop Kelulusan

Menambah field lulus dengan tipe data integer dengan ukuran panjang 2
alter table mahasiswa Add Lulus int(2)

Merubah ukuran panjang dari field lulus dengan ukuran panjang 1


alter table mahasiswa Modify Lulus int(1)

Menambah data pada tabel mahasiswa


Insert Into <Nama Tabel> [(Nama Field)] Values (<Ekspresi>)

Contoh : Menambah data pada tabel mahasiswa, dengan nilai masing-masing field adalah Nim = 9511500134, Nama = Windu Gata, Alamat = Jl. Perdagangan V/21, Umur = 28, dan Lulus = 1
Insert Into mahasiswa Perdagangan V/21, 28,1) values (9511500134, Windu Gata, Jl.

Menambah data pada tabel mahasiswa, dengan nilai Nim = 9511500134 dan Nama = Windu Gata
Insert Into mahasiswa (nim, nama) values (9511500134, Windu Gata)

Mengubah data pada tabel mahasiswa


Update <Nama Tabel> Set <Nama Field=Ekspresi> [Where <Definisi>]

Contoh : Mengubah seluruh data pada tabel mahasiswa dengan nilai lulus = 0
Update mahasiswa Set lulus=0

Mengubah tabel mahasiswa dengan nilai nama=Windu Gata, SKOM dan alamat=Jl. Perdagangan V/21, Bintaro. Dimana Nim yang di filter adalah 9511500134
Update mahasiswa Set nama=Windu Gata, SKOM, alamat=Jl. Perdagangan V/21, Bintaro Where nim=9511500134

Menghapus data pada tabel mahasiswa


Delete From <Nama Tabel> [where <Ekspresi>]

Contoh : Menghapus seluruh data pada tabel mahasiswa Delete From mahasiswa Menghapus data pada tabel mahasiswa dimana Nim yang difilter adalah 9511500134 Delete From mahasiswa Where Nim=9511500134 Membaca data pada tabel mahasiswa 84

Select <*/Nama Field> From <Nama Tabel> [Where <Definisi>]

Contoh : Membaca data pada field Nim, Nama dari tabel mahasiswa Select Nim, Nama From mahasiswa Membaca data pada field Nim, Nama dari tabel mahasiswa dimana Nimnya adalah 9511500134 Select Nim, Nama From mahasiswa Where Nim = 9511500134 Membaca data pada keseluruhan field dari tabel mahasiswa Select * from mahasiswa Setelah mengenal sedikit mengenai database, kemudian kita akan mengenali database yang akan digunakan, yaitu MySql. Penulis memilih database MySql yang dijadikan contoh penggunaan, dikarenakan : Opensource Database, untuk penelitian dan pengembangan bukan untuk bisnis perusahaan, gratis, tetapi handal. Mendukung perintah SQL, koneksi java atau JDBC, dan koneksi ODBC Multi OS/Platform (Unix, Windows & Mac), menyediakan instalasi di sistem operasi apapun. Multi Thread Database 24 H X 7 D, dapat diaktifkan 24 jam dan 7 hari tanpa mati. 2Gb 8Tr, dapat menyimpan data dalam hitungan TeraByte tergantung hardware dan system operasi. W2K Compliance, tidak ada bug tahun 2000 Mendukung Relasi Database, Procedure & Function (MySql 4.0 atau Mysql Terbaru) SubQuery dan View (MySql 5.0 atau MySql Terbaru) User Privileges, setiap pengguna mempunyai hak akses masing-masing. Banyak aplikasi Bantu yang disediakan oleh pengembang lepas maupun dari mysql.com itu sendiri Model Model variabel dari database mysql : Numeric

85

String

Date

Koneksi dari bahasa pemrograman java ke database menggunakan konektor bernama JDBC. JDBC ini bukanlah singkatan, melainkan trade mark atau hak paten yang dikenalkan pada tahun 1997 oleh perusahaan Sun Microsystem. JDBC ini dapat digunakan dengan koneksi two tier atau three tier. Yang dimaksud dengan two tier, yaitu program langsung mengakses ke database tanpa perantara lainnya (lihat gambar 30).

Gambar 30. JDBC-Two Tier

86

sedangkan three tier adalah program dapat mengakses data melalui perantara atau midle party atau third party (lihat gambar 31).

Gambar 31. JDBC-Three Tier Cara mendapatkan driver JDBC, dapat men-download pada masing-masing website perusahaan yang membangun database yang kita gunakan atau buka website http://servlet.java.sun.com/products/jdbc/drivers

Gambar 32. JDBC Driver Untuk database MySql, download file mysql-connector-java-<versi>-ga.zip dari website www.mysql.com. Ekstrak zip tersebut, kemudian terdapat file mysql-connector-java-<jar>-gabin.jar, pada file zip, kemudian copy file mysql-connector-java-<jar>-ga-bin.jar pada direktori yang sama denga program java yang dibuat atau buatlah PATH yang diarahkan ke direktori mysql-connector-java-<jar>-ga-bin.jar berada. Tambahkan pada atas program import java.sql.*. Pada java.sql.*, banyak objek yang disediakan oleh bahasa pemrograman java sebagai fasilitas untuk manipulasi data.

87

Cara melakukan koneksi tidak boleh menggunakan import <nama driver>, melainkan seperti contoh program di bawah ini :

try{ Class.forName("com.mysql.jdbc.Driver"); Connection Conn = DriverManager.getConnection ("jdbc:mysql://<nama_komputer>/<nama_database>?user=<nama_user> &password=<kode>"); Statement Stmt = Conn.createStatement(); ResultSet RS = Stmt.executeQuery("SELECT * from <Nama_Database>); System.out.println(Koneksi Berhasil Anda Lakukan); } catch (Exception ieo) { System.out.println(Error + ieo.toString()); }

java.sql.Statement Objek yang digunakan untuk mengeksekusi perintah SQL. Dan menerima hasil dari eksekusi tersebut.

Beberapa Method yang harus diketahui


void addBatch(String sql)

Menambahkan perintah SQL kedalam list of commands.


void cancel()

Membatalkan perintah SQL jika DBMS dan driver mengagalkan perintah.


void clearBatch()

Menghapus perintah Statement object's pada current list of SQL commands.


void clearWarnings()

Menghapus semua laporan peringatan dari Statement object.


void close()

Menutup Statement object and JDBC.


boolean execute(String sql)

Mengeksekusi perintah SQL, yang dapat terdiri dari beberapa perintah.


int[] executeBatch()

Mengeksekusi seluruh perintah pada list batch dan jika semua perintah berhasil dijalankan akan memberikan nilai berupa integer dalam bentuk array.
ResultSet executeQuery(String sql)

Mengeksekusi perintah SQL dalam bentuk tunggal atau single ResultSet object.
Connection getConnection()

Menndapatkan Connection object dari Statement object.

88

int getFetchDirection()

Menarik data dari table yang dapat digunakan oleh resultsets.


int getFetchSize()

Mendapatkan jumlah baris dari table database untuk penggunaan ResultSet.


Int getQueryTimeout()

Mendapatkan nilai timeout dari query Statement object


ResultSet getResultSet()

Mendapatkan hasil proses untuk penggunaan objek ResultSet.


SQLWarning getWarnings()

Mendapatkan laporan peringatan Statement object.


void setCursorName(String name)

Mendapatkan nama kursor.


void setQueryTimeout(int seconds)

Mengatur waktu dalam hitungan detik untuk pengaksesan. java.sql.ResultSet Berbentuk table dari hasil perintah yang dilakukan oleh java.sql.Statement kepada database. ResultSet ini mengatur cursor pointer pada baris data. Dapat menempatkan kursor sebelum baris, baris, dan akhir baris. Objek memungkin pemuktahiran data, penambahan data dan penghapusan data pada tabel di database.

Beberapa Method yang harus diketahui


boolean absolute(int row)

Menempatkan kursor pada baris yang disesuaikan parameter


void afterLast()

Menempatkan kursor setelah akhir baris table.


void beforeFirst()

Menempatkan kursor sebelum awal baris table.


void cancelRowUpdates()

Membatalkan perubahan baris.


void clearWarnings()

Menghapus laporan peringatan.


void close()

Menutup koneksi ResultSet dan JDBC


void deleteRow()

Menghapus baris pada kursor aktif. 89

int findColumn(String columnName)

Mencari kolom tertentu.


boolean first()

Menempatkan kursor pada posisi awal baris table.


InputStream getAsciiStream(int columnIndex)

Mendapatkan tipe data ascii dengan parameter index kolom.


InputStream getAsciiStream(String columnName)

Mendapatkan tipe data ascii dengan parameter nama kolom.


BigDecimal getBigDecimal(int columnIndex) Mendapatkan tipe data java.math.BigDecimal dengan

parameter indeks kolom.


BigDecimal getBigDecimal(String columnName) Mendapatkan tipe data java.math.BigDecimal dengan

parameter nama kolom.


InputStream getBinaryStream(int columnIndex)

Mendapatkan tipe data BinaryStream dengan parameter indeks kolom.


InputStream getBinaryStream(String columnName)

Mendapatkan tipe data BinaryStream dengan parameter nama kolom.


Blob getBlob(int i)

Mendapatkan tipe data BLOB dengan parameter indeks kolom.


Blob getBlob(String colName)

Mendapatkan tipe data BLOB dengan parameter nama kolom.


boolean getBoolean(int columnIndex)

Mendapatkan tipe data boolen dengan parameter indeks kolom.


boolean getBoolean(String columnName)

Mendapatkan tipe data Boolean dengan parameter nama kolom.


byte getByte(int columnIndex)

Mendapatkan tipe data byte dengan parameter indeks kolom.


byte getByte(String columnName)

Mendapatkan tipe data byte dengan parameter nama kolom.


byte[] getBytes(int columnIndex)

Mendapatkan tipe data byte dengan bentuk array dengan

90

parameter indeks kolom.


byte[] getBytes(String columnName)

Mendapatkan tipe data byte dalam bentuk array dengan parameter nama kolom.
Reader getCharacterStream(int columnIndex)

Mendapatkan data berupa karakter dalam bentuk stream dengan parameter indeks kolom.
Reader getCharacterStream(String columnName)

Mendapatkan data berupa karaktater dalam bentuk stream dengan parameter nama kolom.
Clob getClob(int i)

Mendapatkan tipe data CLOB pada baris aktif.


Clob getClob(String colName)

Mendapatkan tipe data CLOB dengan parameter nama kolom.


Date getDate(int columnIndex)

Mendapatkan tipe data date dengan parameter indeks kolom.


Date getDate(String columnName)

Mendapatkan tipe data date dengan parameter nama kolom.


double getDouble(int columnIndex)

Mendapatkan tipe data double dengan parameter indeks kolom.


double getDouble(String columnName)

Mendapatkan tipe data double dengan parameter nama kolom.


float getFloat(int columnIndex)

Mendapatkan tipe data float dengan parameter indeks kolom.


float getFloat(String columnName)

Mendapatkan tipe data float dengan parameter nama kolom.


int getInt(int columnIndex)

Mendapatkan tipe data integer dengan parameter indeks kolom.


int getInt(String columnName)

Mendapatkan tipe data integer dengan parameter nama kolom.


long getLong(int columnIndex)

Mendapatkan tipe data long degan parameter indeks kolom.

91

long getLong(String columnName)

Mendapatkan tipe data kolom dengan parameter nama kolom..


int getRow()

Mendapatkan nilai baris aktif.


short getShort(int columnIndex)

Mendapatkan tipe data short dengan parameter indeks kolom.


short getShort(String columnName)

Mendapatkan tipe data short dengan parameter nama kolom.


String getString(int columnIndex)

Mendapatkan tipe data string dengan parameter indeks kolom.


String getString(String columnName)

Mendapatkan tipe data string dengan parameter nama kolom.


Time getTime(int columnIndex)

Mendapatkan tipe data time dengan parameter indeks kolom.


Time getTime(String columnName)

Mendapatkan tipe data time dengan parameter nama kolom.


SQLWarning getWarnings()

Mendapatkan laporan peringatan.


void insertRow()

Menambah baris kolom.


boolean isAfterLast()

Mendapatkan nilai true jika posisi kursor sesudah akhir baris table
boolean isBeforeFirst()

Mendapatkan nilai true jika posisi kursor sebelum awal baris table.
boolean isFirst()

Mendapat nilai true jika posisi kursor pada awal baris table.
boolean isLast()

Mendapatkan nilai true jika posisi kursor pada akhir baris.


boolean last()

Menempatkan posisi kursor pada akhir baris table.


boolean next()

92

Menempatkan kursor pada baris berikutnya.


boolean previous()

Menempatkan kursor sebelum kursor aktif.


void refreshRow()

Memanggil ulang data pada baris table.


Boolean rowDeleted()

Mendapatkan nilai true apabila baris data telah terhapus.


Boolean rowInserted()

Mendapatkan nilai true apabila baris data telah terisi.


boolean rowUpdated()

Mendapatkan nilai true apabila baris data telah berupah.


Void updateAsciiStream(int columnIndex, InputStream x, int length)

Mengubah Ascii stream dengan parameter indeks kolom, Inputstream dan panjangnya.
void updateAsciiStream(String columnName, InputStream x, int length)

Mengubah Ascii stream dengan parameter nama kolom, Input Stream dan panjan stream.
void updateBigDecimal(int columnIndex, BigDecimal x)

Mengubah data dengan parameter indeks kolom dan nilai java.math.BigDecimal value.
void updateBigDecimal(String columnName, BigDecimal x)

Mengubah BigDecimal dengan parameter nama kolom dan nilai java.sql.BigDecimal value.
void updateBinaryStream(int columnIndex, InputStream x, int length)

Mengubah binary stream dengan parameter indeks kolom, InputStream dan panjang stream.
void updateBinaryStream(String columnName, InputStream x, int length)

Mengubah binary stream dengan nama kolom, InputStream, dan panjang stream.
void updateBlob(int columnIndex, Blob x)

Mengubah BLOB dengan parameter indeks kolom dan nilai BLOB.


void updateBlob(String columnName, Blob x)

Mengubah BLOB dengan parameter nama kolom dan nilai java.sql.Blob value.
void updateBoolean(int columnIndex, boolean x)

Mengubah boolen dengan parameter indeks kolom dan nilai Boolean.


void updateBoolean(String columnName, boolean x)

93

Mengubah Boolean dengan parameter nama kolom dan nilai Boolean.


void updateByte(int columnIndex, byte x)

Mengubah byte dengan parameter indeks kolom dan nilai byte.


void updateByte(String columnName, byte x)

Mengubah byte dengan parameter nama kolom dan nilai byte.


void updateCharacterStream(int columnIndex, Reader x, int length)

Mengubah character stream dengan parameter indeks kolom, Reader, dan panjang stream.
void updateCharacterStream(String columnName, Reader reader, int length)

Mengubah character stream dengan parameter nama kolom, reader dan panjang stream.
void updateClob(int columnIndex, Clob x)

mengubah CLOB dengan parameter indeks kolom dan nilai a java.sql.Clob.


void updateClob(String columnName, Clob x)

Mengubah CLOB dengan parameter nama kolom dan nilai java.sql.Clob.


void updateDate(int columnIndex, Date x)

Mengubah date dengan parameter indeks kolom dan nilai java.sql.Date.


void updateDate(String columnName, Date x)

Merubah date dengan parameter nama kolom dan nilai java.sql.Date.


void updateDouble(int columnIndex, double x)

Mengubah Double dengan parameter indeks kolom dan nilai double.


void updateDouble(String columnName, double x)

Mengubah double dengan parameter nama kolom dan nilai double.


void updateFloat(int columnIndex, float x)

Mengubah Float dengan parameter indeks kolom dan nilai float.


void updateFloat(String columnName, float x)

Mengubah nilai float dengan parameter nama kolom dan nilai float.
void updateInt(int columnIndex, int x)

Mengubah nilai integer dengan parameter indeks kolom dan nilai integer.

94

void updateInt(String columnName, int x)

Mengubah integer dengan parameter nama kolom dan nilai integer.


void updateLong(int columnIndex, long x)

Mengubah long dengan parameter indeks kolom dan nilai long.


void updateLong(String columnName, long x)

Mengubah Long dengan parameter nama kolom dan nilai long.


void updateNull(int columnIndex)

Memberikan nilai null dengan parameter indeks kolom.


void updateNull(String columnName)

Memberikan nilai null dengan parameter nama kolom dengan parameter nama kolom.
void updateRow()

Menyimpan perubahan pada baris data table.


void updateShort(int columnIndex, short x)

Merubah short dengan parameter indeks kolom dan nilai short.


void updateShort(String columnName, short x)

Merubah short dengan parameter nama kolom dan nilai short.


void updateString(int columnIndex, String x)

Mengubah String dengan parameter indeks kolom dan nilai string.


void updateString(String columnName, String x)

Merubah string dengan parameter nama kolom dan nilai string.


void updateTime(int columnIndex, Time x)

Merubah time dengan parameter indeks kolom dan nilai java.sql.Time.


void updateTime(String columnName, Time x)

Merubah time dengan parameter indeks kolom dan nilai


java.sql.Time. boolean wasNull()

Memberikan nilai true jika hasil query adalah null. Cara penggunaan method untuk memanipulasi data java.sql.ResultSet, adalah sebagai berikut : - Pindah ke Record berikutnya
RS.next();

Pindah ke Record sebelumnya


RS.previous();

Pindah ke Record pertama 95

RS.first();

Pindah ke Record terakhir


RS.last();

Menambah data
RS.moveToInsertRow(); RS.updateString ("NIM", "9511500134"); RS.updateString ("NAMA", Windu Gata"); RS.updateInt("UMUR", 27); RS.updateInt("LULUS", 0); RS.insertRow(); RS.moveToCurrentRow();

Mengubah data
RS.updateString ("NAMA", "Windu Gata"); RS.updateString ("ALAMAT", "Jl.Perdagangan V/21 Bintaro"); RS.updateInt("UMUR", 28); RS.updateInt("LULUS", 1); RS.updateRow();

Menghapus data
RS.deleteRow();

Melihat data
System.out.println( RS.getString("NIM") + " " + RS.getString("NAMA") + " " + RS.getInt("UMUR") + " " + RS.getInt("LULUS") );

Apabila terdapat struktur tabel pada database mysql dengan nama tabel mahasiswa seperti pada gambar 32 dan dengan tampilan program pada gambar 33.

Gambar 32. Struktur tabel mahasiswa

Gambar 33. Tampilan Gui dengan menggunakan database

96

Contoh Program :
//program ke duapuluh delapan //penggunaan database import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; import java.sql.*; class frame23 extends JFrame{ private Container konten = new Container(); private JPanel panel1 = new JPanel(); private JLabel lblNim = new JLabel(); private JTextField txtNim = new JTextField(10); private JLabel lblNama = new JLabel(); private JTextField txtNama = new JTextField(); private JLabel lblAlamat = new JLabel(); private JTextField txtAlamat = new JTextField(); private private private private private private private private private private private private JLabel lblSertifikat = new JLabel(); JPanel panel2 = new JPanel(); JCheckBox chSD = new JCheckBox("SD"); JCheckBox chSMP = new JCheckBox("SMP"); JCheckBox chSMA = new JCheckBox("SMA"); JPanel panel3 = new JPanel(); JLabel lblJurusan = new JLabel(); ButtonGroup grpJurusan = new ButtonGroup(); JRadioButton rdTI = new JRadioButton("TI"); JRadioButton rdMI = new JRadioButton("MI"); JRadioButton rdAK = new JRadioButton("AK"); JRadioButton rdTK = new JRadioButton("TK");

private JLabel lblKampus = new JLabel(); String sKampus[] = {"Cempaka Putih","Cileduk","Roxy","Salemba"}; private JComboBox cmbKampus = new JComboBox(sKampus); private private private private private private private private private private private JPanel panel4 = new JPanel(); JButton btnFirst = new JButton("|<<"); JButton btnPrev = new JButton("<<"); JButton btnNext = new JButton(">>"); JButton btnLast = new JButton(">>|"); JPanel panel5 = new JPanel(); JButton btnAdd = new JButton("Tambah"); JButton btnSave = new JButton("Simpan"); JButton btnFilter = new JButton("Filter"); JButton btnDelete = new JButton("Hapus"); JButton btnExit = new JButton("Keluar");

String dbUrl = "jdbc:mysql://localhost/mahasiswa?user=root&password="; private Statement st; ResultSet RS; frame23(){ super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(10,100); this.setSize(450,300); konten=getContentPane(); konten.setLayout(new FlowLayout(FlowLayout.CENTER)); lblNim.setText("NIM"); lblNama.setText("NAMA"); lblAlamat.setText("ALAMAT"); lblSertifikat.setText("Sertifikat"); lblJurusan.setText("Jurusan"); lblKampus.setText("Kampus");

97

panel1.setLayout(new GridLayout(7,2)); panel1.add(lblNim); panel1.add(txtNim); panel1.add(lblNama); panel1.add(txtNama); panel1.add(lblAlamat); panel1.add(txtAlamat); panel1.add(lblSertifikat); panel2.setLayout(new GridLayout(1,3)); panel2.add(chSD); panel2.add(chSMP); panel2.add(chSMA); panel1.add(panel2); grpJurusan.add(rdTI); grpJurusan.add(rdMI); grpJurusan.add(rdAK); grpJurusan.add(rdTK); panel3.setLayout(new GridLayout(1,4)); panel3.add(rdTI); panel3.add(rdMI); panel3.add(rdAK); panel3.add(rdTK); panel1.add(lblJurusan); panel1.add(panel3); cmbKampus.setSelectedIndex(1); cmbKampus.setMaximumRowCount(3); panel1.add(lblKampus); panel1.add(cmbKampus); panel4.setLayout(new GridLayout(1,4)); panel4.add(btnFirst); panel4.add(btnPrev); panel4.add(btnNext); panel4.add(btnLast); panel5.setLayout(new GridLayout(1,5)); panel5.add(btnAdd); panel5.add(btnSave); panel5.add(btnFilter); panel5.add(btnDelete); panel5.add(btnExit); itemHandler itemHandler = new itemHandler(); btnFirst.addActionListener(itemHandler); btnPrev.addActionListener(itemHandler); btnNext.addActionListener(itemHandler); btnLast.addActionListener(itemHandler); btnAdd.addActionListener(itemHandler); btnSave.addActionListener(itemHandler); btnFilter.addActionListener(itemHandler); btnDelete.addActionListener(itemHandler); btnExit.addActionListener(itemHandler); konten.add(panel1); konten.add(panel4); konten.add(panel5); ConnectToDatabase(); ConnectToTable(""); setVisible(true); } private class itemHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ Object obj=e.getSource(); if (obj == btnFirst) recFirst(); if (obj == btnPrev) recPrev();

98

if if if if if if if } }

(obj (obj (obj (obj (obj (obj (obj

== == == == == == ==

btnNext) btnLast) btnAdd) btnSave) btnFilter) btnDelete) btnExit)

recNext(); recLast(); recAdd(); recSave(); recFilter(); recDelete(); System.exit(0);

private void recFilter(){ if (btnFilter.getText() == "Filter"){ String inputValue = JOptionPane.showInputDialog("Masukkan NIM : "); if (inputValue != ""){ boolean bConnect = ConnectToTable(inputValue); if (bConnect == true){ btnFilter.setText("UnFilter"); }else{ ConnectToTable(""); } } } else { ConnectToTable(""); btnFilter.setText("Filter"); } } private void recRefresh(){ try{ } catch (Exception e){ System.out.println(e.toString()); } } private void recDelete(){ int iQuest = JOptionPane.showConfirmDialog(null, "Anda Ingin Menghapus " + txtNim.getText() + " ?", "Delete", JOptionPane.YES_NO_OPTION); if (iQuest == 0){ try { RS.deleteRow(); if (btnFilter.getText() == "UnFilter"){ recFilter(); } recFirst(); } catch (Exception e){ System.out.println(e.toString()); } } } private void recSave(){ try { if (btnAdd.getText() == "Tambah"){ recUpdate(); RS.updateRow(); } else { RS.moveToInsertRow(); recUpdate(); RS.insertRow(); btnAdd.setText("Tambah"); btnFilter.setEnabled(true); btnDelete.setEnabled(true); recLast(); } } catch (Exception e){ System.out.println(e.toString()); } }

99

private void recUpdate(){ try { RS.updateString("NIM", txtNim.getText()); RS.updateString("NAMA", txtNama.getText()); RS.updateString("ALAMAT", txtAlamat.getText()); if (chSD.isSelected()) { RS.updateInt("SD",1); } else { RS.updateInt("SD",0); } if (chSMP.isSelected()){ RS.updateInt("SMP",1); } else { RS.updateInt("SMP",0); } if (chSMA.isSelected()) { RS.updateInt("SMA",1); } else { RS.updateInt("SMA",0); } if (rdTI.isSelected()) { RS.updateInt("JURUSAN",0); } else if (rdMI.isSelected()){ RS.updateInt("JURUSAN",1); } else if (rdAK.isSelected()){ RS.updateInt("JURUSAN",2); } else if (rdTK.isSelected()){ RS.updateInt("JURUSAN",3); } RS.updateInt("KAMPUS", cmbKampus.getSelectedIndex()); } catch (Exception e){ System.out.println(e.toString()); } } private void recAdd(){ if (btnAdd.getText() == "Tambah") { btnAdd.setText("Batal"); btnFilter.setEnabled(false); btnDelete.setEnabled(false); kosong(); }else { btnAdd.setText("Tambah"); btnFilter.setEnabled(true); btnDelete.setEnabled(true); preview(); } } private void recFirst(){ try { RS.first(); preview(); } catch(Exception e){ System.out.println(e.toString()); } } private void recPrev(){ try { if (RS.isFirst() == false){ RS.previous(); preview(); } }catch (Exception e){ System.out.println(e.toString()); }

100

} private void recNext(){ try { if (RS.isLast() == false){ RS.next(); preview(); } }catch (Exception e){ System.out.println(e.toString()); } } private void recLast() { try { RS.last(); preview(); }catch (Exception e) { System.out.println(e.toString()); } }

private void preview(){ try { kosong(); txtNim.setText(RS.getString("NIM")); txtNama.setText(RS.getString("NAMA")); txtAlamat.setText(RS.getString("ALAMAT")); if (RS.getInt("SD") == 1){ chSD.setSelected(true); } else { chSD.setSelected(false); } if (RS.getInt("SMP") == 1){ chSMP.setSelected(true); } else { chSMP.setSelected(false); } if (RS.getInt("SMA") == 1) { chSMA.setSelected(true); } else { chSMA.setSelected(false); } switch(RS.getInt("JURUSAN")){ case (0) : rdTI.setSelected(true); break; case (1) : rdMI.setSelected(true); break; case (2) : rdAK.setSelected(true); break; case (3) : rdTK.setSelected(true); break; } cmbKampus.setSelectedIndex(RS.getInt("KAMPUS")); } catch (Exception e) { System.out.println(e.toString()); } } private void kosong(){ txtNim.setText(""); txtNama.setText("");

101

txtAlamat.setText(""); chSD.setSelected(false); chSMP.setSelected(false); chSMA.setSelected(false); rdTI.setSelected(false); rdMI.setSelected(false); rdAK.setSelected(false); rdTK.setSelected(false); cmbKampus.setSelectedIndex(0); } private void ConnectToDatabase(){ try { Class.forName("com.mysql.jdbc.Driver"); Connection Conn = DriverManager.getConnection(dbUrl); st = Conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE ); } catch (Exception e) { JOptionPane.showMessageDialog (null,"Tidak Dapat Deteksi MYSQL.JDBC","JDBC", JOptionPane.PLAIN_MESSAGE); System.exit(0); } } private boolean ConnectToTable(String sFilter){ boolean bConnect = false; try { String sQuery; sQuery = "SELECT * from mahasiswa"; if (sFilter !=""){ sQuery = sQuery + " Where Nim='" + } try { RS.close(); } catch (Exception ei) {} RS = st.executeQuery(sQuery); if (RS.next()) { recFirst(); bConnect = true; }else { JOptionPane.showMessageDialog (null,"Data Di Dalam Tabel Kosong ","Table " + sFilter, JOptionPane.PLAIN_MESSAGE); } } catch (Exception e) { JOptionPane.showMessageDialog (null,"Koneksi Tabel Bermasalah","Koneksi Tabel", JOptionPane.PLAIN_MESSAGE); System.exit(0); } return bConnect; } public static void main(String args[]){ new frame23(); } }

sFilter + "' ";

102

PENUTUP Akhir kata, penulis berharap buku ini dapat berkontribusi dalam upaya pengembangan perangkat lunak di Indonesia. Terutama, ditujukan pada mahasiswa dan lulusan perguruan tinggi. Selanjutnya penulis juga berharap masukan dan kritik dari para pengguna maupun dari kalangan praktisi. DAFTAR PUSTAKA - http://www.sun.com - http://java.sun.com - tjava, pdf edition - http://www.mysql.com - http://www.java2.com/ExampleCode

103

TENTANG PENULIS
Penulis bernama Windu Gata, SKom terlahir di Jakarta pada tanggal 09 Juli 1976. sejak tahun 1999 penulis bekerja pada instansi pemerintah, yaitu LKBN ANTARA sebagai staf analisa dan programmer bagian pengembangan dan penelitian. Selain itu penulis merupakan salah satu dosen di universitas Budi Luhur dengan mata kuliah Unix, Bahasa Pemrograman 3 java lanjutan. Bahasa Pemrograman 4 java komunikasi dan mobile, Pengelolalan Sistem Informasi, dan Sistem Database 2 Database Lanjutan. Penulis Juga sebagai pengajar di Lembaga Pendidikan Jurnalistik Antara (LPJA) LKBN Antara, khusus dibidang informatika, dan pengajar lepas. Hobi di bidang teknik informatika (TI), khususnya dibidang pemrograman, telah digeluti sejak memasuki bangku kuliah Strata Satu (S1) dengan jurusan Teknik Informatika di Universitas Budi Luhur tahun 1995, dan menyelesaikan studinya tahun 1999. Seiring waktu berjalan dan perkembangan IT yang semakin pesat, penulis mengasah kemampuan dan memliki ketrampilan di bidang sistem operasi seperti SolarisSun Microsystem, AIX IBM RS6000, linux, dan Microsoft Windows. Begitupula dibidang pemrograman, bahasa pemrograman yang telah kuasai seperti Ms. Visual Basic, VBA MS. Access, PHP, ASP, Oracle IAS, Web programming dan java, dengan database Ms.Access, MySql, Ms. SqlServer, dan Oracle. Juga tools yang digunakan seperti Seagate Crystal Report dan networking (TCP/IP, UDP, Multicasting dan DVB/IP). Pengalaman membuat program di LKBN Antara ataupun sebagai programmer lepas telah dijalani. Contoh program di tempat penulis bekerja, penulis telah membuat seperti program komunikasi RS232, TCP dan DVB/IP dengan sarana modem sampai satelit. Dan sebagai pemrogramer lepas, penulis telah membuat diberbagai instasi pemerintah dan swasta. Cita-cita untuk turut memajukan bangsa dan negara melalui kemampuan penulis, salah satunya dengan menulis buku ini. Dan berharap, dengan adanya buku ini, jika seseorang yang tidak bisa menjadi bisa dan yang sudah bisa menjadi lebih bisa. Kritik dan saran sangat dinanti dengan mengirimkannya ke email penulis, yaitu windu@antara.co.id atau retwin7678@yahoo.com. Karena penulis bukanlah orang yang sempurna, masih banyak yang harus dipelajari dan rasa ingin memperbaiki sehingga dapat menulis buku-buku lainnya. Ucapan Terima kasih, penulis ucapkan atas perhatiannya. Dan terima kasih terdalam teruntuk istri dan anak-anakku, keluarga, guru-guru, keluarga besar LKBN Antara, Keluarga Besar Universitas Budi Luhur dan Negeri ku Indonesia. -- Hiduplah Bangsa dan Negara, saya mencintaimu INDONESIA ---

104