Java Swing 分页列表
在开发桌面应用程序时,我们经常需要展示大量的数据,并且需要将这些数据分成多个页面进行展示。Java Swing 提供了一种简单而强大的分页列表组件,可以满足我们的需求。本文将介绍如何使用 Java Swing 实现一个分页列表,并提供代码示例。
什么是分页列表
分页列表是一种常见的数据展示方式,将大量的数据分成若干个页展示,每页显示固定数量的数据。通过分页列表,我们可以更好地组织和管理数据,使用户能够方便地浏览和操作大量的数据。
Java Swing 中的分页列表组件
Java Swing 提供了一个名为 JTable
的组件,可以方便地实现分页列表。JTable
是一个表格组件,可以展示和编辑数据。我们可以通过设置 JTable
的数据模型和分页器来实现分页列表的功能。
分页模型
在实现分页列表之前,我们需要一个分页模型,用来管理数据的分页和展示。下面是一个简单的分页模型的代码示例:
public class PaginationModel {
private List<Object> data; // 数据列表
private int pageSize; // 每页显示的数据数量
private int currentPage; // 当前页码
public PaginationModel(List<Object> data, int pageSize) {
this.data = data;
this.pageSize = pageSize;
this.currentPage = 1;
}
// 获取当前页的数据列表
public List<Object> getPageData() {
int fromIndex = (currentPage - 1) * pageSize;
int toIndex = Math.min(currentPage * pageSize, data.size());
return data.subList(fromIndex, toIndex);
}
// 获取总页数
public int getPageCount() {
return (int) Math.ceil((double) data.size() / pageSize);
}
// 切换到下一页
public void nextPage() {
if (currentPage < getPageCount()) {
currentPage++;
}
}
// 切换到上一页
public void prevPage() {
if (currentPage > 1) {
currentPage--;
}
}
// 切换到指定页
public void gotoPage(int page) {
if (page >= 1 && page <= getPageCount()) {
currentPage = page;
}
}
}
分页列表
有了分页模型后,我们可以将其与 JTable
组件结合使用,实现一个分页列表。下面是一个简单的分页列表的代码示例:
public class PaginationTable extends JTable {
private PaginationModel model;
private int pageSize;
private int currentPage;
public PaginationTable(PaginationModel model, int pageSize) {
super();
this.model = model;
this.pageSize = pageSize;
this.currentPage = 1;
setModel(new AbstractTableModel() {
@Override
public int getRowCount() {
return Math.min(pageSize, model.getPageCount() - (currentPage - 1) * pageSize);
}
@Override
public int getColumnCount() {
return model.getColumnCount();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return model.getPageData().get((currentPage - 1) * pageSize + rowIndex);
}
});
}
// 切换到下一页
public void nextPage() {
model.nextPage();
currentPage++;
((AbstractTableModel) getModel()).fireTableDataChanged();
}
// 切换到上一页
public void prevPage() {
model.prevPage();
currentPage--;
((AbstractTableModel) getModel()).fireTableDataChanged();
}
// 切换到指定页
public void gotoPage(int page) {
model.gotoPage(page);
currentPage = page;
((AbstractTableModel) getModel()).fireTableDataChanged();
}
}
使用分页列表
使用分页列表非常简单,只需要创建一个 JFrame
,将 PaginationTable
添加到其中,并设置数据模型和分页器。下面是一个使用分页列表的代码示例:
public class MainFrame extends JFrame {
private PaginationTable table;
public MainFrame() {
super("分页列表示例");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建数据列表
List<Object> data = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
data.add("数据 " + i);
}
// 创建分页模型和分页列表
PaginationModel model = new PaginationModel(data, 10);
table = new Pagination