PBO LANJUT TUTORIAL JPA & SWING MENGGUNAKAN NETBEANS Niko Ibrahim, MIT
Persiapan 1. Install NetBeans 6 Tutorial ini dibuat dengan menggunakan NetBeans Silahkan install terlebih dahulu di komputer yang Anda gunakan. 2. Nama Project: JPA_SWING_DEMO 3. Database: MySQL 1. Nama Database: swingerp 2. Username: root 3. Password: (kosong) Estimasi waktu pengerjaan: 90 menit Apabila telah selesai segera tunjukkan untuk diberi point nilai oleh Dosen/Asisten
1a. Buat MySQL Database & Table Nama database: swingerp Username: root Password: (empty) Buatlah 1 tabel berdasarkan model relasional berikut Nama tabel: customer Kolom: idcustomer: varchar(20) namacustomer: varchar(45) alamatcustomer: varchar(45) kotacustomer: varchar(45)
1b. Koneksi Database di NetBeans Pada bagian Services, buat koneksi baru: Klik kanan MySQL Klik New Connection
1c. Isikan URL pada koneksi tsb URL: jdbc:mysql://localhost:3306/swingerp User name: root Password: (kosongkan)
1d. Mengeksekusi SQL command Klik folder Tables untuk melihat tabel yang telah dibuat. Klik kanan folder Tables, lalu pilih Execute Command Ketikan 2 perintah insert berikut dan klik tombol execute insert into customer values ('111','John Doe','Jl. Jakarta 1', 'Jakarta'); insert into customer values ('222','John Smith','Jl. Bandung 1', 'Bandung');
1e. Tambahkan Driver MySQL & TopLink Tambahkan driver.jar MySQL ke dalam Library project. Browse di drive C Nama file (biasanya): mysql-connector-java-5.0.7-bin.jar CARA LAIN: klik Add Library, tambahkan MySQL Driver Tambahkan juga driver TopLink Essentials
2a. Buat Project: Java Application Buat sebuah Java Application baru
2b. Nama project: JPA_SWING_DEMO Uncheck Create Main Class
3a. Buat MDI Application Klik kanan Source Package Pilih New Other
3b. Buat MDI Application Pilih Swing GUI Forms Pilih MDI Aplication Sample Form
3c. Beri nama dan package Class Name: MainWindow Package: jpa_swing
3d. Hasil Berikut Design View dari aplikasi:
4a. Tambahkan Internal Frame Klik Internal Frame pada palette Drag & Drop ke dalam MainWindow Resize (perbesar) ukuran Internal Frame tsb Internal Frame
4b. Ubah Properties dari Internal Frame Pada bagian property, ubah field berikut: closeable true (beri tanda check) defaultcloseoperation HIDE title Data Customer visible false Rename nama variabel internal frame tsb menjadi: customerframe
5a. Tambahkan: Menu Data & Menu Item Customer Klik Menu pada palette. Drag & drop ke sebelah menu Edit Rename menu tersebut: Data Drag & drop sebuah Menu Item kepada menu Data Rename menu item tersebut: Customer Rename juga nama variabel menu item tsb: customermenuitem
5b. Beri Event-Handling kepada Menu Item Klik kanan menu item Customer Pilih Events Action actionperformed Di dalam method actionperformed tsb, ketikkan: customerframe.setvisible(true);
RUN PROGRAM Klik menu Data, pilih Customer
6a. Dekorasi Customer Frame Pada bagian Inspector, double klik customerframe
6b. Tambahkan JTable Drag & drop sebuah JTable ke dalam customerframe Rename JTable: customerjtable
7a. Membuat Entity Class Pada Source Package, klik kanan, pilih NEW Pilih Entity Classes from Database Note: kalau tidak ada pilihannya, cari di bagian Other
7b. Entity Classes Pada Database Connection, pilih: swingerp Pindahkan semua tabel ke window kanan. Klik Next 2x. Klik Finish.
7c. Entity Classes generated NetBeans secara otomatis membuatkan: Entity classes (file java) untuk semua tabel dan relasi yang ada. Persistence unit (file xml) Klik kanan package jpa_swing, klik Compile Package Buka file Customer.java untuk melihat variabel, access methods & annotation-nya yang dibuat secara otomatis oleh NetBeans!
8a. Membuat EntityManager Sekarang Anda akan membuat: EntityManager customerquery ( select b from barang b ) customerlist Anda bisa membuat satu per satu dari palette Tapi, NetBeans dapat membuatkannya secara otomatis untuk Anda dengan cara drag&drop table ke dalam JTable (lihat slide berikutnya)
8b. Drag & Drop table Customer Drag & drop table customer ke dalam customerjtable NetBeans secara otomatis akan membuatkan 3 objek berikut: Rename swingerppuentitymanager menjadi entitymanger Klik kanan setiap objek tsb, pilih property untuk melihat hubungan di antara ketiga objek tersebut!
RUN PROJECT
9a. Tambahkan Dekorasi pada customerinternalframe Tambahkan satu JPanel di bawah customerjtable Tambahkan 4 label & 4 text field Tambahkan 4 button Ubah nama variabel sebagai berikut: JTextField: idtf, namatf, alamattf, kotatf JButton: tambahbutton, hapusbutton, refreshbutton, savebutton dan tutupbutton Ubah property Enable false (uncheck), untuk hapusbutton & savebutton
9b. Hasil Dekorasi Berikut hasil dekorasi customerframe:
10a. Binding JTextField JTable Kita akan lakukan binding setiap JTextField dengan suatu nilai yang ada di JTable. Klik kanan idtf, pilih Bind, pilih text
10b. Bind idtf.text Pilih Binding Source customerjtable Pilih Binding Expression: idcustomer Klik OK Lakukan hal yang sama untuk: namatf, alamattf, dan kotatf
RUN PROJECT Run project Pilihlah baris pada tabel, sambil memperhatikan perubahan nilai pada textfield. BINDING
11. Membuat List menjadi Observable Pada menu Inspector, pilih objek customerlist Pada property customerlist, beri tanda check pada field Observable Dengan men-set Observable, data (list) & view (cell JTable) akan dapat otomatis bertambah secara bersamaan.
12a. Tambahkan import Tambahkan dua perintah import berikut: import javax.swing.event.listselectionevent; import javax.swing.event.listselectionlistener;
12b. Customize Code: consctructor Editlah custructor MainWindow() sbb: public MainWindow() { initcomponents(); this.setlocationrelativeto(null); TableSelectionListener listener = new TableSelectionListener(); customerjtable.getselectionmodel().addlistselectionlistener(listener); entitymanager.gettransaction().begin(); }
12c. Tambahkan class TableSelectionListner Tambahkan kode berikut setelah constructor (di luar) tadi: private class TableSelectionListener implements ListSelectionListener { public void valuechanged(listselectionevent e) { if (e.getsource() == customerjtable.getselectionmodel()) { boolean enabled = (customerjtable.getselectedrow()!= -1); hapusbutton.setenabled(enabled); savebutton.setenabled(enabled); } } }
12d. Tambahkan method tambahcustomerbaru Tambahkan kode berikut setelah class (12c) tadi: private void tambahcustomerbaru() { Customer c = new Customer(); entitymanager.persist(c); customerlist.add(c); //System.out.println(customerList.size()); int row = customerlist.size() - 1; } customerjtable.setrowselectioninterval(row, row); customerjtable.scrollrecttovisible(customerjtable.getcellrect(row, 0, true)); savebutton.setenabled(true);
Event-Handling tambahbutton hapusbutton refreshbutton savebutton tutupbutton
13a. Beri event untuk tambahbutton Ketikan kode berikut di dalam method tambahbuttonactionperformed : tambahcustomerbaru();
13b. Event untuk hapusbutton int[] selected = customerjtable.getselectedrows(); List<Customer> toremove = new ArrayList<Customer>(selected.length); for (int idx = 0; idx < selected.length; idx++) { Customer c = customerlist.get(customerjtable.convertrowindextomodel(selected[idx])); toremove.add(c); entitymanager.remove(c); } customerlist.removeall(toremove); savebutton.setenabled(true); Note: tambahkan import untuk List dan ArrayList
13c. Event untuk refreshbutton entitymanager.gettransaction().rollback(); entitymanager.gettransaction().begin(); customerlist.clear(); customerlist.addall(customerquery.getresultlist());
13d. Event untuk savebutton try { entitymanager.gettransaction().commit(); // Akan error kalau ID Customer tidak diisi savebutton.setenabled(false); } catch (java.lang.exception e) { // Kalau ID Customer tidak diisi, maka akan masuk ke sini: System.out.println("ERRORNYA ADALAH:"); System.out.println(e.getMessage()); System.out.println("Akhir pesan eror"); // Sekarang, kita lanjutkan penambahan customer yang diinginkan: customerlist.clear(); customerlist.addall(customerquery.getresultlist()); tambahcustomerbaru(); } finally { entitymanager.gettransaction().begin(); }
13e. Event untuk tutupbutton customerframe.setvisible(false);
Run Project Program pengolahan Data Customer telah selesai. Silahkan menambah atau menghapus data pada tabel. Tekan tombol save untuk melakukan commit. Selamat Mengerjakan! Niko Ibrahim, MIT