Bahasa Pemrograman3 - Java Gui & Database
Bahasa Pemrograman3 - Java Gui & Database
GUI, ERROR EXCEPTION, THREAD, I/O (INPUT/OUTPUT), DATABASE & PEMBUATAN LAPORAN
KATA PENGANTAR
Dengan berkembangnya teknologi, bahasa pemrograman Java tampil dengan gaya yang berbeda dengan bahasa pemrograman sebelumnya. Dengan keunggulan yang tidak dimiliki oleh bahasa pemrograman lainnya, yaitu multiplatform. Java dengan motonya Write Once Use Every Where telah dibuktikan dengan banyaknya peralatan dewasa ini yang menggunakan bahasa pemrograman Java. Java juga merupakan bahasa pemrograman bebas atau tanpa biaya, sehingga memudahkan para pengembang untuk mengembangkan aplikasi, maupun dari sisi pengguna aplikasi, dapat mengefesienkan biaya yang harus dikeluarkan. Untuk mempelajari bahasa pemrograman Java, khususnya tampilan layar Client/Server tidaklah mudah, banyak kendala yang dihadapi, oleh karena itu penulis merasa terdorong untuk membuat buku yang lebih detail beserta contoh dan latihan. Buku ini selain membahas tentang pemgrograman GUI (Grafik User Interface), pembahasan lainnya adalah penggunaan dan penanganan kesalahan program (Error Exception ), penggunaan program dengan proses parallel (thread ), penanganan file input dan output, bagaimana cara menyimpan data pada database, membuat laporan menggunakan JFreeReport dan Pentaho, dan menyinggung sedikit mengenai penggunaan editor bahasa pemrograman Java, yaitu NetBeans dan JBuilder. Pembuatan buku ini dibuat dan ditujukan kepada pengembang program, mahasiswa informatika, Sekolah Menengah Kejuruan (SMK) informatika, dan buat masyarakat luas yang tertarik mengeneai informatika khususnya bidang pembuatan aplikasi program dengan menggunakan bahasa pemrograman Java. Dengan tujuan dapat diterapkan dan dimanfaatkan secara luas di masyarakat. Penulis telah semaksimal mungkin untuk menulis buku Bahasa Pemrograman Java ini, sebagai pengabdian penulis terhadap Negara untuk turut serta mencerdaskan masyarakat luas. Walaupun sudah semaksimal mungkin penulis tetap membutuhkan kritis dan saran dari teman-teman yang telah membaca tulisan ini dengan mengirimkan email ke windu@antara.co.id atau windu_gata@yahoo.com. Akhir kata saya ucapkan terima kasih, semoga Bangsa dan Negara Indonesia semakin maju diseluruh bidang dan semakin memperhatikan dibidang pendidikan Indonesia khususnya bidang Informatika. Jakarta, Desember 2005
Penulis
DAFTAR ISI
PENDAHULUAN
Teknologi Java dibuat sebagai bahasa pemrograman kecil pada tahun 1991 oleh Sun Microsystem. Pada saat itu proyek pembuatan bahasa pemrograman Java disebut The Green Project. The Green Project yang merupakan proyek rahasia saat itu beranggotakan 13 (tiga belas) orang dan dipimpin oleh James Gosling yang berkantor tersembunyi di Sand Hill Road di Menlo Park. Secara teknis terputus dari perusahaan SUN dan dikerjakan sekitar 18 (delapan belas) bulan lamanya. Mereka berusaha untuk mengantisipasi dengan merancang aplikasi atau perangkat lunak lanjutan pada komputer. Hasilnya sangat berbeda dengan sistem komputer yang telah ada. Nama bahasa pemrograman dikenal dengan nama Oak. Pengenalan bahasa pemrograman baru tersebut dikenalkan pada industri televisi kabel digital, tetapi ide mereka terlalu jauh dan tidak dapat diterapkan pada waktu dekat, sehingga industri televisi belum siap menerima teknologi yang mereka tawarkan. Saat teknologi internet sudah dikenal luas, bahasa pemrograman Oak berubah menjadi bahasa pemrograman Java dan dipublikasi tahun 1995. Aplikasi pertama yang menggunakan teknologi Java adalah Netscape Navigator, yang merupakan Selancar Internet. Saat ini, dalam waktu 10 tahun, penggunaan Java sudah dilakukan oleh 4 (empat) juta pengembang sistem aplikasi komputer secara keseluruhan di dunia, dan telah memasuki segmen industri besar serta penggunaannya serta kertekaitannya dengan peralatan, komputer dan jaringan. Terbukti dengan keunggulan, efesiensi, penggunaan banyak platform, dan keamanan membuat teknologi Java digunakan untuk penanganan 2.5 (dua setengah) miliar peralatan yang terdiri dari lebih 700 (tujuh ratus) juta komputer, lebih dari 1 (satu) miliar peralatan bergerak (data berdasarkan dari Ovum), 1.25 (satu seperempat) miliar kartu pintar, printer, kamera Web , permainan, navigasi kendaraan seperti mobil, aplikasi pembayaran parkir dan banyak lagi. Pada saat ini, kita dapat menemukan Teknologi Java pada jaringan komputer dan peralatan yang berhubungan dengan Internet dan komputer supercepat para ahli hingga laptop dan handphone. Dari pengguna di jalan-jalan hingga pemain permainan (game ) dan kartu kredit, sebagai bukti bahwa teknologi Java ada dimana-mana. Kenapa pengembang aplikasi memilih Teknologi Java ?. Karena bahasa program Java telah berulang-ulang dikaji ulang, pengembangan, pengujian langsung dan dibuktikan dengan komunitas lebih dari 4 (empat) juta pengembang perangkat lunak dan aplikasi. Alasan lain adalah bahasa pemrograman Java dapat dikembangkan pada 1 (satu) platform atau jenis sistem operasi dan dapat dijalankan pada platform lainnya, dan tidak tergantung pada aplikasi web, server client, penyimpanan data HTML dan lainlain. Dengan kombinasi teknologi yang dimiliki oleh Java menjadikan aplikasi yang dapat dan mudah diubah suatu saat serta meringankan sisi pengguna produk aplikasi.
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) serta penggunaan JBuilder, Netbeans dan JfreeReport dan Pentaho. 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 suhu 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 berupa 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 Excption. BAB XII
Mengenal Penggunaan 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 XV Membuat laporan dengan menggunakan jFreeReport BAB XVI Jawaban Soal Latihan BAB XVI Penutup
BAB I
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.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 1.2 sebagai berikut :
setLocation (10,100);
setResizable(false);
this.setSize(300,200)
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
//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); } }
10
//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 II.1, 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 pemrogramannya 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 2.1 terdapat beberapa objek, yaitu : - Kotak drawRect (x,y,width, height)
11
Kotak dengan bundaran di pinggir drawRoundRect (x, y, width, height, arcwidth, archeight)
String drawstring(<tulisan>,x,y)
Garis drawLine(x,y,width,height)
Bundar drawOval(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);
12
Latihan 1 Buatlah program 2 (dua) dimensi seperti pada gambar dibawah ini
13
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 3.1, 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
Gambar 3.1. 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()
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
14
Membuat JLabel dengan isi text di dalamnya, gambar dan horizontal alignment (LEFT, CENTER, RIGHT, LEADING atau TRAILING) .
JLabel(String text, int horizontalAlignment) Membuat JLabel dengan isi text di dalamnya dan CENTER, RIGHT , LEADING atau TRAILING).
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 JTextField (String text) Membuat JTextField
dengan model kolom. dengan isi teks di dalamnya. dalamnya dan kolom.
15
Memberikan nilai string pada JTextField 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
gambar ikon.
JCheckBox(Icon icon, boolean selected) Membuat JCheckBox dengan tampilan gambar ikon
JCheckBox(String text, boolean selected) Membuat JCheckBox dengan isian berupa teks dan
gambar ikon.
JCheckBox(String text, Icon icon, boolean selected) Membuat JCheckBox dengan teks dengan tampilan gambar ikon
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 :
16
http://java.sun.com/docs/books/tutorial/uiswing/components/button.html
Constructor
JRadioButton() Membuat JRadioButton
teks.
JRadioButton(Icon icon) Membuat JRadioButton
posisi tercentang/terpilih
JRadioButton(String text, boolean selected) Membuat JRadioButton dengan teks dan posisi
tercentang/terpilih.
JRadioButton(String text, Icon icon, boolean selected) Membuat JRadioButton dengan teks, gambar ikon dan posisi
tercentang/terpilih
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
17
Saat penggunaan JRadioButton harus menggunakan ButtonGroup untuk menggabungkan JRadioButton. ButtonGrop Berfungsi sebagai penggabungan komponen pada Java
Constructor
ButtonGroup()
Membuat ButtonGroup
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 JComboBox(Vector items) Membuat JComboBox dengan
18
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()
19
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 3.1, 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 3 (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 (enam) dan kolomnya sebanyak 2 dua). Untuk lebih jelasnya pada Gambar 3.1 adalah sebagai berikut : container panel1 gridlayout (6,2) lblNim lblNama lblSertifikat lblJurusan lblKampus cmdSave txtNim txtNama panel2 gridlayout (1,3) chSD chSMP panel3 gridlayout (1,4) rdTI rdMI rdAK cmbKampus cmdExit chSMA rdTK
20
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 - 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 3.1
//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 JLabel lblSertifikat = new JLabel(); JPanel panel2 = new JPanel(); JCheckBox chSD = new JCheckBox("SD"); JCheckBox chSMP = new JCheckBox("SMP"); JCheckBox chSMA = new JCheckBox("SMA");
private JPanel panel3 = new JPanel(); private JLabel lblJurusan = new JLabel(); //Digunakan untuk mengelompokkan radio button private ButtonGroup grpJurusan = new ButtonGroup(); private private private private JRadioButton JRadioButton JRadioButton JRadioButton rdTI rdMI rdAK rdTK = = = = new new new new JRadioButton("TI"); JRadioButton("MI"); JRadioButton("AK"); 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");
21
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); 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); //posisi index terpilih = I Ciledug cmbKampus.setSelectedIndex(1); //tampil data dalam combo hanya 3 baris cmbKampus.setMaximumRowCount(3); panel1.add(lblKampus); panel1.add(cmbKampus); itemHandler itemHandler = new itemHandler(); panel1.add(cmdSave);
22
cmdSave.addActionListener(itemHandler); panel1.add(cmdEnd); cmdEnd.addActionListener(itemHandler); konten.add(panel1); show(); } private class itemHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ //mend apatkan nama objek action Object obj=e.getSource(); 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(); } }
23
Latihan 2 Pada program kelima tambahkan beberapa fasilitas yang akan tampil pada saat program dijalankan, antara lain : - Icon pada frame - Nim : 9511500134 - Nama : Windu Gata - SD : Checked - SMP : Checked - SMA : Checked - Jurusan TI : Checked - Icon Pada Tombol Save - Icon Pada Tombol End - Short Key P Pada Tombol Save - Short Key S Pada Tombol End
24
BAB IV
JList (Single Selected dan Multi Selected) DAN LAYOUT (Border Layout)
Gambar 4.1 adalah merupakan model form yang mirip seperti pada Gambar 3.1 dimana JCheckBox diganti dengan JList model multiselection dan JRadioButton diganti dengan JList model singleselection.
Gambar 4.1. Form Input Mahasiswa (JLIST) JLIST Membuat tampilan data list
Constructor
JList()
elemen dengan non-null model. elemen array. elemen dengan model Vector.
25
Mendapatkan nilai Index jika tidak ada yang terpilih maka Jlist akan memberikan nilai -1.
Object getSelectedValue () Jlist akan
Mendapatkan nilai terpilih jika tidak ada yang terpilih maka memberikan nilai null. Mendapatkan nilai dalam bentuk Array dari sel terpilih.
Mendapatkan nilai true apabila index terpilih dan akan mengembalikan nilai false jika tidak terpilih.
boolean isSelectionEmpty ()
Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/list.html dalam rancangan tampilan pada Gambar 4.1, kita menggunakan layout FlowLayout, Gridlayout dan BorderLayout. Perlu diingat bahwa layout FlowLayout dan GridLayout telah diterangkan sebelumnya, khususnya dalam contoh pada Gambar 3.1. Sedangkan ilustrasi dari penggunaan layout BorderLayout dapat dilihat dalam bentuk berikut : WEST NORTH CENTER EAST 26
SOUTH 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 3.1 adalah sebagai berikut : panel4 panel1 (2,2) BorderLayout.NORTH lblNim lblNama panel2 (2,2) BorderLayout.CENTER lblSertifikat lstSertifikat
txtNim txtNama
lblJurusan
lstJurusan
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
27
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(
28
"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)); //Multi selection 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));
//Single Selection lstJurusan = new JList(sJurusan); lstJurusan.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); panel2.add(lblJurusan); //Jangan lupa biar kasih JScroll Pane //Biar tampil scrollnya 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); cmdEnd.addActionListener(itemHandler); panel4.setLayout(new BorderLayout()); panel4.add(panel1, BorderLayout.NORTH); panel4.add(panel2, BorderLayout.CENTER); panel4.add(panel3, BorderLayout.SOUTH);
29
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(); } }
30
Latihan 3 Buatlah tampilan Handphone seperti pada Gambar 4.2 kemudian aktifkan tombol numerik (*,#,0-9) sehingga dapat tampil pada TextField dibawah ini
Gambar 4.2. HandPhone Buatlah program konversi suhu celcius, Kelvin dan Farenheit dengan tampilan seperti pada Gambar 4.3.
31
BAB V
Method
void mouseDragged(MouseEvent e)
Mouse digerakkan tanpa ada tombol yang ditekan. MouseListener Mendeteksi tombol mouse yang digunakan
Method
void mouseClicked(MouseEvent e)
Method
32
Method
void actionPerformed (ActionEvent e) Mengetahui Action yang dilakukan.
33
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(); } //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())); }
34
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"); 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()+"]" );
35
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(); } }
36
Kedua program tersebut apabila dijalankan mempunyai hasil yang sama (Gambar 5.1) namun model penulisannya berbeda.
Gambar 5.1. MouseMotionListener, MouseListener, dan KeyListener Pada program ke tujuh penggunaan listener, yaitu MouseMotionListener, 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.
MouseListener, //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){ //menangkap nama objek Object obj=e.getSource(); if(obj==cmdSave){
37
} else {System.exit (0);} } } public static void main(String args[]){ new frame31(); } }
38
public class Pear extends JFrame { Ellipse2D.Double circle, oval, leaf, stem; Area circ, ov, leaf1, leaf2, st1, st2; int w,h; double ew,eh;
39
oval = new Ellipse2D.Double(); leaf = new Ellipse2D.Double(); stem = new Ellipse2D.Double(); circ = new Area(circle); ov = new Area(oval); leaf1 = new Area(leaf); leaf2 = new Area(leaf); st1 = new Area(stem); st2 = new Area(stem); /*mendapatkan posisi awal JFrame*/ Dimension d = getSize(); w = d.width; h = d.height; /*Gambar Ditempatkan di Tengah*/ ew = w/2; eh = h/2; setBackground(Color.white); } public void paint (Graphics g) { Graphics2D g2 = (Graphics2D) g;
/*Menggambar daun dengan model intersection *dari 2 object elipse */ g2.setColor(Color.green); leaf.setFrame(ew-16, eh-29, 15.0, 15.0); leaf1 = new Area(leaf); leaf.setFrame(ew-14, eh-47, 30.0, 30.0); leaf2 = new Area(leaf); leaf1.intersect(leaf2); g2.fill(leaf1); /* *Menggambar Daun ke 2 */ leaf.setFrame(ew+1, eh-29, 15.0, 15.0); leaf1 = new Area(leaf); leaf2.intersect(leaf1); g2.fill(leaf2); g2.setColor(Color.black); /* *Menggambar dengan model substract *dari 2 objek elipse */ stem.setFrame(ew, eh-42, 40.0, 40.0); st1 = new Area(stem); stem.setFrame(ew+3, eh-47, 50.0, 50.0); st2 = new Area(stem); st1.subtract(st2);
40
g2.fill(st1); g2.setColor(Color.yellow); /*penggambaran buah Pear *dengan sistem penggabaungan 2 objek *elipse yang berbeda */ circle.setFrame(ew-25, eh, 50.0, 50.0); oval.setFrame(ew-19, eh-20, 40.0, 70.0); circ = new Area(circle); ov = new Area(oval); circ.add(ov); g2.fill(circ); } public static void main(String s[]) { Pear p = new Pear(); p.setVisible(true); } }
Kemudian gambar ulang buah pear tersebut sesuai dengan koordinat X dan Y dari posisi mouse click
Gambar 5.3 Buah Pear Dengan Penggambaran Ulang Sesuai Posisi X & Y Mouse
41
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 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.
42
Gambar 6.1. Jslider Gambar 4.1 merupakan bentuk program lain dari program konversi suhu yang terdapat pada latihan 2. Gambar 6.1 menggunakan Jslider sebagai petunjuk nilai aktif.
43
panel2 gridLayout(2,1) panel1(1,2) BorderLayout.NORTH lblCelcius lblCelciusCapt sldCelcius, BorderLayout.SOUTH panel3 gridLayout(2,2) lblFahrenheit lblFahrenheitCapt panel4 BorderLayout.West s l d F a h r e n h e i t BorderLayout.East
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
44
//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 Container konten = new Container(); private JPanel panel1 = new JPanel(); private JPanel panel2 = new JPanel(); private JLabel lblCelcius = new JLabel(); private JLabel lblCelciusCapt = new JLabel(); private JSlider sldCelcius = new JSlider(); private private private private private 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);
45
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); //JSlider Hanya Menerima Nilai Integer sldKelvin.setMaximum(1000); sldKelvin.setMinimum((int) 273.15); sldKelvin.setValue((int) 273.15); panel4.add(sldKelvin, BorderLayout.EAST); 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 Ch angeListener() {public void stateChanged(ChangeEvent e) { lblCelciusCapt.setText( sldCelcius.getValue() + " Derajat" ); } } ); sldCelcius.addMouseListener ( //jika mouse selesai melakukan perge rakan 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(
46
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" ); } } ); sldKelvin.addMouseListener (new java.awt.event.MouseAdapter() {
47
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(); } }
48
49
BAB VII
Constructor
JMenuBar()
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()
50
Membuat menu item dengan penambahan Action objek dan menambahkannya pada akhir menu.
Component add (Component c)
menu.
tertentu.
tertentu. tertentu.
JMenuItem insert(JMenuItem mi, int pos) Menyisipkan JMenuitem pada posisi Void insert(String s, int pos)
51
kemungkinan popup.
boolean isSelected ()
Mendapatkan nilai true apabila menu tersebut dalam posisi terpilih (highlighted).
void remove(Component c)
pada
menu.
void remove(JMenuItem item) Menghapus JMenuItem dari menu. void removeAll ()
Memberikan waktu delay Sets the suggested delay before the menu's PopupMenu is popped up or down.
void setMenuLocation (int x, int y)
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.
52
tertentu.
Menampilkan popup menu berdasarkan koordinat X dan Y. JMenuItem Memberikan komponen pada Jmenu dan JPopupMenu
Constructor
JMenuItem()
53
JMenuItem(Action a) Membuat JMenuItem JMenuItem(Icon icon) Membuat JMenuItem JMenuItem(String text) Membuat JMenuItem
dengan Action. dengan gambar ikon. dengan teks. gambar ikon. mnemonic.
JMenuItem(String text, int mnemonic) Membuat JMenuItem dengan teks dan shortcut keyboard
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
JTextArea(String text, int rows, int columns) Membuat JTextArea dengan teks didalamnya beserta baris dan
54
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 7.1. Program Editor Berita Gambar 7.1, 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
55
Untuk lebih jelasnya adalah sebagai berikut : Box1 panel1 gridLayout(2,2) lblKategori lblDaerah panel2 gridLayout (3,1) lblJudul txtJudul lblIsi jscrollPane1 txtArea
cmbKategori cmbDaerah
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 JMenuBar bar = new JMenuBar(); private JMenu mnFile = new JMenu("File"); private JMenuItem mniFileBuka = new JMenuItem( "Buka File" ); private JMenuItem mniFileSimpan = new JMenuItem( "Simpan File"
56
); private JMenuItem mniFileKeluar = new JMenuItem( "Keluar" ); private JMenu mnEdit = new JMenu("Edit"); private JMenuItem mniCopy = new JMenuItem("Copy"); private JMenuItem mniCut = new JMenuItem("Cut"); private JMenuItem mniPaste = new JMenuItem("Paste"); private 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); mnFile.add(mniFileBuka); mnFile.add(mniFileSimpan); mnFile.add(mniFileKeluar);
57
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();
58
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", 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(); } }
59
Gambar 7.5 Menu Popo Up Dengan Icon Buatlah Shorcut di tiap menu File F, Buka File B, Simpan File S, Keluar K, Edit E, Copy C, Cut U, Paste P
60
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 8.1 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 JInternalFrame(String title, boolean resizable) Membuat JInternalFrame yang tidak dapat ditutup,
berubah, tidak dapat ditutup, dan tidak dapat menjadi ukuran maksimum. Tetapi mempunyai titel 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 8.1 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
61
Sliders, merupakan panel dengan model layout(5,1) untuk penempatan panel r, panel g, panel b, color canvas, dan <kosong>. left gridLayout(2,1) Colors (jInterframe) sliders gridLayout(5,1) R G B colorCanvas
<kosong>
62
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 { 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(); }
63
//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); } 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(); } }
64
Latihan 7 Buatlah Satu Frame Dengan Beberapa Internal Frame Seperti Gambar Dibawah Ini
65
BAB IX
JTabbedPane
Contoh program pada Gambar 9.1 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()
input
input
Menambah tab dengan judul dan gambar Ikon beserta komponennya dan teks tip.
int getSelectedIndex()
66
Menyisipkan komponen pada index tertentu dengan 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)
Memberikan tek tooltip pada tab index tertentu. Contoh Penggunaan : http://java.sun.com/docs/books/tutorial/uiswing/components/tabbedpane.html
Tab 0
Tab 1
67
Tab 2
Button 2
Button3
Tab 2 jTextField
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.*; public class TabDemo { final static String "JPanel final static String "JPanel
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();
68
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(); } }
69
Gambar 9.2 Posisi Tab di Bawah Buatlah posisi tab pada posisi kiri
Gambar 9.3 Posisi Tab di Kiri Buatlah posisi tab pada posisi kanan
70
BAB X
71
BoxLayout BoxLayout digunakan untuk membuat tampilan berdasarkan AXIS, yaitu : - X_AXIS Setiap komponen yang ditambahkan pada layout, akan diposisikan pada kanan sesudah komponen sebelumnya.
Gambar 10.1. BoxLayout X_AXIS Y_AXIS Setiap komponen yang ditambahkan pada layout, akan diposisikan pada komponen sebelumnya
Gambar 10.2. 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.
72
Vertical Box Setiap komponen yang ditambahkan pada layout, akan diposisikan pada komponen sebelumnya
Gambar 10.4 .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 10.5 pada button 6.
Gambar 10.5.Box Horizontal Contoh aplikasi pada Gambar 10.6 dapat dideskripsikan sebagai berikut : btn1 (0,0) (0,1) btn6 (2, 0 & 1) greatHeigh = 2, btn2 (0,1) btn4 (1,1) GridBagConstraints.BOTH btn3 (0,2) btn5 (1,2) (2,2)
73
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[]) { 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 }
public Direction() { gridbag = new GridBagLayout(); setLayout(gridbag); c = new GridBagConstraints(); makeButtons(); // btn1 Ditempatkan pada posisi (0,0) gridbag.setConstraints(btn1, c); // btn2 berada di bawah btn1 (0,1) // gridy dengan posisi RELATIVE (0+1) c.gridx = 0; gridbag.setConstraints(btn2, c); // btn3 gridx = 0 //gridy dengan posisi RELATIVE (1 + 1) // btn3 gridy = 2 gridbag.setConstraints(btn3, c);
74
// btn4 gridx dengan posisi Relative (0 + 1) // btn4 gridy = 1 // btn4 (1,1) c.gridx = GridBagConstraints.RELATIVE; c.gridy = 1; gridbag.setConstraints(btn4, c); // btn5 (1,2) c.gridx = 1; c.gridy = 2; gridbag.setConstraints(btn5, c); // btn6 posisi (2,0) c.gridx = 2; c.gridy = 0; c.weightx = 0.0; // btn6 ketinggian 2 baris // kemudian digabungkan // btn6 (2,0) sampai dengan (2,1) c.gridheight = 2; c.fill = GridBagConstraints.BOTH; gridbag.setConstraints(btn6, c); resize(400, 200); } }
com.borland.jbcl.layout.* (XYLayout/jbcl.jar) dan Null Layout Layout X dan Y, memiliki banyak model dari banyak pengembang dan salah satunya adalah dari Borland dan Null Layout dari Java Standar. Model ini menggunakan pixel sebagai posisi X dan Y. Begitu pula dengan panjang dan tinggi dari komponen. Contoh pada Gambar 10.6 dikembangkan dengan menggunakan XYLayout dan Null Layout :
75
Contoh program :
//program ke empatbelas A //Menggunakan XY Layout 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); lblNama.setText("Nama"); lblSertifikat.setText("Sertifikat"); lblJurusan.setText("Jurusan"); lblKampus.setText("Kampus"); txtNim.setText(""); txtNama.setText("");
76
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)
77
); 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(); } }
//program ke empatbelas B //Menggunakan Null Layout import javax.swing.*; import java.awt.*; import com.borland.jbcl.layout.*; import java.awt.event.*; class Frame4 extends JFrame { 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);
78
JButton cmdSave = new JButton(); JButton cmdEnd = new JButton(); public Frame4() { super("Universitas Budi Luhur"); setSize(400,250); setLocation(10,100); try { jbInit(); } catch(Exception ex) { ex.printStackTrace(); } } void jbInit() throws Exception { lblNim.setText("Nim"); lblNim.setBounds(new Rectangle(37, 26, 77, 18)); this.getContentPane().setLayout(null); lblNama.setText("Nama"); lblNama.setBounds(new Rectangle(36, 53, 27, 15)); lblSertifikat.setText("Sertifikat"); lblSertifikat.setBounds( new Rectangle(34, 77, 64, 14) ); lblJurusan.setText("Jurusan"); lblJurusan.setBounds(new Rectangle(33, 98, 55, 13)); lblKampus.setText("Kampus"); lblKampus.setBounds(new Rectangle(32, 123, 67, 11)); txtNim.setText(""); txtNim.setBounds(new Rectangle(117, 29, 70, 20)); txtNama.setText(""); txtNama.setBounds(new Rectangle(116, 50, 195, 23)); chSD.setToolTipText(""); chSD.setText("SD"); chSD.setBounds(new Rectangle(114, 77, 47, 16)); chSMP.setText("SMP"); chSMP.setBounds(new Rectangle(161, 76, 58, 16)); chSMA.setText("SMA"); chSMA.setBounds(new Rectangle(221, 77, 56, 16)); rdTI.setText("TI"); rdTI.setBounds(new Rectangle(114, 92, 42, 25)); rdMI.setText("MI"); rdMI.setBounds(new Rectangle(164, 93, 42, 20)); rdAK.setText("AK"); rdAK.setBounds(new Rectangle(222, 96, 42, 21)); rdTK.setText("TK"); rdTK.setBounds(new Rectangle(276, 96, 64, 19)); cmdSave.setBounds(new Rectangle(29, 153, 114, 27)); cmdSave.setText("Tampil"); cmdEnd.setBounds(new Rectangle(160, 152, 142, 29)); cmdEnd.setActionCommand(""); cmdEnd.setText("Selesai"); cmbKampus.setBounds(
79
new Rectangle(118, 120, 145, 22) ); grpJurusan.add(rdTI); grpJurusan.add(rdMI); grpJurusan.add(rdAK); grpJurusan.add(rdTK); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.getContentPane().add(lblNim, null); this.getContentPane().add(lblNama, null); this.getContentPane().add(lblJurusan, null); this.getContentPane().add(rdTI, null); this.getContentPane().add(rdMI, null); this.getContentPane().add(rdAK, null); this.getContentPane().add(rdTK, null); this.getContentPane().add(cmbKampus, null); this.getContentPane().add(lblKampus, null); this.getContentPane().add(cmdSave, null); this.getContentPane().add(cmdEnd, null); this.getContentPane().add(chSMA, null); this.getContentPane().add(lblSertifikat, null); this.getContentPane().add(chSD, null); this.getContentPane().add(chSMP, null); this.getContentPane().add(txtNama, null); this.getContentPane().add(txtNim, null); } } public class praktek62 { public static void main(String args[]) { new frame1().show(); } }
Borland JBuilder Produk JBuilder merupakan perangkat lunak bantu untuk membuat aplikasi Java dalam bentuk IDE. JBuilder oleh pengembangnya, Borland (http://ww.borland.com), mempunyai 3 (tiga) versi, yaitu : - Enterprise Edition Produk Enterprise Edition dilengkapi dengan pemrograman J2EE, Web Services dan Aplikasi yang terintegrasi dengan peningkatan performan ( tuning). - Develepor Edition Versi Developer Edition merupakan versi khusus untuk pengembang untuk membuat program, tetapi tidak selengkap versi Enterprise Edition . - Foundation Versi Foundation dikhususkan untuk pemula dan dapat diunduh ( download) gratis pada web site http://www.borland.com, dengan spesifikasi komputer, yaitu pentium III dan minimal memori 256 Mb.
80
Instalasi Borland JBuilder Untuk menginstalasi aplikasi cukuplah mudah, lakukanlah beberapa langkah dibawah ini : 1. Unduhlah JBuilder versi terakhir pada http://www.borland.com, kemudian lakukan instalasi dengan meng-click pada file setup, yaitu fnd_install.exe dan akan tampil layar seperti di bawah ini :
Gambar 10.7 Tahap persiapan instalasi program JBuilder 2. Setelah proses persiapan instalasi telah selesai akan tampil layar seperti pada Gambar 10.8, kemudian tekan tombol next
81
3. Pada layar tampilan pada gambar license pilihlah radio button I Accept The Terms of The Licence Agreement, kemudian tekan tombol next
Gambar 10.9 Tampilan Persetujuan Lisensi JBuilder 4. Pilihlah tempat direktori pada komputer untuk instalasi atau instalasi akan ditempatkan pada direktori C:\Jbuilder
82
83
Membuat Program Aplikasi GUI dengan menggunakan JBuilder 1. Aktifkan JBuilder pada start menu All Program Borland JBuilder X Foundation Borland JBuilder X Foundation 2. Untuk pertama kali menggunakan aplikasi JBuilder akan diminta untuk melakukan regristrasi atau pendaftaran atau memasukkan aktivasi file 3. Akan tampil layar seperti gambar dibawah ini :
Gambar 10.13 Tampilan Aplikasi Editor JBuilder 4. Buatlah Aplikasi Java dengan menggunakan menu File New, akan tampil layar seperti pada Gambar 10.14, kemudian pilihlah ikon Application
84
5. Setelah tombol ikon Application telah terpilih, berilah nama project, contoh : Testing
Gambar 10.15 Langkah Wizard Pertama Dari Ke Tiga 6. Tekan tombol next pada proses Wizard ke dua
85
Gambar 10.17 Pengisian Identifikasi Pembuat Program 8. Masukkan nama aplikasi yang akan kita buat, Contoh : Testing
86
Gambar 10.19 Langkah Kedua Pemberian Nama Frame 10. Tekan tombol finish pada langkah ketiga
87
Desain GUI
Gambar 10.21 Layar Editor JBuilder Untuk Aplikasi Testing 12. Pilihlah tab atas dengan nama frmTesting kemudian pilih tab bawah dengan tulisan Design Run Object Tools
88
NETBEANS Aplikasi bantu untuk pembuatan program Java ini telah didukung penuh penggunaannya oleh SUN Microsystem dan gratis. Aplikasi Netbeans versi terbaru dapat diunduh (download) pada website http://www.sun.com atau pada URL http://www.sun.com/download/index.jsp?cat=Java%20%26%20Technologies&tab=3 &subcat=Java untuk versi terbaru. Spesifikasi komputer yang dibutuhkan adalah komputer setingkat pentium III dan minimal memori 256Mb (dianjurkan penulis 512 Mb). Untuk mengenal lebih lanjut perkembangan Netbean, anda dapat melihat pada website http://www.netbeans.org Instalasi Netbeans Proses instalasi, sesudah mengunduh dari internet, dengan menjalankan aplikasi setup contoh : jdk-1_5_0_06-nb-4_1-win-ml.exe. Maka lanjutkan tahap berikutnya seperti dibawah ini : 1. Persiapan Instalasi dan apabila telah tampil layar instalai wizard tekan tombol Next
89
2. Pada layar lisensi penggunaan pilih radio button I accept The Terms In The License Agreement , kemudian tekan tombol Next.
Gambar 10.25 Kesepakatan Lisensi NetBeans 3. Isilah direktori instalasi, Contoh : C:\Program Files\netbeans-4.1, kemudian tekan tombol Next
90
91
Membuat Aplikasi GUI Dengan Menggunakan NetBeans 1. Jalankan Aplikasi NetBeans dengan memilih Ikon pada Start All Program Netbeans Netbeans
Gambar 10.29 Tampilan Editor NetBeans 2. Buatlah aplikasi dengan memilih menu File New Project, kemudian pilihlah general Java Aplication
92
93
4. Pilihlah menu File New File, kemudian pilihlah Java GUI Form JFrame Form
Gambar 10.33 Membuat JFrame Pada NetBeans 5. Masukkan nama form, contoh : frmTesting
94
Pallete (Tools)
Project Explorer
Inspector
Gambar 10.35 Layar Editor frmTesting 7. Tambahkan perintah tambahan pada Main.java public class Main { /** Creates a new instance of Main */ public Main() { } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here frmTesting frm = new frmTesting(); frm.setVisible(true); } }
95
Latihan 9 Buatlah layar tampilan seperti pada Gambar 10.26 dengan menggunakan JBuilder dan NetBeans
96
BAB XI
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.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 java.net.UnknownHostException java.net.UnknownServiceException java.lang.IllegalAccessException java.lang.InstantiationException java.lang.InterruptedException java.lang.NoSuchMethodException java.lang.RuntimeException java.lang.ArithmeticException java.lang.ArrayStoreException java.lang.ClassCastException java.util.EmptyStackException java.lang.IllegalArgumentException java.lang.IllegalThreadStateException
97
Adapun deskripsi dari masing-masing kesalahan atau error adalah java.awt.AWTException Exeception yang berasal dari Java Abstract Window Toolkit (AWT). java.lang.ClassNotFoundException Saat pertama pembuatan class dan class tersebut tidak ditemukan. java.lang.CloneNotSupportedException Sebagian besar objek dapat diduplikat (clone) dengan menggunakan method clone(). Pesan akan timbul apabila objek tidak dapat diduplikasi. java.io.IOException Mendeskripsikan secara umum dari pesan IO (Input /Output ). java.io.EOFException Pesan muncul saat pembacaan akhir dari file (end of file) java.io.FileNotFoundException File tidak ditemukan saat pembacaan. java.io.InterruptedIOException Penggunaan interupsi IO tetapi gagal dilakukan java.net.MalformedURLException Universal Resource Locator atau URL, yang lebih dikenal dengan Internet Address tidak dapat dihubungi. java.net.ProtocolException Terdapat kesalahan pada saat penggunaan protocol di class socket java.net.SocketException Pesan kesalahan saat penggunaan socket java.io.UTFDataFormatException
98
UTF-8 adalah model karakter Unicode yang dapat dirubah menjadi karakter ASCII, pesan kesalahan terjadi dikarenakan kegagalan saat melakukan transfer data. java.net.UnknownHostException The host name didnt match with any known hosts. java.net.UnknownServiceException Servis pada koneksi jaringan tidak ada java.lang.IllegalAccessException Gagal mengakses java.lang.InstantiationException Pesan kesalahan saat membuat objek abstrak atau interface. java.lang.InterruptedException Interupsi terjadi saat melukan proses Thread java.lang.NoSuchMethodException Pesan kesalahan ini jarang sekali terjadi, pesan ini akan tampil apabila terjadi penghapusan method dari class . java.lang.RuntimeException Pada saat program dijalankan terdapat kesalahan dalam pemrograman (bug) java.lang.ArithmeticException Pesan kesalahan dalam penggunaan angka kosong (zero) java.lang.ArrayStoreException Gagal dalam penggunaan array. java.lang.ClassCastException Terdapat kesalahan dalam pengecekan class awal java.util.EmptyStackException Sebuah objek pada class tersusun dalam posisi kosong java.lang.IllegalArgumentException Kemungkinan disebabkan penggunaan yang salah dari library. java.lang.IllegalThreadStateException Gagal menjalankan thread , dikarenakan thread yang sudah ada telah aktif. java.lang.NumberFormatException Mengindikasikan perbedaan format angka.
99
java.lang.IllegalMonitorStateException Gagal melakukan monitoring pada thread . java.lang.IndexOutOfBoundsException Index melebihi dari yang seharusnya java.lang.ArrayIndexOutOfBoundsException Penggunaan array index yang lebih dari seharusnya. java.lang.StringIndexOutOfBoundsException Pada String , tidak disarankan penggunaan kosong atau lebih dari panjang karakter string. java.lang.NegativeArraySizeException Tidak dapat mengalokasikan nilai array negative. java.util.NoSuchElementException Enumeration kosong. java.lang.NullPointerException Penggunaan null pada objek
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(
100
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()
101
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(); } } }
102
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.
103
2. Apakah penulisan program di bawah ini diperbolehkan dan tetap mendapatkan pesan kesalahan?
catch (Exception e) { }
3. Apakah akan terjadi kesalahan pada program di bawah ini? Akankah program dapat terkompilasi dengan baik?
try { } catch (Exception e) { } catch (ArithmeticException a) { }
104
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 12.1 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;
105
public void run(String name){ try{ System.out.println(name + " started!"); do{ System.out.println( " - stage: " + (stage+1) ); pause = (int) (Math.random() * 1000); stage++; } 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
106
Berbeda dengan dengan multithread, setiap modul dapat dijalankan pada waktu yang bersamaan. Sebagai ilustrasinya terlihat pada Gambar 12.2 di bawah ini.
Gambar 12.2 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 : - 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();
107
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; private int stage=0; public raceThread(String name){ super(name); } public void run(){ try{ do { System.out.println(
108
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 di atas 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
109
110
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 12.3. Didalam objek account tersebut ada nilai yang diubah oleh ketiga objek yang mengakses objek account. MyThread menambah nilai 1 sebanyak 10 kali dengan pemanggilan objek sebanyak 5 kali pada variabel balance di dalam objek account. YourThread mengurangi nilai 1 sebanyak 10 kali pada variable balance di dalam 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
YourThread
111
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()); } } } 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;
112
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); } }
Hasil program
1 2 3 4 5 deposit deposit deposit deposit deposit 1 2 3 4 5
113
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); } }
114
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
115
Latihan 11 Buatlah Jam yang bergerak setiap detik seperti layar tampilan dibawah ini :
116
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 13.1 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.
117
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,
pembacaan.
FileReader(FileDescriptor fd) Membuat objek FileReader baru dengan parameter FileDescriptor FileReader(String fileName) Membuat objek FileReader baru dengan parameter string
FileWriter
Constructor
FileWriter(File file)
Membuat objek FileWriter dengan parameter nama file dan boolean append. Methods bawaan dari class java.io.OutputStreamWriter
close, flush, getEncoding, write, write, write
118
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). Di bawah ini terdapat beberapa program sequential access dengan rancangan seperti pada Gambar 13.3. 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 13.3 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 ); } }
119
120
Random Access Random Access melakukan pembacaan atau penyimpanan dengan acak/non sequential dengan penandaan berupa pointer.
Gambar 13.4 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.
Membaca panjang byte yang ditentukan parameter kemudian disimpan ke dalam array.
121
boolean readBoolean()
Mencari posisi pointer offset dari posisi awal dari file sampai akhir.
void write(byte[] b)
Menyimpan tipe data byte array dengan panjang tertentu dengan posisi pointer.
void write(int b)
122
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);
123
System.exit(-1); } System.out.println(txtmsg ); } }
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 dengan panjang tertentu.
124
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); } }
125
126
BAB XIV
127
Gambar 14.1 Relasi Tabel Pada Gambar 14.2 terdapat 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> <Tipe Data> (<Panjang>), [<Model Key> <Nama Field>], ) 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`) )
128
Contoh : drop table mahasiswa Merubah tabel mahasiswa Alter Table <Nama Tabel> <Add|Modify|Change|Drop> <Nama Field> [<Tipe Data> (<panjang>)] 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> (<Ekspresi>)
[(Nama
Field)]
Values
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 129
Insert Into mahasiswa values (9511500134, Windu Gata, Jl. Perdagangan V/21, 28,1) 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
130
Membaca data pada tabel mahasiswa Select <*/Nama Field> From <Nama Tabel> <Definisi>] Contoh : Membaca data pada field Nim, Nama dari tabel mahasiswa Select Nim, Nama From mahasiswa
[Where
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
131
String
Date
132
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 14.3).
Gambar 14.3 JDBC-Two Tier sedangkan three tier adalah program dapat mengakses data melalui perantara atau midle party atau third party (lihat Gambar 14.4).
Gambar 14.4 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
133
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. 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_Table> ); 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.
134
void clearWarnings()
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()
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. 135
136
Mendapatkan tipe data byte dengan bentuk array dengan 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)
kolom.
float getFloat(int columnIndex)
138
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()
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,
139
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 nama kolom dan nilai java.sql.Blob value.
void updateBoolean(int columnIndex, boolean x)
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)
140
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.
void updateInt(String columnName, int x)
Memberikan nilai null dengan parameter nama kolom dengan parameter nama kolom.
void updateRow()
141
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();
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();
142
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 14.6 dan dengan tampilan program pada Gambar 14.7.
143
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");
144
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"); 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);
145
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(); if (obj == btnNext) recNext(); if (obj == btnLast) recLast(); if (obj == btnAdd) recAdd(); if (obj == btnSave) recSave(); if (obj == btnFilter) recFilter(); if (obj == btnDelete) recDelete(); if (obj == btnExit) System.exit(0); } } private void recFilter(){ if (btnFilter.getText() == "Filter"){ String inputValue = JOptionPane.showInputDialog( "Masukkan NIM : " ); if (inputValue != ""){ boolean bConnect = ConnectToTable(inputValue);
146
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()); }
147
} 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(); } }
148
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()); } } 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);
149
} 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(""); 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) {
150
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='" + sFilter + "' "; } 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(); } }
151
BAB XV MEMBUAT LAPORAN DENGAN JFREEREPORT JFreeReport merupakan Java library dari http://www.jfree.org yang dipimpin oleh Thomas Morgner. Cara kerja JFreeReport adalah membaca data dari TableModel dan menampilkannya dalam bentuk laporan (report). Fasilitas yang disediakan adalah penggunaan judul ( header), nomor halaman, penjumlahan secara grup ( grup total), rata-rata, gambar dan lain-lain. Laporan dapat terlihat pada layer ataupun disimpan dengan format Acrobat PDF, Excel, HTML, XML ataupun text format. JFreeReport berkejasama dengan Pentaho-Project pada tanggal 17 Januari 2006. Thomas Morgner juga menjabat sebagai Chief Architect of Reporting Solutions. Librari JFreeReport dapat diunduh pada http://www.jfree.org, sedangkan pentaho dapat diunduh pada http://www.pentaho.org. Mulailah dengan membuat laporan aplikasi dengan mengikuti langkah-langkah di bawah ini : 1. Extract jfreereport-0.8.6-6.zip pada direktori yang ditentukan, contoh : c:\ 2. Ketiklah dan simpan program koneksiDatabase.java
//koneksiDatabase.java package testing; import java.sql.*; import javax.swing.*; public class koneksiDatabase{ String sdriver, sdburl, susername,spassword,squerydata; Connection conn = null; Statement st=null; ResultSet rs=null; public koneksiDatabase( String driver, String dburl, String username, String password, String querydata){ sdriver = driver; sdburl = dburl; susername = username; spassword = password; squerydata= querydata; } public Connection openKoneksi()throws SQLException{ System.out.println(sdriver); try{ Class.forName(sdriver); conn = DriverManager.getConnection(sdburl); return conn;
152
} catch(Exception e){ JOptionPane.showMessageDialog( null, "Koneksi ke database gagal !","Pesan", JOptionPane.ERROR_MESSAGE ); return null; } } public ResultSet getResult() throws SQLException { try{ openKoneksi(); st=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs=st.executeQuery(squerydata); } catch(Exception ee){ ee.printStackTrace(); return null; } return rs; } }
3. Identifikasikan semua library JFreeReport (c:\ jfreereport-0.8.6-6) pada program java 4. Extract pentaho-report-design-wizard-0.9.2.zip pada direktori yang diinginkan, contoh : c:\ 5. Copy mysql-connector-java-3.0.15-ga-bin.jar ke direktori c:\pentaho-reportdesign-wizard-0.9.2\lib\jdbc\ 6. Jalankan c:\ pentaho-report-design-wizard-0.9.2\reportwizard.bat hingga keluar layar seperti dibawah ini
7. Tambahkan JNDI Connection Type dengan menekan tombol Add, kemudian isilah semua parameter yang ada. Kemudian tekan tombol Test untuk melakukan pengetesan dan tekan OK apabila sudah bisa koneksi.
Gambar 15.2 JNDI Connection 8. Pilihlah JNDI contoh : testing, kemudian isilah teks Query dengan teks sebagai berikut : select nim,nama,alamat, trim(concat( (case when sd=1 then 'SD ' else ' ' end) ,(case when smp=1 then 'SMP ' else ' ' end) ,(case when sma=1 then 'SMA ' else ' ' end) )) sertifikat, (case when jurusan = 0 then 'TI' when jurusan = 1 then 'MI' when jurusan = 2 then 'AK' when jurusan = 3 then 'TK' end) jurusan, (case when kampus = 0 then 'Cempaka Mas' when kampus = 1 then 'Cileduk' when kampus = 2 then 'Roxy' when kampus = 3 then 'Salemba' end) kampus from mahasiswa
154
9. Tahap ke dua tekan tombol Next hingga muncul layar tampilan seperti dibawah ini
Gambar 15.3 Langkah ke dua pembuatan laporan dengan Pentaho 10. Tahap ke tiga tekan tombol next hingga muncul layar seperti dibawah ini
155
11. Tahap ke empat tekan tombol Next, hingga muncul layar tampilan sebagai berikut
12. Tekan tombol Finish, hingga muncul hasil akhir dari laporan
Gambar 15.6 Contoh Laporan Acrobat Reader Dari Pentaho 13. Tutup layar Acrobat Reader, kemudian pilihlah menu File Export To Location, simpanlah ditempat yang sama dengan program utama.
156
import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import import import import import import import import org.jfree.report.ElementAlignment; org.jfree.report.JFreeReport; org.jfree.report.JFreeReportBoot; org.jfree.report.modules.parser.base.ReportGenerator; org.jfree.report.elementfactory.TextFieldElementFactory; org.jfree.report.modules.gui.base.PreviewDialog; org.jfree.ui.FloatDimension; org.jfree.report.modules.misc.tablemodel.ResultSetTableModelFactory;
public class printReport{ private static ResultSetMetaData rsd = null; public static ResultSet rs = null; private DefaultTableModel rsult; koneksiDatabase kDb; private Object[] columnNames; private int count=0; private TableModel datars; private URL urlXML; public public public public public public String String String String String String dburl = "jdbc:mysql://localhost/mhs?"; username = "root"; password = ""; fileXML = "mahasiswa.xml"; jdbcDriver = "com.mysql.jdbc.Driver"; querydata = "select * from mahasiswa";
protected static class CloseHandler extends WindowAdapter { public void windowClosing(final WindowEvent event) { } }
157
public printReport() {} public void executereport() { JFreeReportBoot.getInstance().start(); kDb = new koneksiDatabase( jdbcDriver, dburl, username, password, querydata ); if (rs == null) { try { rs = kDb.getResult(); } catch (Exception e) { } }
final TableModel data = createData(); final JFreeReport report = createReportDefinition(); try { report.setData(data); } catch(Exception ex) { ex.printStackTrace(); } try { final PreviewDialog preview=new PreviewDialog(report); preview.addWindowListener(new CloseHandler()); preview.pack(); preview.setVisible(true); rs.close(); rs=null; } catch(Exception eex) { eex.printStackTrace(); } }
private TableModel createData() { rsult = null; try { rsd = rs.getMetaData(); count = rsd.getColumnCount(); columnNames = new Object[count+1]; for(int i = 1;i <= count; i++) { columnNames[i-1] = rsd.getColumnName(i);
158
rs.first(); rsult=new DefaultTableModel(columnNames,myCounter + 1); int row=0; do{ row++; for(int j=1;j<=count;j++) { rsult.setValueAt(rs.getObject(j),row,j-1); //System.out.println(rs.getObject(j)); } }while(rs.next()); } catch(Exception exe) { exe.printStackTrace(); } return rsult; } private JFreeReport createReportDefinition() { JFreeReport report = new JFreeReport(); try { URL urlXML = getClass().getResource(fileXML); report = ReportGenerator.getInstance().parseReport(urlXML); report.setName("Master"); }catch(Exception ee) { ee.printStackTrace(); } return report; }
public static void main (final String[] args) { printReport rpt = new printReport(); rpt.querydata = "select nim,nama,alamat, " + " trim(concat( " + " (case " + " when sd = 1 then 'SD ' "
159
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
" else ' ' " " end " " ), " " (case " " when smp = 1 then 'SMP ' " " else ' ' " " end " " ), " " (case " " when sma = 1 then 'SMA ' " " else ' ' " " end " " ) " " )) sertifikat, " "(case " " when jurusan = 0 then 'TI' " " when jurusan = 1 then 'MI' " " when jurusan = 2 then 'AK' " " when jurusan = 3 then 'TK' " " end) jurusan, " " (case " " when kampus = 0 then 'Cempaka Mas' " " when kampus = 1 then 'Cileduk' " " when kampus = 2 then 'Roxy' " " when kampus = 3 then 'Salemba' " " end) kampus " " from mahasiswa" ;
rpt.executereport(); } }
160
15. Jalankan program, dan apabila telah tampil gambar seperti dibawah ini maka program laporan selesai dibuat
161
BAB XVI
//latihan 1 import javax.swing.*; import java.awt.*; class grap1 extends Canvas { public void paint (Graphics g) { g.setColor(Color.RED); g.fillRect(50,30,200,50); g.setColor(Color.WHITE); g.fillRect(50,80,200,50); g.setColor(Color.BLUE); g.fillOval(40,27,10,10); g.fillRect(40,30,10,150); g.setColor(Color.YELLOW); g.setFont(new Font("Tahoma",Font.BOLD,20)); g.drawString("MERDEKA",100,150); g.setColor(Color.GREEN); g.setFont(new Font("ARIAL",Font.BOLD,10));
162
g.drawString("17 Agustus 1945 - 2004",90,170); } } class grap11 extends JFrame { private Container konten=new Container(); private grap1 bendera=new grap1(); grap11() { super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(100,100); this.setSize(300,250); konten=getContentPane(); konten.add(bendera); show(); } public static void main(String args[]) { new grap11(); } }
163
Nim : 9511500134
private JTextField txtNim = new JTextField( "9511500134",10 );
Atau
txtNim.setText("9511500134");
SD : Checked
private JCheckBox chSD = new JCheckBox("SD",true);
atau
chSD.setSelected(true);
SMA : Checked
private JCheckBox chSMA = new JCheckBox("SMA",true);
atau
chSMA.setSelected(true);
Jurusan TI : Checked
164
Atau
rdTI.setSelected(true);
class frame23icon extends JFrame { //deklarasi objek private Container konten = new Container(); private JPanel panel1 = new JPanel(); private JLabel lblNim = new JLabel(); private JTextField txtNim = new JTextField( "9511500134",10 ); private JLabel lblNama = new JLabel(); private JTextField txtNama = new JTextField( "Windu Gata", 20 ); private private private private private JLabel lblSertifikat = new JLabel(); JPanel panel2 = new JPanel(); JCheckBox chSD = new JCheckBox("SD",true); JCheckBox chSMP = new JCheckBox("SMP", true); JCheckBox chSMA = new JCheckBox("SMA",true);
165
private JLabel lblJurusan = new JLabel(); private ButtonGroup grpJurusan = new ButtonGroup(); private JRadioButton rdTI = new JRadioButton( "TI", true ); private JRadioButton rdMI = new JRadioButton("MI"); private JRadioButton rdAK = new JRadioButton("AK"); private 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"); frame23icon() { super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setIconImage( Toolkit.getDefaultToolkit().getImage( "computer.jpg" ) ); this.setLocation(10,100); this.setSize(500,250);
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); panel2.add(chSMP); panel2.add(chSMA); panel1.add(panel2);
166
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); cmdSave.setMnemonic('P'); cmdSave.setIcon(new ImageIcon("preview.jpg"));
panel1.add(cmdEnd); cmdEnd.addActionListener(itemHandler); cmdEnd.setMnemonic('S'); cmdEnd.setIcon(new ImageIcon("exit.jpg")); konten.add(panel1); 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 (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";
167
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 frame23icon(); } }
168
Jawaban Latihan 3
169
//desain panel 2, tombol NO panel_2.setLayout(new GridLayout()); panel_2.add(new JPanel(), BorderLayout.CENTER); panel_2.add(new Button("No"),BorderLayout.EAST);
//desain panel_3, panah atas, bawah, kanan, kiri panel_3.setLayout (new GridLayout (3,3)); panel_3.add (new JPanel()); panel_3.add (new Button("^")); panel_3.add (new JPanel()); panel_3.add (new Button("<")); panel_3.add (new JPanel()); panel_3.add (new Button(">")); panel_3.add (new JPanel()); panel_3.add (new Button("v")); //panel 4, formasi border atas panel_4.setLayout(new BorderLayout()); panel_4.add(panel_1, BorderLayout.WEST); panel_4.add(panel_2, BorderLayout.EAST); panel_4.add(panel_3, BorderLayout.CENTER); //desain panel_5, tombol angka panel_5.setLayout(new GridLayout(4,3)); for (int i=1; i<=9; i++) panel_5.add(new Button(Integer.toString(i))); panel_5.add(new Button("*")); panel_5.add(new Button("0")); panel_5.add(new Button("#")); //desain panel_6 panel_6.setLayout(new BorderLayout()); panel_6.add(panel_4, BorderLayout.NORTH); panel_6.add(panel_5, BorderLayout.CENTER); //desain panel_7 panel_7.setLayout (new BorderLayout()); panel_7.add(new JPanel(), BorderLayout.NORTH); panel_7.add(new JPanel(), BorderLayout.WEST); panel_7.add(new JPanel(), BorderLayout.EAST); panel_7.add(new JTextField("0818870069"), BorderLayout.CENTER ); panel_7.add(new JPanel(), BorderLayout.SOUTH); //Desain Frame konten = getContentPane(); konten.setLayout (new BorderLayout()); konten.add(panel_6, BorderLayout.SOUTH); konten.add(panel_7, BorderLayout.CENTER); show(); } }
170
//class Utama public class praktek41 { public static void main(String args[]) { new frame41(); } }
//latihan 3b import import import import javax.swing.*; java.awt.*; javax.swing.event.*; java.awt.event.*; extends JFrame Container konten = new Container(); JPanel panel1 = new JPanel(); JLabel lblKeterangan = new JLabel( "Konversi Derajat" );
private JPanel panel2 = new JPanel(); private JTextField txtSource = new JTextField(5); String pil[] = {"Celcius", "Fahrenheit", "Kelvin"}; private JComboBox cmbSource = new JComboBox(pil); private JLabel lblKonversi = new JLabel( "Konversi Ke" );
171
private JComboBox cmbTarget = new JComboBox(pil); private JButton button1 = new JButton("Konversi"); private JLabel lblHasil = new JLabel(); private JPanel panel3 = new JPanel(); private JPanel panel4 = new JPanel(); frame42() { super ("UNIVERSITAS BUDI LUHUR"); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); setSize(500,100); setLocation(300,100); itemHandler itemHandler = new itemHandler(); panel1.setLayout(new BorderLayout()); panel1.add(lblKeterangan); panel2.setLayout(new GridLayout(1,5)); panel2.add(txtSource); panel2.add(cmbSource); panel2.add(lblKonversi); panel2.add(cmbTarget); panel2.add(button1); button1.addActionListener(itemHandler); panel3.setLayout(new BorderLayout()); panel3.add(panel1, BorderLayout.NORTH); panel3.add(panel2, BorderLayout.SOUTH); panel4.setLayout(new BorderLayout()); panel4.add(panel3, BorderLayout.NORTH); panel4.add(lblHasil, BorderLayout.SOUTH); konten = getContentPane(); konten.add(panel4); show(); } private class itemHandler implements ActionListener {public void actionPerformed(ActionEvent e) {Object obj=e.getSource(); if(obj==button1) { int iSource; int iTarget; double dHasil; String sHasil; iSource = cmbSource.getSelectedIndex(); iTarget = cmbTarget.getSelectedIndex();
172
dHasil = Double.parseDouble( txtSource.getText() ); if(iSource!=iTarget) { if (iSource == 0 && iTarget==1) dHasil = (dHasil*1.8) + 32; if (iSource == 0 && iTarget==2) dHasil = dHasil + 273.15; if (iSource == 1 && iTarget==0) dHasil = (dHasil - 32) * 0.5555; if (iSource == 1 && iTarget==2) dHasil = ((dHasil-32)*0.5555) +273.15; if (iSource == 2 && iTarget==0) dHasil = dHasil-273.15; if (iSource == 2 && iTarget==1) dHasil = ((dHasil-273.15)*1.8)+32; } lblHasil.setText("HASIL " + dHasil); } } } } //class utama public class praktek42 { public static void main(String args[]) { new frame42(); } }
173
public class Pear extends JFrame implements MouseListener { Ellipse2D.Double circle, oval, leaf, stem; Area circ, ov, leaf1, leaf2, st1, st2; int w,h; double ew,eh;
174
public Pear() { setSize(new Dimension(400,300)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); circle = new Ellipse2D.Double(); oval = new Ellipse2D.Double(); leaf = new Ellipse2D.Double(); stem = new Ellipse2D.Double(); circ = new Area(circle); ov = new Area(oval); leaf1 = new Area(leaf); leaf2 = new Area(leaf); st1 = new Area(stem); st2 = new Area(stem); /*mendapatkan posisi awal JFrame*/ Dimension d = getSize(); w = d.width; h = d.height; /*Gambar Ditempatkan di Tengah*/ ew = w/2; eh = h/2; setBackground(Color.white); } public void paint (Graphics g) { Graphics2D g2 = (Graphics2D) g;
/*Menggambar daun dengan model intersection *dari 2 object elipse */ g2.setColor(Color.green); leaf.setFrame(ew-16, eh-29, 15.0, 15.0); leaf1 = new Area(leaf); leaf.setFrame(ew-14, eh-47, 30.0, 30.0); leaf2 = new Area(leaf); leaf1.intersect(leaf2); g2.fill(leaf1); /* *Menggambar Daun ke 2 */ leaf.setFrame(ew+1, eh-29, 15.0, 15.0); leaf1 = new Area(leaf); leaf2.intersect(leaf1); g2.fill(leaf2); g2.setColor(Color.black); /* *Menggambar dengan model substract *dari 2 objek elipse */
175
stem.setFrame(ew, eh-42, 40.0, 40.0); st1 = new Area(stem); stem.setFrame(ew+3, eh-47, 50.0, 50.0); st2 = new Area(stem); st1.subtract(st2); g2.fill(st1); g2.setColor(Color.yellow); /*penggambaran buah Pear *dengan sistem penggabaungan 2 objek *elipse yang berbeda */ circle.setFrame(ew-25, eh, 50.0, 50.0); oval.setFrame(ew-19, eh-20, 40.0, 70.0); circ = new Area(circle); ov = new Area(oval); circ.add(ov); g2.fill(circ); //untuk menampilkan text X & Y pada layar g2.setColor(Color.blue); g2.setFont(new Font("Tahoma",Font.ITALIC,10)); g2.drawString( ew + ", " + eh, (int) ew + 10, (int) eh ); } //Mouse Listener public void mouseReleased(MouseEvent e) { /*posisi gambar disesuaikan dengan *X & Y mouse */ ew = e.getX(); eh = e.getY(); repaint(); System.out.println("Mouse Released"); } public void mousePressed(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseClicked(MouseEvent e){}
public static void main(String s[]) { Pear p = new Pear(); p.addMouseListener(p); p.setVisible(true); } }
176
Jawaban Latihan 5
lblCm sldCm
lblCmCapt
lblInch lblInchCapt s l d I n c h
lblFeet lblFeetCapt S l d F e e t
Rumus Inch = (Centimeter) * 0.39370 Feet = (Centimeter) * 0.03821 Centimeter = (Inch) * 2.54 Fett = (Inch) * 0.833 Centimeter = (Feet) * 30.48 Inch = (Feet) * 12
import import import import javax.swing.*; javax.swing.event.*; java.awt.*; java.awt.event.*;
class frame53 extends JFrame { //penggunaan slider //JSlider (posisi <0-horisontal|1-vertical>,min,max,0) private Container konten = new Container(); private JPanel panel1 = new JPanel(); private JPanel panel2 = new JPanel();
177
private JLabel lblCm = new JLabel(); private JLabel lblCmCapt = new JLabel(); private JSlider sldCm = new JSlider(); private private private private private JPanel JLabel JLabel JLabel JLabel panel3 = new JPanel(); lblInch = new JLabel(); lblInchCapt = new JLabel(); lblFeet = new JLabel(); lblFeetCapt = new JLabel();
private JPanel panel4 = new JPanel(); private JSlider sldInch = new JSlider(1,0,200,0); private JSlider sldFeet = new JSlider(1,0,200,0); private JPanel panel5 = new JPanel(); private JPanel panel6 = new JPanel(); frame53() { super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(200,325); setLocation(10,100); konten = getContentPane(); lblCm.setText("Cm"); lblCmCapt.setText("0 Derajat"); panel1.setLayout( new FlowLayout( FlowLayout.CENTER ) ); panel1.add(lblCm); panel1.add(lblCmCapt); panel2.setLayout(new BorderLayout()); panel2.add(panel1, BorderLayout.NORTH); sldCm.setValue(0); sldCm.setMaximum(10000); panel2.add(sldCm, BorderLayout.SOUTH);
lblInch.setText("Inch "); lblInchCapt.setText("0"); lblFeet.setText("Feet "); lblFeetCapt.setText("0"); sldInch.setMaximum(3937); panel3.setLayout(new GridLayout (2, 2)); panel3.add(lblInch); panel3.add(lblFeet); panel3.add(lblInchCapt); panel3.add(lblFeetCapt); panel4.setLayout(new BorderLayout()); panel4.add(sldInch, BorderLayout.WEST); sldFeet.setMaximum(328);
178
sldFeet.setMinimum(0); sldFeet.setValue(0); panel4.add(sldFeet, BorderLayout.EAST); 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);
sldCm.addChangeListener ( //jika nilai slider Berubah new ChangeListener() {public void stateChanged(ChangeEvent e) { lblCmCapt.setText( sldCm.getValue() + " Cm" ); } } ); sldCm.addMouseListener ( //jika mouse selesai melakukan pergerakan new java.awt.event.MouseAdapter() { public void mouseReleased(MouseEvent e) { double dInch,dFeet; dInch = sldCm.getValue() * 0.3937; dFeet = sldCm.getValue() * 0.03821; sldInch.setValue((int) dInch); lblInchCapt.setText(dInch + " Inch"); lblFeetCapt.setText(dFeet + " Feet"); sldFeet.setValue((int) dFeet); } } ); sldInch.addChangeListener ( new ChangeListener() {public void stateChanged(ChangeEvent e) { lblInchCapt.setText( sldInch.getValue() + " Cm" ); }
179
} ); sldInch.addMouseListener (new java.awt.event.MouseAdapter() { public void mouseReleased(MouseEvent e) { double dCm,dFeet; dCm = sldInch.getValue() * 2.54; dFeet = sldInch.getValue() * 0.08333; sldCm.setValue((int) dCm); lblCmCapt.setText(dCm + " Cm"); sldFeet.setValue((int) dFeet); lblFeetCapt.setText(dFeet + " Feet"); } } ); sldFeet.addChangeListener ( new ChangeListener() {public void stateChanged(ChangeEvent e) { lblFeetCapt.setText( sldFeet.getValue() + " Feet" ); } } ); sldFeet.addMouseListener (new java.awt.event.MouseAdapter() { public void mouseReleased(MouseEvent e) { double dCm,dInch; dCm = sldFeet.getValue() * 30.48; dInch = sldFeet.getValue() * 12; sldCm.setValue((int) dCm); lblCmCapt.setText(dCm + " Cm"); sldInch.setValue((int) dInch); lblInchCapt.setText(dInch + " Inch"); } } ); konten.add(panel6); show();
180
} } public class praktek53 { public static void main(String args[]) { new frame53(); } }
181
Keseluruhan Program :
import javax.swing.*; import java.awt.*; import java.awt.event.*; class frame52icon extends JFrame { private Container konten = new Container(); private JMenuBar bar = new JMenuBar(); private JMenu mnFile = new JMenu("File"); private JMenuItem mniFileBuka = new JMenuItem( "Buka File" ); private JMenuItem mniFileSimpan = new JMenuItem( "Simpan File" ); private JMenuItem mniFileKeluar = new JMenuItem( "Keluar" ); private JMenu mnEdit = new JMenu("Edit"); private JMenuItem mniCopy = new JMenuItem("Copy"); private JMenuItem mniCut = new JMenuItem("Cut"); private JMenuItem mniPaste = new JMenuItem("Paste"); private 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 );
182
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(); private JMenuItem mniPopCopy = new JMenuItem("Copy"); private JMenuItem mniPopCut = new JMenuItem("Cut"); private JMenuItem mniPopPaste = new JMenuItem( "Paste" );
frame52icon() { super("Universitas Budi Luhur"); setSize(500,500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ItemHandler itemHandler = new ItemHandler(); mniFileBuka.addActionListener(itemHandler); mniFileBuka.setMnemonic('B'); mniFileBuka.setIcon(new ImageIcon("OPEN.JPG")); mniFileSimpan.addActionListener(itemHandler); mniFileSimpan.setMnemonic('S'); mniFileSimpan.setIcon(new ImageIcon("SAVE.JPG")); mniFileKeluar.addActionListener(itemHandler); mniFileKeluar.setMnemonic('K'); mniFileKeluar.setIcon(new ImageIcon("EXIT.JPG")); mniCopy.addActionListener(itemHandler); mniCopy.setMnemonic('C'); mniCopy.setIcon(new ImageIcon("COPY.JPG"));
mniCut.addActionListener(itemHandler); mniCut.setMnemonic('U'); mniCut.setIcon(new ImageIcon("CUT.JPG")); mniPaste.addActionListener(itemHandler); mniPaste.setMnemonic('P'); mniPaste.setIcon(new ImageIcon("PASTE.JPG")); mnFile.setMnemonic('F'); mnFile.add(mniFileBuka); mnFile.add(mniFileSimpan); mnFile.add(mniFileKeluar);
183
mnEdit.setMnemonic('E'); mnEdit.add(mniCopy); mnEdit.add(mniCut); mnEdit.add(mniPaste); mnTentang.setMnemonic('T'); mnTentang.setIcon(new ImageIcon("HELP.JPG")); bar.add(mnFile); bar.add(mnEdit); bar.add(mnTentang); setJMenuBar(bar); popmenu.add(mniPopCopy); popmenu.add(mniPopCut); popmenu.add(mniPopPaste); mniPopCopy.setMnemonic('C'); mniPopCopy.setIcon(new ImageIcon("COPY.JPG")); mniPopCut.setMnemonic('U'); mniPopCut.setIcon(new ImageIcon("CUT.JPG")); mniPopPaste.setMnemonic('P'); mniPopPaste.setIcon(new ImageIcon("PASTE.JPG")); 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(),
184
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 (frame52icon.this, "Buka File", "Buka",JOptionPane.PLAIN_MESSAGE ); else if (objek == mniFileSimpan) JOptionPane.showMessageDialog (frame52icon.this, "Simpan","Simpan File", JOptionPane.PLAIN_MESSAGE ); else if (objek == mniCopy) JOptionPane.showMessageDialog( frame52icon.this,"Copy " + txtArea.getSelectedText() + " Di Text Area ", "Copy", JOptionPane.PLAIN_MESSAGE ); else if (objek == mniCut) JOptionPane.showMessageDialog( frame52icon.this, "Cut Teks di Teks Area","Cut", JOptionPane.PLAIN_MESSAGE ); else if (objek == mniPaste) JOptionPane.showMessageDialog( frame52icon.this, "Paste Teks di Text Area","Paste", JOptionPane.PLAIN_MESSAGE ); else if (objek == mniFileKeluar) System.exit(0); } } } public class praktek52icon
185
186
Jawaban Latihan 7 Buatlah program untuk membuat JInternalframe dengan nama MyInternalFrame.java
//Nama file MyInternalFrame.java import javax.swing.JInternalFrame; import java.awt.event.*; import java.awt.*; /* Akan digunakan pada InternalFrame */ public class MyInternalFrame extends JInternalFrame { static int openFrameCount = 0; static final int xOffset = 30, yOffset = 30; public MyInternalFrame() { super("Document #" + (++openFrameCount), true, //resizable true, //closable true, //maximizable true);//iconifiable setSize(300,300); //Penenempatan Windows setLocation( xOffset*openFrameCount, yOffset*openFrameCount ); } }
program
induk
dengan
nama
187
*/ public class InternalFrameDemo extends JFrame implements ActionListener { JDesktopPane desktop; public InternalFrameDemo() { super("InternalFrameDemo"); int inset = 50; Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setBounds(inset, inset, screenSize.width - inset*2, screenSize.height - inset*2); desktop = new JDesktopPane(); //Buat Internal Frame Pertama createFrame(); setContentPane(desktop); setJMenuBar(createMenuBar()); desktop.setDragMode( JDesktopPane.OUTLINE_DRAG_MODE ); } protected JMenuBar createMenuBar() { JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("Document"); menu.setMnemonic(KeyEvent.VK_D); menuBar.add(menu); JMenuItem menuItem = new JMenuItem("New"); menuItem.setMnemonic(KeyEvent.VK_N); menuItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_N, ActionEvent.ALT_MASK)); menuItem.setActionCommand("new"); menuItem.addActionListener(this); menu.add(menuItem); menuItem = new JMenuItem("Quit"); menuItem.setMnemonic(KeyEvent.VK_Q); menuItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_Q, ActionEvent.ALT_MASK)); menuItem.setActionCommand("quit"); menuItem.addActionListener(this); menu.add(menuItem); return menuBar; } public void actionPerformed(ActionEvent e) { if ("new".equals(e.getActionCommand())) { //Buat Jinternal Frame Berikutnya createFrame();
188
} else { //quit quit(); } } //Membuat internal frame baru. protected void createFrame() { MyInternalFrame frame = new MyInternalFrame(); frame.setVisible(true); desktop.add(frame); try { //Membuat Frame Terbaru Terpilih frame.setSelected(true); } catch (java.beans.PropertyVetoException e) {} } //Quit the application. protected void quit() { System.exit(0); } private static void createAndShowGUI() { //Make sure we have nice window decorations. JFrame.setDefaultLookAndFeelDecorated(true); //Create and set up the window. InternalFrameDemo frame = new InternalFrameDemo(); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frame.setVisible(true); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater( new Runnable() { public void run() { createAndShowGUI(); } }); } }
189
Jawaban Latihan 8 Untuk Mengganti model default (TOP) dapat menggunakan perintah
/*pilih model*/ tabbedPane.setTabPlacement(tabbedPane.BOTTOM); //tabbedPane.setTabPlacement(tabbedPane.TOP); //tabbedPane.setTabPlacement(tabbedPane.LEFT); //tabbedPane.setTabPlacement(tabbedPane.RIGHT);
Keseluruhan Program :
/* * ===diambil dari sun.java.documen.book.sample ==== */ import java.awt.*; import javax.swing.*; 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)); /*pilih model*/ tabbedPane.setTabPlacement(tabbedPane.BOTTOM); //tabbedPane.setTabPlacement(tabbedPane.TOP); //tabbedPane.setTabPlacement(tabbedPane.LEFT); //tabbedPane.setTabPlacement(tabbedPane.RIGHT); tabbedPane.addTab(BUTTONPANEL, card1); tabbedPane.addTab(TEXTPANEL, card2); pane.add(tabbedPane, BorderLayout.CENTER); }
190
JFrame frame = new JFrame("TabDemo - Universitas Budi Luhur"); frame.setSize(500,100); 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(); } }
191
Jawaban Latihan 9 frmTesting PROPERTIES Objek defaultCloseOperation contentPane PROPERTIES Objek layout lblNim PROPERTIES Objek text lblNama PROPERTIES Objek Text lblSertifikat PROPERTIES Objek Text lblJurusan PROPERTIES Objek Text lblKampus PROPERTIES Objek Text txtNim PROPERTIES Objek Text txtNama PROPERTIES Objek
NILAI jTextField
192
Text chSD PROPERTIES Objek Text chSMP PROPERTIES Objek Text chSMA PROPERTIES Objek Text grpJurusan PROPERTIES Objek
<kosong>
NILAI jTextField SD
NILAI groupButton
rdTI PROPERTIES Objek Text ButtonGroup rdMI PROPERTIES Objek Text ButtonGroup
NILAI jRadioButton TK
193
ButtonGroup cmbKampus PROPERTIES Object cmdSave PROPERTIES Object Text Mnemonic cmdExit PROPERTIES Object Text Mnemonic JBuider
grpJurusan
NILAI JcomboBox
194
Keseluruhan Program :
package testing; import javax.swing.UIManager; import java.awt.*; /** * Testing.java * <p>Title: Testing</p> * <p>Description: Testing Aplikasi</p> * <p>Copyright: Copyright (c) 2006</p> * <p>Company: Universitas Budi Luhur</p> * @author Windu Gata, Skom * @version 1.0 */ public class Testing { boolean packFrame = false; //Construct the application public Testing() { frmTesting frame = new frmTesting(); //Validate frames that have preset sizes //Pack frames that have useful //preferred size info, e.g. from their layout if (packFrame) { frame.pack(); } else { frame.validate(); } //Center the window Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } frame.setLocation( (screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); frame.setVisible(true); }
195
//Main method public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { e.printStackTrace(); } new Testing(); } } package testing; import import import import java.awt.*; java.awt.event.*; javax.swing.*; com.borland.jbcl.layout.*;
/** * <p>Title: Testing</p> * fmTesting.java * <p>Description: Testing Aplikasi</p> * <p>Copyright: Copyright (c) 2006</p> * <p>Company: Universitas Budi Luhur</p> * @author Windu Gata, Skom * @version 1.0 */ public class frmTesting extends JFrame { JPanel contentPane; JLabel lblNim = new JLabel(); JTextField txtNim = new JTextField(); JLabel lblNama = new JLabel(); JTextField txtNama = new JTextField(); JLabel lblSertifikat = new JLabel(); JCheckBox chSD = new JCheckBox(); JCheckBox chSMP = new JCheckBox(); JCheckBox chSMA = new JCheckBox(); JLabel lblJurusan = new JLabel(); ButtonGroup grpJurusan = new ButtonGroup(); JRadioButton rdTI = new JRadioButton(); JRadioButton rdMI = new JRadioButton(); JRadioButton rdAk = new JRadioButton(); JRadioButton rdTk = new JRadioButton(); JLabel lblKampus = new JLabel(); JComboBox cmbKampus = new JComboBox(); JButton btnSave = new JButton(); JButton btnExit = new JButton(); //Construct the frame public frmTesting() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try {
196
jbInit(); } catch(Exception e) { e.printStackTrace(); } } //Component initialization private void jbInit() throws Exception { contentPane = (JPanel) this.getContentPane(); lblNim.setText("Nim"); lblNim.setBounds(new Rectangle(24, 28, 71, 17)); contentPane.setMaximumSize( new Dimension(2147483647, 2147483647) ); contentPane.setLayout(null); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setIconImage(null); this.setResizable(true); this.setSize(new Dimension(399, 277)); this.setTitle("Frame Title"); lblNama.setText("Nama"); lblNama.setBounds(new Rectangle(22, 59, 78, 24)); txtNim.setText(""); txtNim.setBounds(new Rectangle(111, 29, 98, 21)); txtNama.setText(""); txtNama.setBounds(new Rectangle(111, 61, 256, 22)); lblSertifikat.setText("Sertifikat"); lblSertifikat.setBounds(new Rectangle(23, 96, 74, 19)); chSD.setText("SD"); chSD.setBounds(new Rectangle(111, 95, 59, 18)); chSMP.setText("SMP"); chSMP.setBounds(new Rectangle(175, 97, 67, 19)); chSMA.setActionCommand("jCheckBox2"); chSMA.setText("SMA"); chSMA.setBounds(new Rectangle(240, 98, 67, 15)); lblJurusan.setText("Jurusan"); lblJurusan.setBounds(new Rectangle(23, 126, 76, 17)); rdTI.setSelected(true); rdTI.setText("TI"); rdTI.setBounds(new Rectangle(111, 126, 37, 23)); rdMI.setText("MI"); rdMI.setBounds(new Rectangle(158, 128, 51, 21)); rdAk.setMargin(new Insets(2, 2, 2, 2)); rdAk.setText("AK"); rdAk.setBounds(new Rectangle(201, 130, 53, 16)); rdTk.setText("TK"); rdTk.setBounds(new Rectangle(256, 131, 61, 13)); lblKampus.setText("Kampus"); lblKampus.setBounds(new Rectangle(23, 163, 66, 15)); btnSave.setBounds(new Rectangle(28, 208, 99, 22)); btnSave.setMnemonic('S'); btnSave.setText("Save"); btnExit.setBounds(new Rectangle(277, 208, 92, 21)); btnExit.setMnemonic('K'); btnExit.setText("Keluar"); cmbKampus.setBounds(new Rectangle(118, 164, 196, 19));
197
contentPane.add(lblNim, null); contentPane.add(txtNim, null); contentPane.add(txtNama, null); contentPane.add(lblSertifikat, null); contentPane.add(chSD, null); contentPane.add(chSMP, null); contentPane.add(chSMA, null); contentPane.add(rdTI, null); contentPane.add(rdMI, null); contentPane.add(rdTk, null); contentPane.add(rdAk, null); contentPane.add(lblKampus, null); contentPane.add(lblNama, null); contentPane.add(lblJurusan, null); contentPane.add(cmbKampus, null); cmbKampus.addItem("Cempaka Mas"); cmbKampus.addItem("Ciledug"); cmbKampus.addItem("Roxy"); cmbKampus.addItem("Salemba"); cmbKampus.setSelectedIndex(1);
grpJurusan.add(rdTI); grpJurusan.add(rdMI); grpJurusan.add(rdAk); grpJurusan.add(rdTk); contentPane.add(btnSave, null); contentPane.add(btnExit, null); } //Overridden so we can exit when window is closed protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } }
198
NetBeans
Gambar 16.6 Mengganti Layout Pada Layar Mengganti layout layar dengan meng-click kanan pada layar kemudian pilih set Layout Null Layout.
199
/* * frmTesting.java * * Created on July 14, 2006, 3:11 AM */ package testing; /** * * @author */
windu
200
public class frmTesting extends javax.swing.JFrame { /** Creates new form frmTesting */ public frmTesting() { initComponents(); cmbKampus.addItem("Cempaka Mas"); cmbKampus.addItem("Cileduk"); cmbKampus.addItem("Roxy"); cmbKampus.addItem("Salemba"); cmbKampus.setSelectedIndex(1); cmbKampus.setMaximumRowCount(3); } /** This method is called from within * the constructor to * initialize the form. * WARNING: Do NOT modify this code. * The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" // desc=" Generated Code "> private void initComponents() { jList1 = new javax.swing.JList(); btnJurusan = new javax.swing.ButtonGroup(); lblNim = new javax.swing.JLabel(); txtNim = new javax.swing.JTextField(); lblNama = new javax.swing.JLabel(); txtNama = new javax.swing.JTextField(); lblSertifikat = new javax.swing.JLabel(); chSD = new javax.swing.JCheckBox(); chSMP = new javax.swing.JCheckBox(); chSMA = new javax.swing.JCheckBox(); lblJurusan = new javax.swing.JLabel(); rdTI = new javax.swing.JRadioButton(); rdMI = new javax.swing.JRadioButton(); rdAK = new javax.swing.JRadioButton(); rdTK = new javax.swing.JRadioButton(); jLabel1 = new javax.swing.JLabel(); cmbKampus = new javax.swing.JComboBox(); btnSave = new javax.swing.JButton(); jButton1 = new javax.swing.JButton(); getContentPane().setLayout(null); setDefaultCloseOperation( javax.swing.WindowConstants.EXIT_ON_CLOSE ); lblNim.setText("Nim"); getContentPane().add(lblNim); lblNim.setBounds(50, 20, 50, 20); getContentPane().add(txtNim); txtNim.setBounds(110, 20, 100, 19); lblNama.setText("Nama"); getContentPane().add(lblNama);
201
lblNama.setBounds(50, 50, 27, 14); getContentPane().add(txtNama); txtNama.setBounds(110, 50, 190, 19); lblSertifikat.setText("Sertifikat"); getContentPane().add(lblSertifikat); lblSertifikat.setBounds(50, 80, 60, 20); chSD.setText("SD"); getContentPane().add(chSD); chSD.setBounds(110, 80, 50, 23); chSMP.setText("SMP"); getContentPane().add(chSMP); chSMP.setBounds(170, 80, 60, 23); chSMA.setText("SMA"); getContentPane().add(chSMA); chSMA.setBounds(230, 80, 47, 23); lblJurusan.setText("Jurusan"); getContentPane().add(lblJurusan); lblJurusan.setBounds(50, 110, 50, 14); btnJurusan.add(rdTI); rdTI.setSelected(true); rdTI.setLabel("TI"); getContentPane().add(rdTI); rdTI.setBounds(110, 110, 40, 23); btnJurusan.add(rdMI); rdMI.setText("MI"); getContentPane().add(rdMI); rdMI.setBounds(160, 110, 50, 23); btnJurusan.add(rdAK); rdAK.setText("AK"); getContentPane().add(rdAK); rdAK.setBounds(210, 110, 50, 23); btnJurusan.add(rdTK); rdTK.setText("TK"); getContentPane().add(rdTK); rdTK.setBounds(260, 110, 37, 23); jLabel1.setText("Kampus"); getContentPane().add(jLabel1); jLabel1.setBounds(50, 140, 50, 14); getContentPane().add(cmbKampus); cmbKampus.setBounds(110, 140, 190, 22); btnSave.setMnemonic('S'); btnSave.setLabel("Simpan"); getContentPane().add(btnSave); btnSave.setBounds(50, 180, 67, 23);
202
jButton1.setMnemonic('K'); jButton1.setText("Keluar"); getContentPane().add(jButton1); jButton1.setBounds(230, 180, 70, 23); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds( (screenSize.width-372)/2, (screenSize.height-263)/2, 372, 263); } // </editor-fold> /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new frmTesting().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.ButtonGroup btnJurusan; private javax.swing.JButton btnSave; private javax.swing.JCheckBox chSD; private javax.swing.JCheckBox chSMA; private javax.swing.JCheckBox chSMP; private javax.swing.JComboBox cmbKampus; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JList jList1; private javax.swing.JLabel lblJurusan; private javax.swing.JLabel lblNama; private javax.swing.JLabel lblNim; private javax.swing.JLabel lblSertifikat; private javax.swing.JRadioButton rdAK; private javax.swing.JRadioButton rdMI; private javax.swing.JRadioButton rdTI; private javax.swing.JRadioButton rdTK; private javax.swing.JTextField txtNama; private javax.swing.JTextField txtNim; // End of variables declaration }
203
Jawaban : Ya, diperbolehkan. Penggunaan perintah try {} dapat ditutup minimal dengan catch atau finally.
2. Apakah penulisan program dibawah ini diperbolehkan dan tetap mendapatkan pesan kesalahan?
catch (Exception e) { }
Jawaban : Penggunaan Exception dapat menanganani atau menangkap keseluruhan pesan kesalahan. Tetap tidak disarankan karena pesan aslinya tidak terbaca dan tidak efesien. 3. Apakah akan terjadi kesalahan pada program dibawah ini? Akankah program dapat terkompilasi dengan baik?
try { } catch (Exception e) { } catch (ArithmeticException a) { }
Pada program penanganan pertama (Exception e) sudah menangkap berbagai macam pesan kesalahan, sehingga penganan kedua (ArithmeticException a) tidak pernah tercapai. Program tidak akan terkompilasi.
204
Jawaban Latihan 11 1 (satu) detik = 1000 milidetik 1 Hari = 1000 milidetik X 60 detik X 60 menit X 24 Jam Tahun aktif = 1900 + getDate()
Keseluruhan program :
import import import import java.awt.*; java.awt.event.*; javax.swing.*; java.util.*;
class Frame1 extends JFrame { JPanel contentPane; JLabel jLabel1 = new JLabel(); Frame1() { super("Universitas Budi Luhur"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); contentPane = (JPanel) this.getContentPane(); jLabel1.setFont(new Font("Dialog", 1, 18)); jLabel1.setForeground(Color.black); jLabel1.setHorizontalAlignment( SwingConstants.CENTER ); jLabel1.setText("Jam"); jLabel1.setBounds(new Rectangle(29, 52, 262, 35)); contentPane.setLayout(null); this.setSize(new Dimension(336, 155)); Action stopwatch = new AbstractAction(){ public void actionPerformed(ActionEvent e) { jLabel1.setText(TampilTanggal(0, "T") ); } };
javax.swing.Timer stp = new javax.swing.Timer(1000, stopwatch); stp.start(); contentPane.add(jLabel1, null); show(); } private String TampilTanggal(int lday, String tipe) { String sTanggal; long lTanggal = new Date().getTime();
205
//86400000 = satuhari ( 60 X 60 X 24 X 1000) lTanggal = lTanggal + lday * 86400000; Date dTanggal = new Date(lTanggal); sTanggal = ( dTanggal.getYear() + 1900 ) + "-" + (dTanggal.getMonth()+ 1) + "-" + dTanggal.getDate(); if (tipe.toUpperCase().equals("T")){ sTanggal = sTanggal + " " + dTanggal.getHours() + ":" + dTanggal.getMinutes() + ":" + dTanggal.getSeconds(); } return (sTanggal); } } public class praktek10 { public static void main(String args[]) { new Frame1(); } }
206
Cara pembacaan
String atxt[] = txtmsg.split("~"); System.out.println(atxt.length); if ( atxt.length == 1){ txtArea.setText(atxt[0]); } else { cmbKategori.setSelectedIndex( Integer.parseInt(atxt[0]) ); cmbDaerah.setSelectedIndex( Integer.parseInt(atxt[1]) ); }
Program keseluruhan :
//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 JMenuBar bar = new JMenuBar(); private JMenu mnFile = new JMenu("File"); private JMenuItem mniFileBaru = new JMenuItem( "File Baru" ); private JMenuItem mniFileBuka = new JMenuItem( "Buka File" ); private JMenuItem mniFileSimpan = new JMenuItem( "Simpan File" ); private JMenuItem mniFileKeluar = new JMenuItem( "Keluar"
207
); 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" }; 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;
208
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); 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) { }
209
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++) {
210
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]); } 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 (
211
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) System.exit(0); } } }
212
public class praktek52{ public static void main(String args[]){ new frame52(); } }
213
BAB XVII
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 masukkan dan kritik dari para pengguna maupun dari kalangan praktisi.
214
BAB XVIII
DAFTAR PUSTAKA
http://www.sun.com http://java.sun.com tjava, pdf edition http://www.mysql.com http://www.java2s.com/ExampleCode http://www.jfree.org http://www.pentaho.org Tuntunan Pemrograman Java Jilid2, Rangsang Purnama Diktat Bahasa Pemrograman 3 Java, Spits Harco Leslie
215
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 Database Administrator, 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, Perancangan Sistem Aplikasi 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. Begitu pula 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. Access, 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 windu_gata@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 ---
216