Jtable的问题,大神求指教

最近运用JPanel做一个数据库查询表单,在做翻页功能的时候出现了一个问题 。翻页是可以做到,但是当我点击表头或者在点击翻页后的任意一行 时 表单会变成第一页的数据值。
就比如:第一页是:表头1 表头2
1 value1
2 value2
翻页后: 表头1 表头2
3 value3
4 value4
我翻页后 点击“表头1”或“表头2”时 数据又变成第一页的值了
点击“3”或者“value3”时数据变成相应的“1”和“value1”
求大神指点 不知道怎么解决 源码很长 我截取一部分代码 希望大家能帮我看看问题出在哪里
public void selectDownPage(String key) {
if (key != null) {
List list = CountryOperate.downPage(key);
if (list != null) {
tm = new TableModel();
Object[][] datavalues = new Object[list.size()][8];
for (int i = 0; i < list.size(); i++) {
Country co = list.get(i);
// int m = CountryOperate.x-
datavalues[i][0] = co.getNumber();
datavalues[i][1] = co.getName();
datavalues[i][2] = co.getGuige();
datavalues[i][3] = co.getKuwei();
datavalues[i][4] = co.getKucun();
datavalues[i][5] = co.getDanwei();
datavalues[i][6] = co.getJinjia();
datavalues[i][7] = co.getCaigoudanwei();
// table.getModel().setValueAt(co.getNumber(), i, 0);
// table.getModel().setValueAt(co.getName(), i, 1);
// table.getModel().setValueAt(co.getGuige(), i, 2);
// table.getModel().setValueAt(co.getKuwei(), i, 3);
// table.getModel().setValueAt(co.getKucun(), i, 4);
// table.getModel().setValueAt(co.getDanwei(), i, 5);
// table.getModel().setValueAt(co.getJinjia(), i, 6);
// table.getModel().setValueAt(co.getCaigoudanwei(), i, 7);
//

}
// this.setValues(datavalues);
// table.updateUI();
this.setValues(datavalues);
table = new JTable(tm) {
public boolean isCellEditable(int row, int column) {
return false;
}
};
table.updateUI();
table.repaint();
Debug.P(table.getModel().getValueAt(0, 0));
JScrollPane jsp = new JScrollPane(table);
jsp.setBounds(0, 125, 1000, 300);
jContentPane.add(jsp);
} else {
JOptionPane.showMessageDialog(jFrame, "已经是最后一页");
}
}
}
public void setValues(Object[][] obj) {
this.tm.setDatavalues(obj);
}

public class TableModel extends AbstractTableModel {

// public final static String[] columnHeaders = {
// "国家名称","所属地区","国家面积","人口数量","国家GDP"
// };
public TableModel() {
    super();
}
public TableModel(String[] headName, Object[][] obj) {
    this();
    this.columnHeaders = headName;
    this.datavalues = obj;
}
public  static String[] columnHeaders = { "品号", "品名", "规格", "库位号",
        "库存数量", "最近进价", "库存单位", "采购单位" };
private Object[][] datavalues ;

public int getColumnCount() {
    return datavalues[0].length;
}

public int getRowCount() {
    return datavalues.length;
}

public Object getValueAt(int rowIndex, int columnIndex) {
    return datavalues[rowIndex][columnIndex];
}

public String getColumnName(int column) {
    return columnHeaders[column];
}

public void setDatavalues(Object[][] datavalues) {
    this.datavalues = datavalues;
}
public void setValueAt(Object value, int row, int col) {
    datavalues[row][col] = value;
    fireTableCellUpdated(row, col);
}

}