例如:
JTable 有1000条记录(row),在屏幕上只能显示100条,假设当前在第1行,然后点击next->JTable记录跳到第100行(该页末尾),再点击next->JTable记录跳到第101行(在该页第首条)?
请问如何实现?JTable有取类似显示中的数据吗?

解决方案 »

  1.   

    把你要显示的数据保存到TableModel里面(常用的是DefaultTableModel),点击“next”可以更换里面的数据,先清空,然后把100条放进去,JTable视图会相应变化的
      

  2.   

    能 继承 那个  model 再 该写点什么 来翻页么?
      

  3.   

    to tomcatjava(小鱼儿) :
    可能你误会我的意思了,并不是分几次把数据拷到模型;而是JTable已经有1000条数据了,只是屏幕上只能看到一部分(JScollPane),主要想解决取JTable正在显示的数据(row)?ps:自己猜想可能跟JScollPane有关而不是JTable??
      

  4.   

    高手呢....人呢.....急啊.......
    HELP
      

  5.   

    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Arrays;
    import java.util.Vector;import javax.swing.*;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableModel;public class PageTableModel extends AbstractTableModel implements TableModelListener {
        private TableModel realModel = null;
        private int pageSize = 10;
        private int curPage = 0;
        
        public PageTableModel(TableModel realModel, int pageSize) {
            this.realModel = realModel;
            this.pageSize = pageSize;        this.realModel.addTableModelListener(this);
        } public int getRowCount()
    {
    int realRowCount = realModel.getRowCount();
    if (curPage == realRowCount / pageSize) {
    return realRowCount % pageSize;
    }
    return pageSize;
    } public int getColumnCount()
    {
    return realModel.getColumnCount();
    }

    public String getColumnName(int column)
    {
    return realModel.getColumnName(column);
    }

    public Class getColumnClass(int columnIndex)
    {
    return realModel.getColumnClass(columnIndex);
    } public Object getValueAt(int rowIndex, int columnIndex)
    {
    int realRowIndex = curPage * pageSize + rowIndex;
    return realModel.getValueAt(realRowIndex, columnIndex);
    }

    public void setValueAt(Object aValue, int rowIndex, int columnIndex)
    {
    int realRowIndex = curPage * pageSize + rowIndex;
    realModel.setValueAt(aValue, realRowIndex, columnIndex);
    } public void tableChanged(TableModelEvent e)
    {
    if (e.getFirstRow() == TableModelEvent.HEADER_ROW ||
      e.getType() == TableModelEvent.DELETE || 
    e.getType() == TableModelEvent.INSERT) {
    fireTableStructureChanged();
    return;
    } int realRowCount = realModel.getRowCount(); int lastRow = e.getLastRow();
    int firstRow = e.getFirstRow(); if (firstRow < curPage * pageSize) {
    firstRow = curPage * pageSize;
    }
    if (lastRow > (curPage + 1) * pageSize) {
    lastRow = (curPage + 1) * pageSize;
    }
    lastRow = lastRow % pageSize;
    firstRow = firstRow % pageSize;
    TableModelEvent ne = new TableModelEvent(this, firstRow, lastRow, e.getColumn(), e.getType());
    fireTableChanged(ne);
    }

    public int getPageCount()
    {
    int realRowCount = realModel.getRowCount();
    return realRowCount % pageSize == 0 ? 
    (realRowCount / pageSize) : (realRowCount / pageSize + 1);
    }

    public int getCurPage()
    {
    return curPage;
    }

    public void setCurPage(int curPage)
    {
    if (curPage < 0 || curPage >= getPageCount()) {
    return;
    }
    this.curPage = curPage;
    fireTableDataChanged();
    } public static void main(String[] args)
    {
    TableModel model = createTableModel();
    final PageTableModel pageModel = new PageTableModel(model, 97);

    JTable table1 = new JTable(model);
    JTable table2 = new JTable(pageModel);
    JScrollPane sp1 = new JScrollPane(table1);
    JScrollPane sp2 = new JScrollPane(table2); JButton prevPageBtn = new JButton("PreviousPage");
    JButton nextPageBtn = new JButton("NextPage");

    JPanel p2 = new JPanel();
    p2.add(prevPageBtn);
    p2.add(nextPageBtn);

    prevPageBtn.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    int curPage = pageModel.getCurPage();
    pageModel.setCurPage(curPage - 1);
    }
    });

    nextPageBtn.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    int curPage = pageModel.getCurPage();
    pageModel.setCurPage(curPage + 1);
    }
    });

    JPanel p = new JPanel(new GridLayout(1, 2, 10, 0));
    p.add(sp1);
    p.add(sp2);

    JFrame f = new JFrame();
    f.getContentPane().add(p, BorderLayout.CENTER);
    f.getContentPane().add(p2, BorderLayout.SOUTH);
    f.setSize(800, 600);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true); } private static TableModel createTableModel()
    {
    String[] columnNames = new String[] {"Column1", "Column2", "Column3", "Column4"};
    Vector data = new Vector();
    for (int i = 0; i < 1000; i++) {
    Vector row = new Vector();
    data.add(row);
    for (int k = 0; k < 4; k++) {
    row.add("Cell(" + (i+1) + "," + (k+1) + ")");
    }
    }
    Vector colNames = new Vector();
    colNames.addAll(Arrays.asList(columnNames));
    DefaultTableModel model = new DefaultTableModel(
    data, colNames);
    return model;
    }
    }
      

  6.   

    楼上兄弟的代码正巧在SUN文档上看到了,没仔细看;
    因为表模型我已经写好了,所以不想再做太大的改动,最好是JTable或者是ColumnModel自带的...
    这个nextPage功能只能先放一放了,目前正在做表的默认行的功能--烦!
    ps:最恨表的锁定,先前做的功能全白费了。 AND 表的绘制器真是变态