자바 JTable 과 Oracle 을 이용한 페이징(Paging) 구현 예제
오라클 데이터베이스에 포함되어 있는 EMP 테이블과 Java의 JTable을 연동하여 페이지 네비게이션(Page Navigation)기능을 구현해 봤습니다.
테스트환경
- JDK 1.7
- Oracle 11g XE
- NetBeans 8.0
- Windows 7
Screen Shot
EmpJTableFrame.java
package org.kdea.java;
import java.awt.event.*;
import javax.swing.*;
public class EmpJTableFrame extends javax.swing.JFrame {
private JTable table;
private EmpTableModel model;
JScrollPane scrollPane;
public EmpJTableFrame()
{
initComponents();
setTitle("JTable-Oracle Paging Example");
model = new EmpTableModel();
table = new JTable(model);
table.setFillsViewportHeight(true);
EmpTableModelHandler modelHandler = new EmpTableModelHandler();
table.getModel().addTableModelListener(modelHandler);
// 테이블 셀을 클릭하면 호출되는 이벤트 핸들러
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int column = table.getSelectedColumn();
int row = table.getSelectedRow();
String cellData = table.getModel().getValueAt(row, column).toString();
System.out.printf("%d, %d, %s\n", row, column, cellData);
}
});
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setBounds(5, 5, 310, 180);
getContentPane().add(scrollPane);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButtonNextPage = new javax.swing.JButton();
jButtonPrevPage = new javax.swing.JButton();
jLabelCurPage = new javax.swing.JLabel();
jTextFieldRowsPerPage = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButtonNextPage.setText("NEXT >>");
jButtonNextPage.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonNextPageActionPerformed(evt);
}
});
jButtonPrevPage.setText("<< PREV");
jButtonPrevPage.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonPrevPageActionPerformed(evt);
}
});
.............................................
.........................................
...................................
pack();
}// </editor-fold>
int page;
private void jButtonNextPageActionPerformed(java.awt.event.ActionEvent evt) {
EmpDAO dao = new EmpDAO();
int rowsPerPage = Integer.parseInt(jTextFieldRowsPerPage.getText());
java.util.List<EmpVO> list = dao.getEmpPage(rowsPerPage, ++page);
int ttPages = dao.getTotalRows()/rowsPerPage;
ttPages += dao.getTotalRows()%rowsPerPage==0? 0 : 1;
if(page>ttPages) {
page = ttPages;
return;
}
model = new EmpTableModel();
model.setEmpList(list);
table.setModel(model);
table.repaint();
String pgDisplay = String.format(" %d / %d ", page, ttPages);
jLabelCurPage.setText(pgDisplay);
}
private void jButtonPrevPageActionPerformed(java.awt.event.ActionEvent evt) {
EmpDAO dao = new EmpDAO();
int rowsPerPage = Integer.parseInt(jTextFieldRowsPerPage.getText());
java.util.List<EmpVO> list = dao.getEmpPage(rowsPerPage, --page);
int ttPages = dao.getTotalRows()/rowsPerPage;
ttPages += dao.getTotalRows()%rowsPerPage==0? 0 : 1;
if(page<1) {
page = 1;
return;
}
model = new EmpTableModel();
model.setEmpList(list);
table.setModel(model);
table.repaint();
table.repaint();
String pgDisplay = String.format(" %d / %d ", page, ttPages);
jLabelCurPage.setText(pgDisplay);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
...................
...............
.....................
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new EmpJTableFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButtonNextPage;
private javax.swing.JButton jButtonPrevPage;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabelCurPage;
private javax.swing.JTextField jTextFieldRowsPerPage;
// End of variables declaration
}