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 閱讀(3860) 評論(0)  編輯  收藏 所屬分類: SWT

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


          網站導航:
           
          主站蜘蛛池模板: 饶河县| 越西县| 阜南县| 赫章县| 黔江区| 榕江县| 双鸭山市| 拉孜县| 宁武县| 长沙市| 扎囊县| 周至县| 保定市| 苏尼特右旗| 长沙县| 海盐县| 靖江市| 吴江市| 大洼县| 大连市| 东乡族自治县| 宁津县| 珲春市| 綦江县| 大洼县| 乌苏市| 惠州市| 东光县| 扶绥县| 松原市| 冷水江市| 金门县| 台山市| 阿图什市| 黄山市| 旺苍县| 习水县| 城固县| 拉孜县| 武功县| 宁夏|