FileDocCategorySizeDatePackage
PagingModel.javaAPI DocExample4439Mon Nov 09 12:45:50 GMT 1998None

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);

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

    // Okay, go ahead and build the real scroll pane
    final PagingModel model = (PagingModel)jt.getModel();
    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));

    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 pageSize; 
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;
    if (pageSize < oldPageSize) {
      fireTableRowsDeleted(pageSize, oldPageSize - 1);
    }
    else {
      fireTableRowsInserted(oldPageSize, pageSize - 1);
    }