java中swing做表格翻页用什么类做

Python014

java中swing做表格翻页用什么类做,第1张

Swing中一般用JScrollPan来进行滚动,不需要使用翻页

如果非要翻页,有两种方式:

一次检索出全部数据,放到TableModel中,这时可以设计另一个TableModel做成一个类似滑动窗口的方式,每次在窗口Model中只映射原Model的部分数据。

一次检索出一页数据,这与网页中的翻页完全相同。

对第一种情况,下面给出一个实现:

public class PageTableModel extends AbstractTableModel implements TableModel,TableModelListener{

private TableModel baseModel

public PageTableModel(TableModel baseModel){

this.baseModel=baseModel

baseModel.addTableModelListener(this)

}

/**当前页,从0开始编号.

*/

private int currentPage

/**每页最多数据行数.

*/

private int pageSize=20

/**获取总页数。

*

* @return

*/

public int getPageCount(){

int mod=baseModel.getRowCount()%pageSize

int hasMode=mod>0?1:0

return baseModel.getRowCount()/pageSize+hasMode

}

public int getPageSize() {

return pageSize

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize

}

public int getCurrentPage() {

return currentPage

}

public void setCurrentPage(int currentPage) {

this.currentPage = currentPage

}

@Override

public int getRowCount() {

if(getCurrentPage()<getPageCount()-1)return pageSize

return baseModel.getRowCount() % pageSize

}

@Override

public int getColumnCount() {

return baseModel.getColumnCount()

}

@Override

public String getColumnName(int columnIndex) {

return baseModel.getColumnName(columnIndex)

}

@Override

public Class<?>getColumnClass(int columnIndex) {

return baseModel.getColumnClass(columnIndex)

}

@Override

public boolean isCellEditable(int rowIndex, int columnIndex) {

return baseModel.isCellEditable(getBaseModelRow(rowIndex), columnIndex)

}

@Override

public Object getValueAt(int rowIndex, int columnIndex) {

return baseModel.getValueAt(getBaseModelRow(rowIndex), columnIndex)

}

@Override

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

baseModel.setValueAt(aValue, getBaseModelRow(rowIndex), columnIndex)

}

@Override

public void tableChanged(TableModelEvent e) {

int firstRow,lastRow

int minFirstRow=getBaseModelRow(0)

int maxFirstRow=getBaseModelRow(pageSize-1)

if(e.getFirstRow()>maxFirstRow)return

if(e.getLastRow()<minFirstRow)return

firstRow=getThisModelRow(e.getFirstRow())

if(firstRow<0)firstRow=0

lastRow=getThisModelRow(e.getLastRow())

if(lastRow<0)lastRow=this.pageSize-1

fireTableChanged(new TableModelEvent(this, firstRow, lastRow, e.getColumn(), e.getType()))

}

/**获取指定的行在底层Model中的行号.

*

* @param row

* @return

*/

private int getBaseModelRow(int row){

return getCurrentPage()*pageSize+row

}

/**获取指定的底层Model中的行号对应的当前Model的行号.

* 如果底层Model中指定的行号不在当前Model的显示范围内,应该返回-1。

*

* @param row

* @return

*/

private int getThisModelRow(int row){

if(row/pageSize !=getCurrentPage())return -1

return row%pageSize

}

}

读取你数据库的所有记录,这是总行数,然后你规定一下没页显示几条记录,然后还要记录一下当前的页数!

比如现在一共是30记录,你页显示7条,那么就是5页。(30+7-1)/7=5,你刚进来的时候肯定是第一页,那么就把1传进来,第一页就是显示第1~第7条记录,点下一页传2进来,第二页现实低第8~14条记录!怎么去记录就要看你怎么操作了,如果你是用SQL语句的话就帮不了你了,因为不知道你用的什么数据库!如果在集合里去的话,你可以根据传入的参数来算出本页的开始记录数和结束的记录数,开始是:当前页*每页记录数-没页记录数,结束就是:当前页*没也记录数-1.因为集合的下标是从0开始的,所以要-1.