amp@java

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            99 隨筆 :: 0 文章 :: 228 評論 :: 0 Trackbacks
          SWT里TableEditor的作用是可以在表格里面顯示一些控件,例如列表、按鈕等,有時候是根據表格的內容在控件上顯示不同內容的,如果更新了表格內容,就要同時更新控件,但是表格內容可以通過Table控件的removeAll()來清除,而表格中的控件則無法用這個方法清除,你調用Table的removeAll()方法,往表格里填入新內容后,控件還是上次的控件,但是你一操作那些控件就會出異常,提示那些控件已經disposed。

          解決方法是顯式地調用控件及TableEditor的dispose()方法,在你建立TableEditor的時候,把它的引用保存起來,把里面的控件的引用也保存起來,到整個表格需要的清除的時候,通過引用先把控件dispose掉,再把TableEditor也dispose掉,這樣整個表格的內容就真正清除了。

          例如有一個表格名為table,里面的每一行都有3列,第一列是文本,第二列是Combo,第三列是Button,繪制表格的時候是這樣的:

          TableItem ti = new TableItem(table,SWT.NONE);
          ti.setText(
          0,"some string");
          te 
          = new TableEditor(table);
          Combo combo 
          = new Combo(table,SWT.NONE);
          controls.add(combo);
          te.setEditor(combo,ti,
          1);
          Button button 
          = new Button(table,SWT.NONE);
          controls.add(button);
          te.setEditor(button,ti,
          2);

          其中te和controls都是成員變量,te的類型是TableEditor,controls的類型是ArrayList<Control>。
          當整個table要清除內容時,可以這樣:
          //刪除控件
          for(Control control:controls){
          control.dispose();
          }
          //刪除TableEditor
          te.dispose();
          //刪除文本
          table.removeAll();
          posted on 2012-03-09 11:09 amp@java 閱讀(3850) 評論(0)  編輯  收藏 所屬分類: SWT

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


          網站導航:
           
          主站蜘蛛池模板: 南城县| 司法| 吉木乃县| 临汾市| 保定市| 乌恰县| 鹤峰县| 中山市| 化德县| 怀宁县| 陆良县| 太白县| 绵阳市| 顺昌县| 运城市| 临洮县| 海丰县| 远安县| 沈丘县| 收藏| 美姑县| 高阳县| 承德县| 黄龙县| 桂林市| 中宁县| 小金县| 辰溪县| 仪征市| 潞西市| 阳山县| 交城县| 应城市| 读书| 鹤壁市| 密山市| 云林县| 乳山市| 麻江县| 阜平县| 永昌县|