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 閱讀(2137) 評論(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

          ..  回復  更多評論   



          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 屯留县| 陆丰市| 济宁市| 任丘市| 托里县| 牙克石市| 兰考县| 将乐县| 长治市| 镇原县| 芦溪县| 葵青区| 武陟县| 安义县| 潞西市| 安阳县| 积石山| 八宿县| 巴彦淖尔市| 高淳县| 岑溪市| 基隆市| 呼图壁县| 保靖县| 永川市| 长武县| 合阳县| 秦安县| 聂拉木县| 合作市| 防城港市| 弋阳县| 余干县| 睢宁县| 巴马| 马山县| 大连市| 江孜县| 益阳市| 阜城县| 乐山市|