Peralatan yang diperlukan untuk tutorial ini :
- Java Development Kit 1.6
- NetBeans IDE 6.8
- EclipseLink 2 (Terbundle dalam NetBeans IDE 6.8)
- MySQL Database Server
Jika seluruh peralatan terlah tersedia, berarti Anda dapat mengikuti tutorial ini π
Membuat Project Java Application
JTable merupakan komponen antar muka tabel / grid yang terdapat pada Java Swing. Untuk membuat aplikasi berbasis antar muka, kita harus membuat project jenis java application pada netbeans, caranya : File -> New Project, setelah itu pada bagian Categories pilih Java dan pada bagian Types pilih Java Application :
Memuat Persistence Unit
Agar proyek yang Anda buat mendukung fitur Java Persistence API, maka Anda harus membuat Persistence Unit. Untuk membuat persistence unit, caranya lewat menu File -> New File, lalu pada bagian Categories pilih Persistence dan pada bagian Types pilih Persistence Unit. Setelah itu klik Next :
Jangan lupa untuk membuat database jika memang database untuk proyek ini belum ada, sehingga pada combo box Database Connection tinggal buat koneksi baru :
Membuat Entity
Dalam sebuah proyek yang menggunakan JPA, tidak ada yang namanya Tabel. seluruh Tabel harus ditransformasikan menjadi Entitas, atau disebut Entity. Misal pada proyek ini kita buat entitas yang sederhana, yaitu entitas data, yang hanya menamping ID dan DATA. Untuk membaut entitas, caranya lewat menu File -> New File, setelah itu pada bagian Categories pilih Persistence, dan pada bagian Types pilih Entity Class. Setelah itu klik Next :
Isi dari entitas Data adalah seperti dibawah ini :
package khannedy.pagination.helper;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/**
*
* @author echo
*/
@Entity
@Table(name = "datas")
public class Data implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String data;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Data)) {
return false;
}
Data other = (Data) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "khannedy.pagination.helper.Data[id=" + id + "]";
}
}
Membuat TableModel
Dikarenakan kita menggunakan JTable, jadi harus membuat TableModel. TableModel ini digunakan untuk menampung data pada JTable yang memuat data-data enitas Data. Isinya seperti ini :
package khannedy.pagination.helper;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.swing.table.AbstractTableModel;
/**
*
* @author echo
*/
public class TableModelData extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private List datas = new ArrayList();
public void setData(Collection collection) {
datas.clear();
datas.addAll(collection);
fireTableDataChanged();
}
public int getRowCount() {
return datas.size();
}
public int getColumnCount() {
return 2;
}
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return datas.get(rowIndex).getId();
case 1:
return datas.get(rowIndex).getData();
default:
return null;
}
}
@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return "Id";
case 1:
return "Data";
default:
return null;
}
}
}
Membuat Form
Setelah itu buat Form untuk tampilan antar muka aplikasinya. Untuk membuat Form dalam NetBeans caranya lewat menu File -> New File, setelah itu pada bagian Categories pilih Swing GUI Form dan pada bagian Types pilih JFrame Form. Setelah itu beri nama Form nya, misal Form :
Misal saya membuat tampilan form seperti pada gambar dibawah ini :
Untuk nama-nama komponennya anda bisa melihatnya pada gambar dibawah ini :
Membuat Pagination
Setelah selesai membuat Form, saatnya membuat Pagination. Ini merupakan utilitas yang dapat kita gunakan untuk mempermudah penghalamanan tabel yang akan digunakan. Caranya buat sebuah class java bernama Pagination, isinya seperti pada kode dibawah ini :
package khannedy.pagination.helper;
/**
*
* @author echo
*/
public class Pagination {
private int pageSize;
private int totalItem;
private int currentPage;
public Pagination(int pageSize, int totalItem) {
this.pageSize = pageSize;
this.totalItem = totalItem;
}
public int getPageSize() {
return pageSize;
}
public int getTotalItem() {
return totalItem;
}
public int getTotalPage() {
return (totalItem / pageSize) - 1;
}
public int getCurrentPage() {
return currentPage;
}
public int getCurrentItem() {
return currentPage * pageSize;
}
public void nextPage() {
currentPage++;
}
public void prevPage() {
currentPage--;
}
public void firstPage() {
currentPage = 0;
}
public void lastPage() {
currentPage = getTotalPage();
}
public boolean isHasNextPage() {
return currentPage < getTotalPage();
}
public boolean isHasPrevPage() {
return currentPage != 0;
}
}
Membuat PersistenceHelper
Setelah membuat pagination, sekarang saatnya membuat PersistenceHelper, kelas ini berisikan utilitas yang digunakan untuk mendapatkan EntityManagerFactory-nya JPA 2. Kelas ini bisa juga disebut kelas Database Creator π
package khannedy.pagination.helper;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
/**
*
* @author echo
*/
public class PersistenceHelper {
private static final EntityManagerFactory factory;
static {
factory = Persistence.createEntityManagerFactory("paginationPU");
}
public static EntityManagerFactory getFactory() {
return factory;
}
}
Menambahkan Pagination ke Form
Setelah membuat kelas Pagination saatnya membuat Form yang mendukung fotur Pagination. Pertama sebelum menambah fitur pagination, kita harus menambahkan TableModel terlebih dahulu ke JTablenya, sehingga isi konstruktur Form nya seperti bawah ini :
public class Form extends javax.swing.JFrame {
private static final long serialVersionUID = 1L;
private TableModelData tableModel;
/** Creates new form Form */
public Form() {
initComponents();
tableModel = new TableModelData();
tableData.setModel(tableModel);
}
Setelah menambahkan TableModel, saatnya meload data dari Persistence ke TableModel, namun syaratnya harus menggunakan pagination, jadi kodenya seperti dibawah ini :
public class Form extends javax.swing.JFrame {
private static final long serialVersionUID = 1L;
private TableModelData tableModel;
private Pagination pagination;
/** Creates new form Form */
public Form() {
initComponents();
tableModel = new TableModelData();
tableData.setModel(tableModel);
// deklarasikan Pagination
initPagination();
// refresh data
refresh();
}
public void initPagination() {
EntityManager manager = PersistenceHelper.getFactory().createEntityManager();
try {
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery query = builder.createQuery(Long.class);
Root data = query.from(Data.class);
query.select(builder.count(data));
int count = manager.createQuery(query).getSingleResult().intValue();
pagination = new Pagination(100, count);
} finally {
manager.close();
}
}
public void refresh() {
EntityManager manager = PersistenceHelper.getFactory().createEntityManager();
try {
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery query = builder.createQuery(Data.class);
Root data = query.from(Data.class);
query.select(data);
List list = manager.createQuery(query).
setFirstResult(pagination.getCurrentItem()).
setMaxResults(pagination.getPageSize()).getResultList();
tableModel.setData(list);
buttonNext.setEnabled(pagination.isHasNextPage());
buttonPrev.setEnabled(pagination.isHasPrevPage());
} finally {
manager.close();
}
}
Setelah itu tambahkan aksi tombolFirst, caranya klik kanan tombolnya lalu pilih Events -> Action -> actionPerformed :
private void buttonFirstActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
pagination.firstPage();
refresh();
}
Untuk aksi buttonPrev :
private void buttonPrevActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
pagination.prevPage();
refresh();
}
Untuk aksi buttonNext :
private void buttonNextActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
pagination.nextPage();
refresh();
}
Untuk aksi buttonLast :
private void buttonLastActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
pagination.lastPage();
refresh();
}
Dan jika selesai π
jika dijalankan….
wew kok error π¦
run:
[EL Info]: 2010-04-09 00:30:07.939--ServerSession(1680250)--EclipseLink, version: Eclipse Persistence Services - 2.0.1.v20100213-r6600
[EL Severe]: 2010-04-09 00:30:07.964--ServerSession(1680250)--Local Exception Stack:
Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error. Class [com.mysql.jdbc.Driver] not found.
Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
at org.eclipse.persistence.exceptions.DatabaseException.configurationErrorClassNotFound(DatabaseException.java:82)
at org.eclipse.persistence.sessions.DefaultConnector.loadDriverClass(DefaultConnector.java:267)
Exception Description: Configuration error. Class [com.mysql.jdbc.Driver] not found.
at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:85)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:397)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:195)
at khannedy.pagination.helper.Form.initPagination(Form.java:43)
at khannedy.pagination.helper.Form.(Form.java:39)
at khannedy.pagination.helper.Form$5.run(Form.java:200)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error. Class [com.mysql.jdbc.Driver] not found.
at org.eclipse.persistence.exceptions.DatabaseException.configurationErrorClassNotFound(DatabaseException.java:82)
at org.eclipse.persistence.sessions.DefaultConnector.loadDriverClass(DefaultConnector.java:267)
at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:85)
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:228)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:369)
... 14 more
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:228)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:369)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:195)
at khannedy.pagination.helper.Form.initPagination(Form.java:43)
at khannedy.pagination.helper.Form.(Form.java:39)
at khannedy.pagination.helper.Form$5.run(Form.java:200)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
BUILD STOPPED (total time: 17 seconds)
Tenang, tenang π Itu cuma Driver MySQL nya belum dimasukkan ke Project. TInggal dimasukkan aja ke project… π Dan sekarang :
Hmm…. Lumayan..
Dah malam ah, dah ngantuk, tar gak bisa bangun subuh lagi π
See You!!!
Download Source Code
Silahkan download sourcecode tutorial ini –> disini <–
-6.520104
107.638648