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 阅读(3532) 评论(0)  编辑  收藏 所属分类: SWT

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


网站导航: