FileDocCategorySizeDatePackage
PagingModel.javaAPI DocExample4690Thu Oct 24 20:14:26 BST 2002None

PagingModel

public class PagingModel extends AbstractTableModel

Fields Summary
protected int
pageSize
protected int
pageOffset
protected Record[]
data
Constructors Summary
public PagingModel()

    this(10000, 100);
  
public PagingModel(int numRows, int size)

    data = new Record[numRows];
    pageSize = size;
    
    // Fill our table with random data (from the Record() constructor).
    for (int i=0; i < data.length; i++) {
      data[i] = new Record();
    }
  
Methods Summary
public static javax.swing.JScrollPanecreatePagingScrollPaneForTable(javax.swing.JTable jt)

    JScrollPane jsp = new JScrollPane(jt);
    TableModel tmodel = jt.getModel();

    // Don't choke if this is called on a regular table . . .
    if (! (tmodel instanceof PagingModel)) {
      return jsp;
    }

    // Okay, go ahead and build the real scrollpane
    final PagingModel model = (PagingModel)tmodel;
    final JButton upButton = new JButton(new ArrowIcon(ArrowIcon.UP));
    upButton.setEnabled(false);  // starts off at 0, so can't go up
    final JButton downButton = new JButton(new ArrowIcon(ArrowIcon.DOWN));
    if (model.getPageCount() <= 1) {
      downButton.setEnabled(false);  // One page...can't scroll down
    }

    upButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        model.pageUp();

        // If we hit the top of the data, disable the up button.
        if (model.getPageOffset() == 0) {
          upButton.setEnabled(false);
        }
        downButton.setEnabled(true);
      }
    } );

    downButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        model.pageDown();

        // If we hit the bottom of the data, disable the down button.
        if (model.getPageOffset() == (model.getPageCount() - 1)) {
          downButton.setEnabled(false);
        }
        upButton.setEnabled(true);
      }
    } );

    // Turn on the scrollbars; otherwise we won't get our corners.
    jsp.setVerticalScrollBarPolicy
        (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    jsp.setHorizontalScrollBarPolicy
        (ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

    // Add in the corners (page up/down).
    jsp.setCorner(ScrollPaneConstants.UPPER_RIGHT_CORNER, upButton);
    jsp.setCorner(ScrollPaneConstants.LOWER_RIGHT_CORNER, downButton);

    return jsp;
  
public intgetColumnCount()

 return Record.getColumnCount(); 
public java.lang.StringgetColumnName(int col)

    return Record.getColumnName(col);
  
public intgetPageCount()

 
    return (int)Math.ceil((double)data.length / pageSize);
  
public intgetPageOffset()

 return pageOffset; 
public intgetPageSize()

 return pageSize; 
public intgetRealRowCount()

    return data.length;
  
public intgetRowCount()

 return Math.min(pageSize, data.length); 
public java.lang.ObjectgetValueAt(int row, int col)

    int realRow = row + (pageOffset * pageSize);
    return data[realRow].getValueAt(col);
  
public voidpageDown()

    if (pageOffset < getPageCount() - 1) {
      pageOffset++;
      fireTableDataChanged();
    }
  
public voidpageUp()

    if (pageOffset > 0) {
      pageOffset--;
      fireTableDataChanged();
    }
  
public voidsetPageSize(int s)

 
    if (s == pageSize) { return; }
    int oldPageSize = pageSize;
    pageSize = s;
    pageOffset = (oldPageSize * pageOffset) / pageSize;
    fireTableDataChanged();
/*
    if (pageSize < oldPageSize) {
      fireTableRowsDeleted(pageSize, oldPageSize - 1);
    }
    else {
      fireTableRowsInserted(oldPageSize, pageSize - 1);
    }
*/