谁能教我怎么用JTable 实现分页显示数据!!
java吧
全部回复
仅看楼主
level 1
给跪求代码~~
2012年05月02日 13点05分 1
level 12
阅读接口
TableModel
阅读类
AbstractTableModel
DefaultTableModel
比较简单就能实现
问题是,为什么要分页而不用滚动条呢
JScrollPane 简直就是给 JTable 量身定做的
2012年05月03日 07点05分 2
还是不懂 能不能给个代码
2016年01月05日 05点01分
level 3
java学习交流群:134429019 欢迎大家加入!!!
2012年05月03日 07点05分 3
level 1
====学生类====================================================================== import java.util.ArrayList;
import java.util.List;
public class Student {
private Integer id;
private String name;
private String sex;
private int age;
public static List<Student> students=new ArrayList<Student>();
public Student(){}
public Student(Integer id,String name,String sex,int age){
super();
this.id=id;
this.name=name;
this.sex=sex;
this.age=age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
} ====分页JTable类===========================================================
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
@SuppressWarnings("serial")
public class StudentTable extends JTable{
//JTable表分页信息相关变量
public int currentPage=1;
public int pageCount=5;
public int totalPage=0;
public int totalRowCount=0;
public int column=0;
public int restCount;
public Object[][] resultData;
//JTable表信息相关变量
public List<Student> students=Student.students;
public String[] columnNames={"ID","Name","Sex","Age"};
public DefaultTableModel model=null;
public StudentTable(){initTable();}
/**
* 获取下一页
*/
public int getNextPage(){
if(this.currentPage!=this.totalPage){
return ++currentPage;
}
return -1;
}
/**
* 获取上一页
*/
public int getPreviousPage(){
if(this.currentPage!=1){
return --currentPage;
}
return -1;
}
/**
* 获取最后一页
*/
public int getLastPage(){
return this.totalPage;
}
/**
* 获取第一页
*/
public int getFirstPage(){
return 1;
}
/**
* 获取总页数
*/
public int getTotolPage(){
return this.totalPage;
}
/**
* 获取当前页
*/
public int getCurrentPage(){
return this.currentPage;
}
/**
* 获得原始数据集
* @param students
* @return
*/
public Object[][] getData(List<Student> students){
if(students.size()>0){
Object[][] data=new Object[students.size()][4];
for(int i=0;i<students.size();i++){
Student s=students.get(i);
Object[] a={s.getId(),s.getName(),s.getSex(),s.getAge()};//把List**的数据赋给Object数组
data[i]=a;//把数组的值赋给二维数组的一行
}
return data;
}
return null;
}
/**
* 初始化结果集
* @param data

2012年05月03日 07点05分 4
level 1
*/
public void initResultData(Object[][] data){
if(data!=null){
resultData=data;//总的结果集
column=data[0].length;//表的列数
totalRowCount=data.length;//表的长度
totalPage=totalRowCount%pageCount==0?totalRowCount/pageCount:totalRowCount/pageCount+1;//结果集的总页数
restCount=totalRowCount%pageCount==0?5:totalRowCount%pageCount;//最后一页的数据数
}
}
/**
* 获取分页数据
* @return
*/
public Object[][] getPageData(){
Object[][] currentPageData=new Object[pageCount][column];//构造每页数据集
if(this.getCurrentPage()<this.totalPage){//如果当前页数小于总页数,那么每页数目应该是规定的数pageCount
for(int i=pageCount*(this.getCurrentPage()-1);i<pageCount*(this.getCurrentPage()-1)+pageCount;i++){
for(int j=0;j<column;j++){
//把结果集中对应每页的每一行数据全部赋值给当前页的每一行的每一列
currentPageData[i%pageCount][j]=resultData[i][j];
}
}
}else{
//在动态改变数据结果集的时候,如果当前页没有数据了,则回到前一页(一般针对最后一页而言)
if(pageCount*(this.getCurrentPage()-1)>=totalRowCount)this.currentPage--;
for(int i=pageCount*(this.getCurrentPage()-1);i<pageCount*(this.getCurrentPage()-1)+restCount;i++){
for(int j=0;j<column;j++){
currentPageData[i%pageCount][j]=resultData[i][j];
}
}
}
return currentPageData;
}
/**
* 初始化表格数据
*/
public void initTable(){
Object[][] data=getData(students);
if(data!=null){
initResultData(data);
model=new DefaultTableModel(getPageData(),columnNames);
}else{
//如果结果集中没有数据,那么就用空来代替数据集中的每一行
Object[][] nothing={{},{},{},{},{}};
model=new DefaultTableModel(nothing,columnNames);
totalRowCount=0;
}
this.setModel(model);
this.setRowHeight(20);
DefaultTableCellRenderer r=new DefaultTableCellRenderer();
r.setHorizontalAlignment(JLabel.CENTER);
setDefaultRenderer(Object.class, r);
}
}
=====界面显示========================================================================= import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
@SuppressWarnings("serial")
public class StudentTableTest extends JFrame implements ActionListener {
private JScrollPane panel;
private JButton next,previous,add,delete;
private JLabel label1;
private StudentTable table;
public StudentTableTest(){
super("表分页及操作");
initTableData();
initComponent();
}
private void initTableData() {
// TODO Auto-generated method stub
Student s=new Student(1,"yangfei","男",21);
Student.students.add(s);
s=new Student(2,"yangf","女",22);
Student.students.add(s);
s=new Student(3,"yangfei","男",23);

2012年05月03日 07点05分 5
1