SWT里面加了TableEditor后如何删除

SWT里面加了TableEditor后如何删除
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();


你可能感兴趣的:(SWT里面加了TableEditor后如何删除)