2011-08-08 37 views
0

我有一個面板,其中包含一堆(多選)列表框,每個面板都有自己的面板,我需要弄清楚列表框中選定的值是什麼。通過API,我可以看到這樣做的唯一途徑去,是(僞):GWT:訪問面板內面板的列表框

for (Wigdet w : outerPanel) 
    Panel innerPanel = (Panel) w; 
    for (Widget s : innerPanel) // only has the ListBox in it 
    ListBox box = (ListBox) s; 
    // do stuff with the ListBox to populate the list of selected options 

麻煩的是與鑄造 - Eclipse不抱怨,它編譯罰款,但運行時它會產生一個ClassCastException (在第一次演員 - 我認爲它也會在第二次有同樣的問題,但因爲我無法得到它,我不能肯定地說)

什麼是正確的方法來做到這一點?

+0

w.getClass()在發生ClassCastException的地方返回什麼?我的意思是使用你的調試器停止在這一點,並把w.getClass()。getName()在監視列表中。 –

+0

使用[UI活頁夾](http://code.google.com/webtoolkit/doc/latest/DevGuideUiBinder.html)查看聲明性佈局... ...要簡單得多。 – Jason482

回答

0

得到它的工作。顯然,GWT會將自己的小部件插入到面板中,除了自己添加的小部件(因此,創建面板然後將ListBox添加到in中將導致不僅僅是迭代中的一個小部件)。

所以要解決這個問題,鑄造

+1

在投出變體之前,你應該總是進行類型檢查;)(它甚至不會影響性能,因爲如果你投了一些東西,它會進行類型檢查,並且如果你這樣做,那麼它會記錄已經發生的類型檢測) – Stefan

0

爲什麼你就不能聲明爲實例變量之前在instanceof檢查拋出?

+0

,因爲有一個可怕的很多。我可以把它們放在一個列表中,然後像那樣通過它們,但是因爲我剛剛將它們添加到了一個Panel中(而沒有其他),所以我認爲只是通過它而已 – Mala