feng

飘逸~~~~~life

Jtable的逐行显示解决方法一个

 

因为公司的项目要求最近接触了点SWING的东西,用到了jtable,原本

使用类似

Object[][] o;

jTable1.setModel(new javax.swing.table.DefaultTableModel(o, new String[]{

                    "行号", "仓库名称", "化学品名称", "计量单位", "已记录库存", "实际库存", "是否一致"

                }

我们只需要根据我们数据量的大小动态的初始化Object[][] o的大小,然后下面一个一个赋值,比如

O[0][0]表示第一行第一列的值,一个一个赋值,然后

jTable1.repaint();重新绘图就可以了。

显示方法具体就不介绍了,我想介绍下逐行显示的问题。如果数据量小的话,你直接用上面的就可以了。

但是数据量大的时候,得到我们的数据可能就要很长的时间,反正是所有的赋值结束才能显示出来。于是我们就想有逐行显示的效果。

然后你会发现一个增加一行的方法,是这样的

model.insertRow(table.getSelectedRow(), new Object[] {

      "追加列_0_0_0", "追加列_0_0_0", "追加列_0_0_0" });

调用这个就可以往最后增加一行

也许一开始我们肯定都是这样,有个监听触发

类似如下:

publicvoid actionPerformed(ActionEvent e) {

//1.得到我们要显示的数据集合

//2.循环调用上面的 insertRow方法

//我就用个循环代替下

for(int i=0;i<100;i++){

                 model.insertRow(model.getRowCount(), new Object[] { "追加列_0_0",

                   "追加列_0_0", "追加列_0_0" });

               

                        Thread.sleep(1000);

          

}

}

我们期待的结果:

插了一行,过了一秒,下一行出来了

实际的结果呢?

等着,没反应,最后100条一起显示出现。

实际上这个问题我困惑了蛮久,最后终于发现了原因,只要是监听,只有等等个监听方法执行完毕了,它才开始刷新界面。你调用什么刷新方法都是没用的

那么我们怎么解决呢?

当然是线程拉,简单的讲就是监听方法只负责启动线程。

插入的部分放到线程的RUN里。

类似下面:

publicvoid actionPerformed(ActionEvent e) {

     Thread thread= new Thread(this);

       thread.start();

     }

publicvoid run() {

    // TODO Auto-generated method stub

   

    while(true){

      

                 model.insertRow(model.getRowCount(), new Object[] { "追加列_0_0",

                   "追加列_0_0", "追加列_0_0" });

               // System.out.println(model.getRowCount());

               

          

              Thread.currentThread().sleep(1000);

           }

}

这只是一个示例,实际的情况是还需要去数据库取药显示的集合,我给大家一个建议

启两个线程,一个线程负责查询集合,一个线程负责插入,

插入的线程需要实时的查看数据集合是否有新的数据,有马上显示出来。

这样的话,即使计算量很大,我们也不需要全部计算完成,才可以一条条显示,增加哟过户体验哦。

给大家一个可以运行的JAVA文件吧,有兴趣的可以下载来看看那。

点中间那个按钮绝对一行行逐行显示的。
Jtable.java

posted on 2009-10-30 17:24 feng 阅读(2106) 评论(4)  编辑  收藏

Feedback

# re: Jtable的逐行显示解决方法一个[未登录] 2009-11-02 11:50 zeyuphoenix

SwingUtilities.invokeLater(runable)
接口里.fireTableDataChanged();我一般都这样实现  回复  更多评论   

# re: Jtable的逐行显示解决方法一个 2009-11-02 17:26 咖啡妆

如何解决效率,这样应该会不停的刷界面吧。  回复  更多评论   

# re: Jtable的逐行显示解决方法一个[未登录] 2009-11-03 08:57 feng

这样没有刷新整个界面,局部的,就是增加一行@咖啡妆
  回复  更多评论   

# re: Jtable的逐行显示解决方法一个 2009-11-04 17:46 keer

..  回复  更多评论   



只有注册用户登录后才能发表评论。


网站导航: