extends AbstractTableModel (Pageable Model for large data set in JTable) : Pageable Table « javax.swing.table « Java by API






extends AbstractTableModel (Pageable Model for large data set in JTable)

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

public class MainClass extends JFrame {

  public MainClass() {
    super("Paged JTable Test");
    setSize(300, 200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    PagingModel pm = new PagingModel();
    pm.setPageSize(20);
    JTable jt = new JTable(pm);

    JScrollPane jsp = PagingModel.createPagingScrollPaneForTable(jt);
    getContentPane().add(jsp, BorderLayout.CENTER);
  }

  public static void main(String args[]) {
    MainClass pt = new MainClass();
    pt.setVisible(true);
  }
}
class Record {
  static String[] headers = { "Record Number", "Batch Number", "Reserved" };
  static int counter;
  String[] data;

  public Record() {
    data = new String[] { "" + (counter++), "" + System.currentTimeMillis(), 
             "Reserved" };
  }

  public String getValueAt(int i) { return data[i]; }

  public static String getColumnName(int i) { return headers[i]; }
  public static int getColumnCount() { return headers.length; }
}

class PagingModel extends AbstractTableModel {

  protected int pageSize;

  protected int pageOffset;

  protected Record[] data;

  public PagingModel() {
    this(10000, 100);
  }

  public PagingModel(int numRows, int size) {
    data = new Record[numRows];
    pageSize = size;
    for (int i = 0; i < data.length; i++) {
      data[i] = new Record();
    }
  }

  public int getRowCount() {
    return Math.min(pageSize, data.length);
  }

  public int getColumnCount() {
    return Record.getColumnCount();
  }

  public Object getValueAt(int row, int col) {
    int realRow = row + (pageOffset * pageSize);
    return data[realRow].getValueAt(col);
  }

  public String getColumnName(int col) {
    return Record.getColumnName(col);
  }

  public int getPageOffset() {
    return pageOffset;
  }

  public int getPageCount() {
    return (int) Math.ceil((double) data.length / pageSize);
  }

  public int getRealRowCount() {
    return data.length;
  }

  public int getPageSize() {
    return pageSize;
  }

  public void setPageSize(int s) {
    if (s == pageSize) {
      return;
    }
    int oldPageSize = pageSize;
    pageSize = s;
    pageOffset = (oldPageSize * pageOffset) / pageSize;
    fireTableDataChanged();
  }

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

  public void pageUp() {
    if (pageOffset > 0) {
      pageOffset--;
      fireTableDataChanged();
    }
  }

  public static JScrollPane createPagingScrollPaneForTable(JTable jt) {
    JScrollPane jsp = new JScrollPane(jt);
    TableModel tmodel = jt.getModel();
    if (!(tmodel instanceof PagingModel)) {
      return jsp;
    }

    final PagingModel model = (PagingModel) tmodel;
    final JButton upButton = new JButton("UP");
    upButton.setEnabled(false);
    final JButton downButton = new JButton("DOWN");
    if (model.getPageCount() <= 1) {
      downButton.setEnabled(false);
    }

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

        if (model.getPageOffset() == 0) {
          upButton.setEnabled(false);
        }
        downButton.setEnabled(true);
      }
    });

    downButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        model.pageDown();
        if (model.getPageOffset() == (model.getPageCount() - 1)) {
          downButton.setEnabled(false);
        }
        upButton.setEnabled(true);
      }
    });

    jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

    jsp.setCorner(ScrollPaneConstants.UPPER_RIGHT_CORNER, upButton);
    jsp.setCorner(ScrollPaneConstants.LOWER_RIGHT_CORNER, downButton);

    return jsp;
  }
}

           
       








Related examples in the same category