首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Swing 實現 JTable 分頁顯示數據完整解決方案

     編輯:Java 相關知識

前言

在 Java Swing 桌面應用開發中,將大量數據分頁顯示在 JTable 中是常見需求。本文將詳細介紹一種基於內存分頁的實現方案,包含完整的代碼示例與核心邏輯解析,幫助開發者快速掌握 JTable 數據分頁技術。

核心設計思路

採用「大集合+小集合」雙層結構:啟動時一次性查詢所有數據存入大集合,根據當前頁碼從大集合切片數據到小集合,最後綁定至 JTable 顯示。此方案適合數據量中等、不頻繁變動的場景。

分頁控制器實現

import java.util.ArrayList;
import java.util.List;
import com.yu.entity.User;

public class PageController {
    private List<User> bigList = new ArrayList<>();      // 全量數據
    private List<User> smallList = new ArrayList<>;     // 當前頁數據
    private static int curentPageIndex = 1;               // 當前頁碼
    private int countPerpage = 10;                        // 每頁條數
    private int pageCount;                                // 總頁數
    private int recordCount;                              // 總記錄數

    // 初始化塊:類加載時自動查詢數據並計算總頁數
    {
        this.bigList = new Utils().query();               // 查詢數據庫
        this.recordCount = bigList.size();
        this.pageCount = (recordCount % countPerpage == 0) 
            ? recordCount / countPerpage 
            : recordCount / countPerpage + 1;
    }

    public PageController() {}
    public PageController(int curentPageIndex) {
        this.curentPageIndex = curentPageIndex;
    }

    // 獲取當前頁數據
    public List<User> setCurentPageIndex() { return select(); }

    // 下一頁
    public List<User> nextPage() {
        if (curentPageIndex < pageCount) curentPageIndex++;
        return select();
    }

    // 上一頁
    public List<User> previousPage() {
        if (curentPageIndex > 1) curentPageIndex--;
        return select();
    }

    // 核心切片邏輯
    private List<User> select() {
        smallList.clear();                                // 關鍵:每次查詢前清空
        int start = (curentPageIndex - 1) * countPerpage;
        int end = Math.min(curentPageIndex * countPerpage, recordCount);
        for (int i = start; i < end; i++) {
            smallList.add(bigList.get(i));
        }
        return smallList;
    }
}

Swing 界面調用示例

// 上一頁按鈕事件
private void jButton8ActionPerformed(ActionEvent evt) {
    List<User> list = new PageController().previousPage();
    viewAll(list);
}

// 首頁按鈕事件
private void jButton10ActionPerformed(ActionEvent evt) {
    List<User> list = new PageController(1).setCurentPageIndex();
    viewAll(list);
}

// 下一頁按鈕事件
private void jButton9ActionPerformed(ActionEvent evt) {
    List<User> list = new PageController().nextPage();
    viewAll(list);
}

// 綁定數據到 JTable
public void viewAll(List<User> list) {
    Object[][] data = new Object[list.size()][3];
    for (int i = 0; i < list.size(); i++) {
        data[i][0] = i + 1;                    // 行號
        data[i][1] = list.get(i).getUserid();  // 工號
        data[i][2] = list.get(i).getTruename(); // 姓名
    }
    jTable1.setModel(new DefaultTableModel(data, 
        new String[]{"行號", "工號", "姓名"}));
}

關鍵優化點

  • smallList.clear():每次分頁查詢前必須清空,否則數據會疊加
  • 邊界保護:Math.min 防止最後一頁數據不足時越界
  • 靜態頁碼:curentPageIndex 為 static 確保翻頁狀態保持

適用場景與擴展建議

本方案適合數據量 < 10 萬條的中小型應用。大數據場景建議改為:

  1. 數據庫級分頁
  2. 引入 PageHelper 等分頁插件
  3. 異步加載 + 虛擬滾動
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved