當前位置:編程學習大全網 - 源碼下載 - java中swing做表格翻頁用什麽類做

java中swing做表格翻頁用什麽類做

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;

}

}

  • 上一篇:做短線應該怎麽選股
  • 下一篇:linux設備樹驅動exynos4412怎麽寫
  • copyright 2024編程學習大全網