如果要用变量,就采用tablemodel吧

解决方案 »

  1.   

    package thtf.test.common;/**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2002</p>
     * <p>Company: TsingHua tongfang Co. Ltd</p>
     * @author Hou Guangmin 
     * @version 1.0
     * 专用的表格模型,用于显示对数据库查询的结果集.
     * 该类还实现了序列化和克隆接口,方便传输操作。
     * 该类还实现了对数据的过滤显示
     */
    import java.sql.*;
    import javax.swing.table.*;
    import java.util.*;
    import javax.swing.event.*;
    import java.io.Serializable;
    import java.lang.*;public class MyTableModel extends AbstractTableModel
                              implements Serializable,Cloneable
    {
      String[] columnNames=new String[0]; //存储列名
      Object[][] dataRows;                //存储表格里的数据
      TableModelEvent el;                 //表格模型的监听事件
      int columnsCount;                   //数据源的列数
      int rowsCount;                      //数据源的行数
      protected ArrayList indexList = new ArrayList();//存放筛选后行ID的数组
      protected String index;//筛选的标准值
      protected boolean isbeFilter=false;//是否被过滤的标志
      public MyTableModel()
      {
      }
      /**
       * 设置原始的结果数据集
       */
      public MyTableModel(java.sql.ResultSet rs) //public MyTableModel(ResultSet results)
      {
        if (rs==null)
        { System.out.println("no results ");
            return;
        }
        try
        {
          ResultSetMetaData metadata=rs.getMetaData();
          if (metadata==null)
          { System.out.println("no data ");
            return;
          }
          columnsCount=metadata.getColumnCount();//列数
          columnNames=new String[columnsCount];
          for (int i=0;i<columnsCount;i++)
          {
            columnNames[i]=metadata.getColumnLabel(i+1);
          }//填充列名
          int i=0;
          while (rs.next())  { i++;}  //计算行数
          rowsCount=i;
          i=0;
          rs.beforeFirst();
          dataRows=new Object[rowsCount][columnsCount];
          boolean more = rs.next();
          while( more )
          {
            for(int j=0;j<columnsCount;j++)
            {
              dataRows[i][j]=rs.getString(j+1);
            }
            i++;
            more = rs.next();
          }
          fireTableChanged(el);  //通知表格的视图,数据已经被改变
        }
        catch (SQLException e)
        {
          System.err.println(e);
        }
      }
      /*设置筛选的值*/
        public synchronized void  setFilterIndex(String index)
        {
         this.index = index;
            indexList.clear();
            isbeFilter=true;//设置已过滤状态
         // 检索数据源,得到新的索引
         for (int z = 0; z < rowsCount; z++)
         {
               String value=(String)dataRows[z][0];
            if (index.equals(value))
               indexList.add(new Integer(z));
         }
            // 通知组件行数已被改变
            this.fireTableChanged(new TableModelEvent(this));
        }
      /*得到标准筛选值*/
      public String getIndex()
      {
        return this.index;
      }
      /*得到表格的列数*/
      public int getColumnCount()
      {
        return columnsCount;
      }
      /*得到表格的行数*/
      public int getRowCount()
      { //如果被过滤则返回新的行值
        if (isbeFilter) return indexList.size();
        else return rowsCount;
      }
      /*得到指定列的列名*/
      public String getColumnName(int column)
      {
        return columnNames[column]==null?"No name":columnNames[column];
      }
      public Object getValueAt(int row,int col)
      {
        if (isbeFilter)
        {
          int newIndex = ((Integer) indexList.get(row)).intValue();
          return dataRows[newIndex][col];
        }
        else return ((String)(dataRows[row][col]));
      }
      /* model class define is over*/
    }