java分页代码问题

我想问一下纯javaSE代码可以实现数据的分页显示效果吗?
我在弄一个类似人事管理系统的东西,当查询所有职员时,如果人数太多,就按照每页一定的数量分页显示!不要JSP,我也没有学会使用框架!就是纯粹的J2SE代码,可以实现吗?
如果可以,请给个思路,谢谢!
runjia1987朋友的代码很完整,不过没有注释,看着很辛苦,我回头慢慢研究!
cloudee朋友的思路很清晰,有理解,就是具体实现的时候会遇到什么问题还不清楚。因为我之前做数据库数据表的显示的时候都是使用 Vector<Vector<String>> rows = new Vector<Vector<String>>();这种向量的方式,还没有尝试过使用List,所有会遇到什么问题还不清楚!
不过不忙着结贴,希望两位或者其他的朋友有什么好的想法能拿出来分享,所谓集思广益嘛!
谢谢先!

你需要另外保存一个变量一个常量,变量是当前的页数,常量是每页的条数
比如你查询出来一个List,用size/每页条数可以算出总页数,另外当前页数*每页条数决定从哪条开始显示给用户
用户就通过空间输入当前的页数就好了,另外总页数展示给用户

Vector和List用法一样的。要是用swing的那种接受vector的控件的话,你把想要显示的几行放到新的vector就行了,这点开销不用考虑性能问题
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-03-31
package cjw.nic.news.utils;

/**
*
*/
public class Pager implements java.io.Serializable {

private static final long serialVersionUID = 7509626531677245756L;
private int totalRows;
private int pageSize;
private int currentPage;
private int totalPages;
private int startRow;

public Pager() {}

@Deprecated
public static int[] getRownum( int _currentPage, String pagerMethod, int _pageSize, int _totalRows) {
int[] arr = new int[2];
if(pagerMethod.equals("")){
arr[0] = (_currentPage-1)*_pageSize + 1;arr[1] = (_currentPage)*_pageSize;
}else if (pagerMethod.equals("first")) {
arr[0] = 1;arr[1] = _pageSize;
} else if (pagerMethod.equals("prev")) {
arr[0] = (_currentPage-2)*_pageSize + 1;arr[1] = (_currentPage-1)*20;
} else if (pagerMethod.equals("next")) {
arr[0] = (_currentPage)*_pageSize + 1;arr[1] = (_currentPage+1)*20;
} else if (pagerMethod.equals("last")) {
if(_totalRows > 0){
arr[0] = _totalRows - _pageSize;arr[1] = _totalRows;
} else {
arr[0] = (_currentPage)*_pageSize + 1;arr[1] = (_currentPage+1)*20;
}}
return arr;
}

/**
* pager
* @param _currentPage 当前页码
* @param _totalRows 总记录数
* @param _pageSize 每页记录数
*/
public Pager(int _currentPage, int _totalRows, int _pageSize) {
totalRows = _totalRows;
pageSize = _pageSize;
totalPages = totalRows / pageSize;
if (totalRows % pageSize > 0)totalPages++;
if(totalRows <= 0) {
currentPage = 1;
startRow = 0;
}
else if (_currentPage <= 0 ) {
currentPage = 1;
startRow = 0;
} else if(_currentPage > totalPages) {
currentPage = totalPages;
startRow = (currentPage - 1) * pageSize;
} else {
currentPage = _currentPage;
startRow = (currentPage - 1) * pageSize;
}
}

public void first() {
currentPage = 1;
startRow = 0; }

public void prev() {
if (currentPage <= 1) currentPage = 1;
else currentPage--;
startRow = (currentPage - 1) * pageSize;}

public void next() {
if (currentPage < totalPages) currentPage++;
startRow = (currentPage - 1) * pageSize;}

public void last() {
currentPage = totalPages;
startRow = (currentPage - 1) * pageSize;}

public void setTotalRows(int totalRows) {this.totalRows = totalRows;}

public int getTotalRows() { return totalRows;}

public int getPageSize() {return pageSize;}

public void setCurrentPage(int currentPage){this.currentPage = currentPage;}

public int getCurrentPage() {return currentPage;}

public int getTotalPages() {return totalPages;}

public void setTotalPages(int totalPages) {this.totalPages = totalPages;}

public int getStartRow() {return startRow;}

public void setPageSize(int pageSize) {this.pageSize = pageSize;}

public void setStartRow(int startRow) {this.startRow = startRow;}
}
就是取出合适的页码,并实现首页,前一页,后一页,尾页四个动作,
至于在数据库查询SQL中,使用ORACLE rownum pager.getStartRow()
相似回答