PBO LANJUT TUTORIAL JPA & SWING MENGGUNAKAN NETBEANS
Niko Ibrahim, MIT
Persiapan Install NetBeans 6
1.
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
toRemove = new ArrayList(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