Anda di halaman 1dari 43

PBO LANJUT TUTORIAL JPA & SWING MENGGUNAKAN NETBEANS 6

Niko Ibrahim, MIT

Persiapan
1.

Install NetBeans 6

Tutorial ini dibuat dengan menggunakan NetBeans Silahkan install terlebih dahulu di komputer yang Anda gunakan.

2.
3. 1. 2. 3.

Nama Project: JPA_SWING_DEMO


Database: MySQL
Nama Database: swingerp Username: root 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 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 & EclipseLink

Tambahkan driver .jar MySQL ke dalam Library project.

Pilih

Add Library Pilih MySQL JDBC Driver

Add library sekali lagi:


Pilih

driver EclipseLink (JPA 2.0)

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 6 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:


initComponents();

public MainWindow() {

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

Anda mungkin juga menyukai