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 Swing的应用程序时,我们经常需要处理大量的数据展示问题。对于表格形式的数据展示,`JTable`是一个非常常用且强大的组件。然而,当数据量过大时...
因此,实现`JTable`的分页显示是优化用户体验的重要手段。这篇转载的博客文章探讨了如何在`JTable`中实现分页功能。 首先,理解`JTable`的基本结构至关重要。`JTable`是基于`DefaultTableModel`的,它管理表格的...
本示例将深入探讨如何使用`JTable`并结合`TabbedPane`来创建一个分页显示数据的界面。 首先,让我们来看`JTable`的使用。`JTable`是`javax.swing.JTable`类的实例,它是基于模型-视图-控制器(MVC)架构设计的。`...
我们可以使用 `JTable` 组件来显示表格数据,并使用 `JScrollPane` 组件来提供滚动条功能。为了实现分页,我们需要使用 `DefaultTableModel` 来管理表格数据,并使用按钮组件来控制分页操作。 PageTable 类 在给定...
java swing表格分页控件封装,有利于在开发中节约时间
在iOS开发中,分页加载表(Paging Table)是一种常见的优化用户界面和提升应用性能的技术,主要用于处理大量数据的展示。它通过只加载当前视口内的数据,减少了初次加载时的数据量,同时允许用户滚动时动态加载后续...
打开数据库并获取数据非常昂贵,因此通常要提取一堆数据,将其存储在数据模型中,然后再显示出来。 根据速度,我将至少获取两个页面的数据集。 通过获取所有数据并将其存储到普通模型数组(“数据”)中,以某种方式...
下面将详细介绍Swing、数据库连接、界面设计以及JTable分页的相关知识点。 1. **Java Swing**: Swing是Java AWT(Abstract Window Toolkit)的扩展,提供了更多的组件和更丰富的用户界面。Swing组件是轻量级的,...
通过jTable控件显示出来。 PageTable ------------------//源代码文件夹 javadata -------------------//MySQL文件夹 本人通过安装MySQL Connect ODBC,用JDBC-ODBC桥来和java连接 因为是初学者,有不足之处希望得到...
它提供了诸如数据分页、排序、过滤和添加/编辑/删除记录等功能,且具有良好的用户体验和响应式设计。 **1. jTable 的基本使用** jTable通过JSON数据与服务器进行交互,通常结合ASP.NET MVC的Controller来处理这些...
- **数据分页**:jtable 支持动态加载数据,用户可以轻松地浏览大量数据,无需一次性加载所有记录。 - **排序功能**:用户可以通过点击表头来对数据进行升序或降序排序。 - **搜索过滤**:提供内置的搜索框,允许...
在JTable中实现分页,通常需要自定义TableModel,增加分页逻辑。每次加载特定页的数据到JTable,当用户翻页时,会重新加载对应页的数据。 **日志记录**使用了**Log4j**,这是一个强大的日志框架,可以方便地记录...
`JTable`提供了许多高级功能,如排序、过滤、分页等。这些功能通常需要自定义`TableModel`或使用第三方库(如Apache Commons Table或SwingX的`JXTable`)来实现。 ### 示例应用 在给定的"JTable"示例中,很可能是...
3. **分页与数据加载**:对于大量数据,可以实现分页加载,仅加载当前视图所需的行。 4. **表头合并**:通过`RowHeaderRenderer`可以实现多列合并的表头效果。 5. **数据验证**:在编辑时添加数据验证,确保输入的...
《JTable的实战之财务管理简化版》是一款基于Java Swing组件JTable的应用程序,它专为财务管理设计,提供了分页查询、模糊查询以及实时刷新、批量删除等实用功能。这款原创程序旨在帮助用户更高效地管理和操作财务...
对于大量数据,考虑使用分页加载和懒加载策略,以提高用户体验和性能。 **10. 用户界面设计** 别忘了考虑UI的设计,使其友好且直观,便于用户理解和操作。 总之,结合`JTable`和`JDBC`,我们可以创建一个功能丰富...
- **性能优化**:对于大数据量的表格,可能需要实现分页或懒加载机制,以提高用户体验。 总结来说,`MyTable.java`文件可能是一个定制的表格组件,通过将`TableModel`集成进`MyTable`类,实现了对数据的自定义管理...
在大量数据处理时,避免一次性加载所有数据到内存,可以考虑使用分页或者懒加载策略。 通过这个例子,我们可以学习到如何构建一个基于数据库的JTable应用,包括创建自定义的数据模型,实现数据的添加、删除和修改...
1. 表格分页:如果数据量很大,可能需要实现分页功能,只加载和显示一部分数据,提高程序性能。 2. 数据过滤和搜索:允许用户根据指定条件筛选表格数据,或者提供搜索框进行快速查找。 3. 表格排序:点击列头可以...
- 在处理大量数据时,应考虑分页显示或其他优化措施,避免一次性加载过多数据导致性能下降。 3. **安全性考量**: - 避免SQL注入风险,推荐使用`PreparedStatement`来安全地执行SQL查询。 - 对于敏感信息(如密码...