在Java表格中刷新数据
1、窗体frame中有一个表格和按钮,运行后,表格从数据库中查出30数据,并显示到表格中
2、点击按钮后表格开始刷新,每隔500ms从后台读取一条数据刷新到表格中,
3、表格显示的数据行数固定在30条
本人在第2项的时候卡住了,不知道怎么个思路不断刷新表格,
我是用的是继承AbstractTableModel,重写几个必要的方法,在这个类中,使用数据的形式添加了表头和内容,刷新表格的代码不能实现。只能简单的从数据库中刷出30条记录放到表格中,不能实现1条的刷新

解决方案 »

  1.   

    用ajax获取数据。 然后 追加最后一条进去。  这样就实现一条的刷新
      

  2.   

    本人用DefaultTableModel用的多,先给个DefaultTableModel的例子给你看,意思都差不多,我是用Timer定时器定时给DefaultTableModel内容更新。代码如下:import java.awt.Dimension;
    import java.util.*; 
    import javax.swing.*;
    import javax.swing.table.*; public class TF extends JFrame {
    JPanel jp=(JPanel)this.getContentPane();
    JScrollPane productjsp = new JScrollPane();
    public static JTable mattertb = new JTable(); 
    public static DefaultTableModel matterb = new DefaultTableModel();
        public TF()
        {
         java.util.Timer timer = new java.util.Timer();
    timer.schedule(new TimerTask() {
    public void run() {
    try {   
     ref();//定时刷新
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }, 0, 1000);//定时器,定时时间1秒(1000ms)
    jbInit();
        }
        public void ref()
        {
         String[] header={"序号","数据一","数据二"}; //换成你的DAO封装方法调用数据
         Object[][] data=new Object[30][3];
         for(int i=0;i<30;i++)
         {
         data[i][0]=i+1;
         for(int j=0;j<2;j++)
         { 
         Random rand=new Random();
         data[i][j+1]=rand.nextInt(100);
         }
         }
         matterb.setDataVector(data, header); 
         mattertb.setModel(matterb);
        }
        public void jbInit()
        {
         String[] header={"序号","数据一","数据二"}; //换成你的DAO封装方法调用数据
         Object[][] data=new Object[30][3];
         for(int i=0;i<30;i++)
         {
         data[i][0]=i+1;
         for(int j=0;j<2;j++)
         { 
         Random rand=new Random();
         data[i][j+1]=rand.nextInt(100);
         }
         }
         matterb.setDataVector(data, header); 
         mattertb.setModel(matterb);
         mattertb.getTableHeader().setPreferredSize(new Dimension(1,25));
         mattertb.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         mattertb.setRowHeight(25); 
         productjsp.getViewport().add(mattertb); 
         jp.add(productjsp, java.awt.BorderLayout.CENTER); 
        }
      
    public static void main(String[] args) { 
        TF frame=new TF();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800,600);
        frame.setVisible(true);

    }
      

  3.   

    这么跟这么上面的功能其实没有区别啊。你现在要的时间是500ms,那就是说没半秒就要刷新一次。那么你的查询语句为:
    select * from ytable limit 30 order by id desc(mysql)
    select top 10 * from ytable order by id desc (mssql都忘记怎么写了)
    (假设你的id为主键,自动添加,那么数据的先后可以通过id判断)。那么这个查询每次都是查询最新的30条数据。
    那么把这块的数据替换成你结果集查询出来的这最新30调数据即可:   public void ref()
        {
            String[] header={"序号","数据一","数据二"}; //换成你的DAO封装方法调用数据
            Object[][] data=new Object[30][3];
            for(int i=0;i<30;i++)
            {
                data[i][0]=i+1;
                for(int j=0;j<2;j++)
                { 
                    Random rand=new Random();
                    data[i][j+1]=rand.nextInt(100);//这些数据替换成你的最新数据即可。
                }
            }
            matterb.setDataVector(data, header); 
            mattertb.setModel(matterb);
        }