2014-10-17 75 views
0

我有複選框網格。我想遍歷它,但在循環過程中,所有項目都被視爲Widget。所以我必須投入循環,但出現令人驚訝的錯誤。它說GWT:標籤不能轉換爲com.google.gwt.user.client.ui.CheckBox

ClassCastException:com.google.gwt.user.client.ui。 標籤不能轉換爲com.google.gwt.user.client.ui的 。 複選框

這真的讓我感到驚訝。誰能解釋會發生什麼?當然,我可以添加複選框到列表中並循環,在這種情況下,投射應該可以工作。

這裏是我的代碼:

public void test() { 
    Grid checkBoxGrid = new Grid(); 
    checkBoxGrid.setWidget(0, 0, new CheckBox("first")); 
      // .. etc .. /// 
    checkBoxGrid.setWidget(1, 1, new CheckBox("fourth")); 

    for (Widget widgetBox : checkBoxGrid) { 
     CheckBox box = (CheckBox) widgetBox; // here is the problem 
     System.out.println(box.getValue()); 
    } 
} 

任何人有想法爲什麼會發生?

回答

1

儘管您正在添加複選框,但在網格中還存在很多其他對象(也稱爲標題目的的內置標籤),您不知道這些對象。發佈網格截圖可以展現出更好的效果。

再次回到實際問題,所有小部件都不是神奇複選框。還有其他的小部件。

當你是using iterator to get all the child widgets,內置小部件也進入迭代器。

檢查你的實例是否複選框,然後嘗試對它進行種姓。

for (Widget widgetBox : checkBoxGrid) { 
     if(widgetBox instanceof CheckBox){ 
     CheckBox box = (CheckBox) widgetBox; // No problem now 
     System.out.println(box.getValue()); 
    } } 
+0

好吧,我犯了很愚蠢的錯誤;網格還添加了一個標籤......對不起! – kiedysktos 2014-10-17 08:17:11