在GWT中,在widget的方法remove是非常常用的,但請(qǐng)您好好注意一個(gè)小問題:
當(dāng)你用循環(huán)remove時(shí),請(qǐng)注意最好使用倒循環(huán),因?yàn)槿绻阋怯谜h(huán)的話,remove一個(gè)widget后,他的下個(gè)widget就會(huì)到他的“位置”,例如:
int count = widgetPanel.getWidgetCount() ;
for(int i = 0 ; i < count ; i ++ )
{
widgetPanel.remove(i) ;
}
這樣肯定會(huì)出異常的;
因?yàn)楫?dāng)你remove掉第一個(gè)widget后,第二個(gè)widget就變成第一個(gè)widget了,所以,當(dāng)你認(rèn)為remove掉第二個(gè)時(shí),其實(shí)是把原來的第三個(gè)widget給remove掉了;
解決方案:
1.倒循環(huán):
int count = widgetPanel.getWidgetCount() ;
for(int i = count - 1 ; i >= 0 ; i -- )
{
widgetPanel.remove(i) ;
}
這樣就不會(huì)出現(xiàn)以上的情況:)
2.remove第一個(gè);
int count = widgetPanel.getWidgetCount() ;
for(int i = 0 ; i < count ; i ++ )
{
widgetPanel.remove(0) ;
}
這種方法,也正說明了GWT轉(zhuǎn)換成javascript后的特性,它是根據(jù)remove的元素,在他父元素里的“位置”進(jìn)行remove,這點(diǎn)是和Swing最大的區(qū)別,一定要注意喲:)