<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    feng

    飄逸~~~~~life

    Jtable的逐行顯示解決方法一個(gè)

     

    因?yàn)楣镜捻?xiàng)目要求最近接觸了點(diǎn)SWING的東西,用到了jtable,原本

    使用類似

    Object[][] o;

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

                        "行號(hào)", "倉(cāng)庫(kù)名稱", "化學(xué)品名稱", "計(jì)量單位", "已記錄庫(kù)存", "實(shí)際庫(kù)存", "是否一致"

                    }

    我們只需要根據(jù)我們數(shù)據(jù)量的大小動(dòng)態(tài)的初始化Object[][] o的大小,然后下面一個(gè)一個(gè)賦值,比如

    O[0][0]表示第一行第一列的值,一個(gè)一個(gè)賦值,然后

    jTable1.repaint();重新繪圖就可以了。

    顯示方法具體就不介紹了,我想介紹下逐行顯示的問(wèn)題。如果數(shù)據(jù)量小的話,你直接用上面的就可以了。

    但是數(shù)據(jù)量大的時(shí)候,得到我們的數(shù)據(jù)可能就要很長(zhǎng)的時(shí)間,反正是所有的賦值結(jié)束才能顯示出來(lái)。于是我們就想有逐行顯示的效果。

    然后你會(huì)發(fā)現(xiàn)一個(gè)增加一行的方法,是這樣的

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

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

    調(diào)用這個(gè)就可以往最后增加一行

    也許一開(kāi)始我們肯定都是這樣,有個(gè)監(jiān)聽(tīng)觸發(fā)

    類似如下:

    publicvoid actionPerformed(ActionEvent e) {

    //1.得到我們要顯示的數(shù)據(jù)集合

    //2.循環(huán)調(diào)用上面的 insertRow方法

    //我就用個(gè)循環(huán)代替下

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

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

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

                   

                            Thread.sleep(1000);

              

    }

    }

    我們期待的結(jié)果:

    插了一行,過(guò)了一秒,下一行出來(lái)了

    實(shí)際的結(jié)果呢?

    等著,沒(méi)反應(yīng),最后100條一起顯示出現(xiàn)。

    實(shí)際上這個(gè)問(wèn)題我困惑了蠻久,最后終于發(fā)現(xiàn)了原因,只要是監(jiān)聽(tīng),只有等等個(gè)監(jiān)聽(tīng)方法執(zhí)行完畢了,它才開(kāi)始刷新界面。你調(diào)用什么刷新方法都是沒(méi)用的

    那么我們?cè)趺唇鉀Q呢?

    當(dāng)然是線程拉,簡(jiǎn)單的講就是監(jiān)聽(tīng)方法只負(fù)責(zé)啟動(dòng)線程。

    插入的部分放到線程的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);

               }

    }

    這只是一個(gè)示例,實(shí)際的情況是還需要去數(shù)據(jù)庫(kù)取藥顯示的集合,我給大家一個(gè)建議

    啟兩個(gè)線程,一個(gè)線程負(fù)責(zé)查詢集合,一個(gè)線程負(fù)責(zé)插入,

    插入的線程需要實(shí)時(shí)的查看數(shù)據(jù)集合是否有新的數(shù)據(jù),有馬上顯示出來(lái)。

    這樣的話,即使計(jì)算量很大,我們也不需要全部計(jì)算完成,才可以一條條顯示,增加喲過(guò)戶體驗(yàn)哦。

    給大家一個(gè)可以運(yùn)行的JAVA文件吧,有興趣的可以下載來(lái)看看那。

    點(diǎn)中間那個(gè)按鈕絕對(duì)一行行逐行顯示的。
    Jtable.java

    posted on 2009-10-30 17:24 feng 閱讀(2147) 評(píng)論(4)  編輯  收藏

    Feedback

    # re: Jtable的逐行顯示解決方法一個(gè)[未登錄](méi) 2009-11-02 11:50 zeyuphoenix

    SwingUtilities.invokeLater(runable)
    接口里.fireTableDataChanged();我一般都這樣實(shí)現(xiàn)  回復(fù)  更多評(píng)論   

    # re: Jtable的逐行顯示解決方法一個(gè) 2009-11-02 17:26 咖啡妝

    如何解決效率,這樣應(yīng)該會(huì)不停的刷界面吧。  回復(fù)  更多評(píng)論   

    # re: Jtable的逐行顯示解決方法一個(gè)[未登錄](méi) 2009-11-03 08:57 feng

    這樣沒(méi)有刷新整個(gè)界面,局部的,就是增加一行@咖啡妝
      回復(fù)  更多評(píng)論   

    # re: Jtable的逐行顯示解決方法一個(gè) 2009-11-04 17:46 keer

    ..  回復(fù)  更多評(píng)論   



    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲AV无码一区二区三区国产| 99热在线精品免费全部my| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 日本免费人成网ww555在线| 中文字幕在线亚洲精品 | 天堂亚洲免费视频| 亚洲福利在线播放| 国产成人无码精品久久久免费| 国产亚洲精久久久久久无码77777| 任你躁在线精品免费| 亚洲av日韩av无码黑人| 98精品全国免费观看视频| 亚洲第一页在线播放| 欧美在线看片A免费观看| 亚洲欧美在线x视频| 亚洲伊人成无码综合网 | 毛片a级毛片免费播放100| 久久久久久亚洲av无码蜜芽| 免费a级毛片大学生免费观看| 一本一道dvd在线观看免费视频| 亚洲国产日韩在线视频| 在线a免费观看最新网站| 亚洲综合一区二区三区四区五区| 国产乱子伦精品免费女| 中国在线观看免费的www| 亚洲色大成网站www永久| 在线免费观看污网站| a级毛片免费高清视频| 亚洲精品欧洲精品| 国产免费资源高清小视频在线观看| j8又粗又长又硬又爽免费视频| 337p日本欧洲亚洲大胆艺术| 好男人视频在线观看免费看片| 免费福利资源站在线视频| 无码乱人伦一区二区亚洲一| 97无码免费人妻超级碰碰碰碰| 一级做a爰片性色毛片免费网站| 久久精品国产亚洲AV嫖农村妇女| 青青草国产免费久久久下载| 国精产品一区一区三区免费视频| 色在线亚洲视频www|