PBO LANJUT
TUTORIAL JPA & SWING
MENGGUNAKAN NETBEANS
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
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
1c. Isikan URL pada koneksi tsb
URL: jdbc:mysql://localhost:3306/swingerp User name: root
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”
2a. Buat Project: Java Application
2b. Nama project: JPA_SWING_DEMO
3a. Buat MDI Application
Klik kanan “Source Package”
Pilih New
Other…
3b. Buat MDI Application
Pilih “Swing GUI Forms”
3c. Beri nama dan package
Class Name: MainWindow Package: jpa_swing
3d. Hasil
4a. Tambahkan Internal Frame
Klik “Internal Frame” pada palette
Drag & Drop ke dalam MainWindow
Resize (perbesar) ukuran “Internal Frame” tsb
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:
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”
5b. Beri Event-Handling kepada Menu Item
Klik kanan menu item “Customer”
Pilih Events
Action
actionPerformed
Di dalam method actionPerformed tsb, ketikkan:
RUN PROGRAM
6a. Dekorasi Customer Frame
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
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
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
9b. Hasil Dekorasi
10a. Binding JTextField
JTable
Kita akan lakukan binding setiap JTextField dengan suatu nilai
yang ada di JTable.
10b. Bind “idTF.text”
Pilih Binding Source “customerJTable” Pilih Binding Expression: “idCustomer”
Klik OK
RUN PROJECT
Run project
Pilihlah baris pada tabel, sambil memperhatikan perubahan
nilai pada textfield.
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”:
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);
13c. Event untuk
refreshButton
entityManager.getTransaction().rollback(); entityManager.getTransaction().begin(); customerList.clear();
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
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