分页工具类

写的一个分页工具类,如果有问题的话,请指正,谢谢

import java.util.ArrayList;
import java.util.List;

/**
 * 分页工具类
 * 
 * @author user
 * 
 */
public class Pager {
	private static final int DEFAULT_PAGESIZE = 10;// 默认分页的每页显示的条数
	private static final int DEFAULT_PAGENUM = 5;// 默显示页码的数量
	private int pagerIndex;// 当前的页码
	private int pagerCount;// 总页码
	private int pageSize;// 每页显示的条数
	private int recordCount;// 总记录数
	private int offsetNum;// 显示页码数量的偏移量
	private int pageNum;// 显示页码的数量

	public Pager() {
	}

	/**
	 * 构造函数,初始化分页的信息,自动修正
	 * 
	 * @param pageIndex
	 *            当前的页码
	 * @param recordCount
	 *            总记录数
	 * @param pageSize
	 *            分页每页显示的条数
	 */
	public Pager(int pageIndex, int recordCount, int pageSize) {
		this.pagerIndex = pageIndex;
		this.recordCount = recordCount;
		this.pageSize = pageSize < 1 ? Pager.DEFAULT_PAGESIZE : pageSize;
		this.pagerCount = (this.recordCount - 1) / pageSize + 1;
		if (this.pagerIndex < 1)
			this.pagerIndex = 1;
		if (this.pagerIndex > pagerCount)
			this.pagerIndex = this.pagerCount;
		this.setPageNum(Pager.DEFAULT_PAGENUM);
	}

	/**
	 * 构造函数,初始化分页的信息,自动修正
	 * 
	 * @param pageIndex
	 *            当前的页码
	 * @param recordCount
	 *            总记录数
	 * @param pageSize
	 *            分页每页显示的条数
	 * @param pagerNum
	 *            每页显示的条数
	 */
	public Pager(int pageIndex, int recordCount, int pageSize, int pagerNum) {
		this(pageIndex, recordCount, pageSize);
		this.setPageNum(pagerNum);
	}

	/**
	 * 设置分页的信息,自动修正
	 * 
	 * @param pageIndex
	 *            当前的页码
	 * @param recordCount
	 *            总记录数
	 * @param pageSize
	 *            分页每页显示的条数
	 */
	public void setPagerInfo(int pageIndex, int recordCount, int pageSize) {
		this.pagerIndex = pageIndex;
		this.recordCount = recordCount;
		this.pageSize = pageSize < 1 ? Pager.DEFAULT_PAGESIZE : pageSize;
		this.pagerCount = (this.recordCount - 1) / pageSize + 1;
		if (this.pagerIndex < 1)
			this.pagerIndex = 1;
		if (this.pagerIndex > pagerCount)
			this.pagerIndex = this.pagerCount;
	}

	/**
	 * 得到上一页
	 * 
	 * @return
	 */
	public int getProvPageIndex() {
		return (this.pagerIndex - 1) < 1 ? 1 : this.pagerIndex - 1;
	}

	/**
	 * 得到下一页
	 * 
	 * @return
	 */
	public int getNextPageIndex() {
		return (this.pagerIndex + 1) > this.pagerCount ? pagerCount : this.pagerIndex + 1;
	}

	public int getPagerIndex() {
		return pagerIndex;
	}

	public int getPagerCount() {
		return pagerCount;
	}

	public int getPageSize() {
		return pageSize;
	}

	public int getRecordCount() {
		return recordCount;
	}

	/**
	 * 设置显示页码的数量
	 * 
	 * @param pageNum
	 *            显示页码的数量
	 */
	private void setPageNum(int pageNum) {
		pageNum = pageNum % 2 == 0 ? ++pageNum : pageNum;// 页数目录的数量只能为奇数
		pageNum = pageNum < 1 ? Pager.DEFAULT_PAGENUM : pageNum;// 如果显示的页码数量小于1,则设置为默认值
		pageNum = pageNum > this.pagerCount ? (this.pagerCount % 2 ==0&&this.pagerCount>2 ? this.pagerCount - 1 : this.pagerCount)
				: pageNum;// 如果显示页码的数量大于总页数,则邓等于页码德总页数
		this.offsetNum = (pageNum - 1) / 2;
		this.pageNum = pageNum;
	}

	/**
	 * 分页目录显示样式
	 * 
	 * @return
	 */
	public List<Integer> getShowPageStyle() {
		List<Integer> list = new ArrayList<Integer>();
		// 当分页的总数量小于等于显示分页的数量
		if (this.pagerCount <= this.pageNum) {
			for (int i = 1; i <= this.pagerCount; i++) {
				list.add(i);
			}
			return list;
		}
		// 显示分页数量的偏移量大于当前的页码
		if (this.offsetNum >= this.pagerIndex) {
			for (int i = 1; i <= this.pageNum; i++) {
				list.add(i);
			}
			return list;
		}
		// 当前的页码在最后几页且在偏移量范围之内
		if (this.pagerIndex >= this.pagerCount - this.offsetNum) {
			for (int i = pagerCount - this.pageNum + 1; i <= this.pagerCount; i++) {
				list.add(i);
			}
			return list;
		}
		// 普通情况
		for (int i = this.pagerIndex - offsetNum; i <= this.pagerIndex + this.offsetNum; i++) {
			list.add(i);
		}
		return list;
	}

	public static void main(String[] args) {
		Pager pager = new Pager(1, 100, 10);
		List<Integer> list = pager.getShowPageStyle();
		for (Integer integer : list) {
			System.out.println(integer);
			System.out.println("================");
		}
	}
}
posted @ 2017-09-15 21:46  UTF杠扒  阅读(267)  评论(0编辑  收藏  举报