在GWT中,在widget的方法remove是非常常用的,但请您好好注意一个小问题:
当你用循环remove时,请注意最好使用倒循环,因为如果你要是用正循环的话,remove一个widget后,他的下个widget就会到他的“位置”,例如:
int count = widgetPanel.getWidgetCount() ;
for(int i = 0 ; i < count ; i ++ )
{
widgetPanel.remove(i) ;
}
这样肯定会出异常的;
因为当你remove掉第一个widget后,第二个widget就变成第一个widget了,所以,当你认为remove掉第二个时,其实是把原来的第三个widget给remove掉了;
解决方案:
1.倒循环:
int count = widgetPanel.getWidgetCount() ;
for(int i = count - 1 ; i >= 0 ; i -- )
{
widgetPanel.remove(i) ;
}
这样就不会出现以上的情况:)
2.remove第一个;
int count = widgetPanel.getWidgetCount() ;
for(int i = 0 ; i < count ; i ++ )
{
widgetPanel.remove(0) ;
}
这种方法,也正说明了GWT转换成javascript后的特性,它是根据remove的元素,在他父元素里的“位置”进行remove,这点是和Swing最大的区别,一定要注意哟:)