Java Swing JTable分页和Java Struts分页
其实写这篇文章并没什么大的意义,因为只要是做过数据库操作的人都知道分页对于查询和数据存储的重要性,而且分页机制我想大家都很清楚了。
我只是记录下自己做过项目的一些感受和对分页的个人理解而已。希望能够和大家一起讨论关于分页的更好的机制和实现方法。
对于分页显示,必须做到重用性高,耦合性好,高内聚吧,这是我个人的理解了。因为你不可能为每个查询结果集写个分页方法吧。
下面重复一下分页的策略吧:
1. 对于一些数据库而言,有自己的分页方法。比如MySql使用limit子句实现分页,而Oracle使用rownum来限制结果集的大小和位置。
2. 分页的两个侧路:一种是将全部的内容查询出来再分页(查完再分);一种是根据页要显示的内容去查询(用多少查多少)。其实两种分页方法从字面上很容易理解的,但是具体使用的时候就是查完再分大多用在查询比较复杂的实例上。而用多少查多少是用在结果集很大,而且分页麻烦的实例上。(我在这里说的都针对查完再分。)
分页的规则(公式)
如果有32条记录,每页显示5条;
页数= (
——记录条数%每页条数==0 页数为记录条数/每页条数;
——否则 页数为记录条数/每页条数+1;
)很容易理解吧。
那么第N页所要显示的数据是那个范围呢(记录一般从0开始计算)?
——(N-1)*每页条数<=序号<N*每页条数。如上面的例子 第二页是从(2-1)*5<=序号<2*5;
这个原则是针对查完再分的方法写的。如果是用多少查多少的话就需要有另一个方法来做。
稍微提一下:就是将大的集合传入到一个小的集合。在需要显示的界面上传入小的集合就可。
上面都是写分页的思想和策略。
下面介绍Java swing JTable分页和Struts分页异同;
一,swing JTable 分页。
如果有过GUI编程经验的人应该知道,JTable是一个二维数组,所以针对二维数组的分页方法在数据存储的实现上比struts麻烦,因为从数据库中查询到的结果集不管是ResultSet集合还是List集合,都是一个线性的一维数组(可以这么理解)
下面是具体JTable分页的实现。
import java.util.ArrayList;
import javax.swing.JTable;
public class PaginationShow {
public static int currentPage = 1; //当前页码数
public static int totalPage=0; //总页数
public static int RowPerPage = 5; //每页的记录数
public static int column=0;//记录结果集中的列总数
public static int totalRowCount = 0;//结果集中的记录行总数
public static Object[][]resultDate;//存储结果集
public static int restDate;//记录中最后页的总数
/**
* 构造方法,获取表结果集中的所有行数。这个构造方法是我自己写的,针*ArrayList转换为二维数组的操作
* @param ArrayList
*/
public PaginationShow(ArrayList al){
//建立数组转化对象,将结果集中的数据存储在二维数组中
ResultToArrayCon rta = new ResultToArrayCon();//(这个类是未来将一维数组转换为二维数组而专门设定的。)
//获取记录中的列数
column = Integer.parseInt(al.get(al.size()-1).toString());
//这句话就是获取结果集中的列数,对于Oralce数据库来说,记录的列数很容易获取,//我专门写在一个结果集转化类即上面的ResultToArrayCon 中了,
//对于Oracle JDBC查询数据库来说,获取某个表的列数的方法是:
//ResultSetMetaData metaData = rs.getMetaData();
//int numberOfColumns = metaData.getColumnCount();//获取表中记录列数
totalRowCount = (al.size()-1)/column;//获取记录中的总行数
totalPage = totalRowCount/RowPerPage+1;//每页的记录数获取
restDate = totalRowCount%RowPerPage;
resultDate = rta.resultToArray(al);//存储结果集到数组中
}
/**
*这个方法是同组的另一个人写的,他直接传递过来的是一个二维数组,所以实
*现比较容易,我传递过来的是集合。所以要转换成二维数组,所以上面不一样
*哦,每个人都有自己的实现方法,自己去写吧。
*/
public PaginationShow(Object[][]myobj){
if(myobj!=null){
column = myobj[0].length;
totalRowCount = myobj.length;//获取记录中的总行数
}
totalPage = totalRowCount/RowPerPage+1;//每页的记录数获取
restDate = totalRowCount%RowPerPage;
resultDate = myobj;//存储结果集到数组中
}
public PaginationShow(){}
/**
* 存储数据,将二维数组中的数据存入每页要显示的新数组中,下面这个存储数* 据的方法非常重要,要将一个大的二维数组(所有的数据库数据)分页显示在*JTable上,必须有一个小的二维数组来存储每页的数据。而这个算法就是下面的
*方法。
*方法是我自己写的不够完整,希望大家能够改正并给出完美的答案。
* @return
*/
public Object [][] storeDate(){
//每页存储数据二维数组建立
Object [][] rowDateCurrentPage = new Object[RowPerPage][column];
//如果当前页是页总数,并且剩余记录能被RowPerPage整除
if(this.getCurrentPage()<this.totalPage)//如果当前页小于总页数,即有下一页
{//将要显示的页的序号数据存储到rowCurrentPage中
// RowPerPage*(this.getCurrentPage()-1)符合上面的分页思想
//而RowPerPage*(this.getCurrentPage()-1)+RowPerPage却与上面的分页思想有//点不同,个人理解问题而已。
for(int i=RowPerPage*(this.getCurrentPage()-1);
i<RowPerPage*(this.getCurrentPage()-1)+RowPerPage;
i++){
for(int j=0;j<column;j++){
rowDateCurrentPage[i%RowPerPage][j] = resultDate[j];
}
}
}
//如果当前页是页总数,并且剩余记录不能被RowPerPage整除
if(this.getCurrentPage()==this.totalPage){
// restDate这个就是为了存储最后没有除尽的结果集。
for(int i=RowPerPage*(this.getCurrentPage()-1);
i<RowPerPage*(this.getCurrentPage()-1)+restDate;
i++){
for(int j=0;j<column;j++){
rowDateCurrentPage[i%RowPerPage][j] = resultDate[j];
}
}
}
return rowDateCurrentPage;
}
分享到:
相关推荐
Java Swing JTable分页!JAVA源码!
1、通过封装了AbstractTableModel完成JTable的使用。 2、使用TabbedPane完成多页数据的显示
NULL 博文链接:https://sulifeng.iteye.com/blog/624076
java swing表格分页控件封装,有利于在开发中节约时间
我们可以使用 `JTable` 组件来显示表格数据,并使用 `JScrollPane` 组件来提供滚动条功能。为了实现分页,我们需要使用 `DefaultTableModel` 来管理表格数据,并使用按钮组件来控制分页操作。 PageTable 类 在给定...
其实就是另外一种特定分页加载表的数据,比如,第一页,表只加载10条数据,类似与下拉刷新表。
打开数据库并获取数据非常昂贵,因此通常要提取一堆数据,将其存储在数据模型中,然后再显示出来。 根据速度,我将至少获取两个页面的数据集。 通过获取所有数据并将其存储到普通模型数组(“数据”)中,以某种方式...
通过jTable控件显示出来。 PageTable ------------------//源代码文件夹 javadata -------------------//MySQL文件夹 本人通过安装MySQL Connect ODBC,用JDBC-ODBC桥来和java连接 因为是初学者,有不足之处希望得到...
这个是个小案例,里面包含了jtable的增删改查以及连接了sqlserver2008,显示的数据进行了分页,以及对数据库的操作都进行了log4j的日志记录
JTable应用,财务管理表作为例子,原创程序,实现了分页查询,模糊查询,及时刷新,批量删除等功能。下载即可以运行, 表结构已经打包在文件中了。
该代码为java SE工程,使用swing开发技术,滑动条滑动实现仿分页效果,也可制定前几列固定,后面的列随着滚动条滑动而分页
一个关于 swing 的jdbc练习 包括查询 修改 添加 删除 分页
java swing 设计的数据库前台界面 有详细代码 实现了JTable 的分页功能 可以连接数据库进行操作不过数据库的代码没有上传
Swing JDBC程序 用jtable显示数据 实现增加删除修改查询 分页等操作
1,当表格过大时,你可以通过分页、缩放、改页边距来进行调整 2,当然,你还可以通过调整纸张大小来实现,再程序中预定义了十余种常用纸张(如A4,A5,B5,信笺等等) 3,你还可以为你的表格加入页眉/页脚,你可以在...
这是使用java swing编写的一个小软件:个人密码管理系统; 功能:管理个人的密码,可以分页,数据表中密码对应的列是加密的,可以通过这个项目学习JTable的使用及分页的方法。 使用数据库:mysql。 包含源代码
主要是员工部门模块,其中包括有数据库表的设计和所有此模块的基本要求 有分页、JTable 多(单)选 下拉菜单等 awt 和swing的基本操作
实现进货销售以及库存管理,不同用户拥有不同角色,不同角色拥有不同权限,登录之后拥有不同功能,实现供应商、客户、商品、用户的crud,封装了许多控件,比如JTable,jdbc,以及分页组件等
使用“您所见即所得”图形编辑器的基于Java的基于报表的报告。 通过画线和设置单元格属性来设计报告。 JTable的分页打印工具。 还包括一些有用的组件,例如DatePicker,StatusBar。
我们的JFC表格是Java的JTable的直接替代,所以您可以将以前项目中的JTable替换为我们的JFC Table。您可以继续使用您以前编写的所有代码。 我们的表格具有各种丰富的特性,包括一些高级特性,如单元格合并(非常适合...