How to provide pagination support to a JTable in Swing?

后端 未结 5 552
遇见更好的自我
遇见更好的自我 2020-11-27 06:51

I have created one GUI in Swing Java in which I have used JTable.Now I want to display next page information into it by using pagination. How should I do that ?

5条回答
  •  佛祖请我去吃肉
    2020-11-27 07:45

    You can try with 2 query, first query is to count total rows in DB and second query is for the real data :) And for the UI side, you can try like this:

    
    public class MainForm extends javax.swing.JFrame {
       private void initDefaultValue() {
            rowsPerPage = Integer.valueOf(cmbPageSize.getSelectedItem().toString());
            totalRows = Main.getTablePagingService().countComments();
            Double dblTotPage = Math.ceil(totalRows.doubleValue()/rowsPerPage.doubleValue());
            totalPage = dblTotPage.intValue();
            if (pageNumber == 1) {
                btnFirst.setEnabled(false);
                btnPrevious.setEnabled(false);
            } else {
                btnFirst.setEnabled(true);
                btnPrevious.setEnabled(true);
            }
            if (pageNumber.equals(totalPage)) {
                btnNext.setEnabled(false);
                btnLast.setEnabled(false);
            } else {
                btnNext.setEnabled(true);
                btnLast.setEnabled(true);
            }
            txtPageNumber.setText(String.valueOf(pageNumber));
            lblPageOf.setText(" of " + totalPage + " ");
            lblTotalRecord.setText("Total Record " + totalRows + " rows.");
            List wPComments = Main.getTablePagingService().findAllComment(pageNumber, rowsPerPage);
            jTable1.setModel(new CommentTableModel(wPComments));
            autoResizeColumn(jTable1);
        }    
        private void btnFirstActionPerformed(ActionEvent evt) {
            pageNumber = 1; initDefaultValue();
        }
        private void btnPreviousActionPerformed(ActionEvent evt) {
            if (pageNumber > 1) {
                pageNumber -= 1; initDefaultValue();
            }
        }
        private void btnNextActionPerformed(ActionEvent evt) {
            if (pageNumber 
    

    And in service layer, you just need use limit function like this :

    
    public List findAllComment(Integer pageNumber, Integer rowsPerPage) {
            try {
                List listWP = new ArrayList();
                preparedFindAll.setInt(1, (rowsPerPage*(pageNumber-1)));
                preparedFindAll.setInt(2, rowsPerPage);
                ResultSet rs = preparedFindAll.executeQuery();
                while (rs.next()) {
                    WPComment comment = new WPComment();
                    comment.setCommentID(rs.getInt("comment_ID"));
                    comment.setCommentAuthor(rs.getString("comment_author"));
                    comment.setCommentDate(rs.getDate("comment_date"));
                    comment.setCommentContent(rs.getString("comment_content"));
                    listWP.add(comment);
                }
                return listWP;
            } catch (SQLException ex) {
                Logger.getLogger(TablePagingServiceJDBC.class.getName()).log(Level.SEVERE, null, ex);
            }
    
            return null;
        }
    
        public Integer countComments() {
            try {
                Integer totalRows = 0;
                ResultSet rs = preparedCount.executeQuery();
                while (rs.next()) {
                    totalRows = rs.getInt("count(*)");
                }
                return totalRows;
            } catch (SQLException ex) {
                Logger.getLogger(TablePagingServiceJDBC.class.getName()).log(Level.SEVERE, null, ex);
            }
    
            return 0;
        }
    
    

    Or you can fork me on github at Project Page Table Paging on Swing :)

提交回复
热议问题