2015-04-21 40 views
0

因此,我正在研究此應用程序,其中有JPanel對象填充了外部面板。我希望在外部面板內循環顯示面板(因爲它們是動態插入的,我不知道會有多少面板)並訪問它們的組件。然而,只有.getComponentCount()getComponent()爲面板定義,它不允許我查找它的嵌套組件。通過Java Swing中的容器內嵌套容器循環

for(int i = 0; i < pl.playlistDisplay.getComponentCount(); i++) 
{ 
    // for(int j = 0; j < pl.playlistDisplay.getComponent(i).getComponentCount()) //line with the problem 
    pl.playlistDisplay.getComponent(i).setForeground(baseColor); 
} 

是否有類似.getContainerCount(),我可以用它來代替?或者任何其他方式能夠訪問嵌套容器的組件?

+0

*「因爲它們被動態插入,我不知道會有多少」*保持計數! –

+0

@AndrewThompson,謝謝你的提示,我會的。但我仍然無法通過這種方法訪問它們。 – Dauta

+0

@Dauta:根據我的回答,你需要遞歸。並根據我的回答,**不要**這樣做。 –

回答

2

是,容器類有一個getComponentCount()方法,你可以調用instanceof,看看你的ComponentContainer,將其轉換爲Container,調用此方法,然後遞歸這樣經過容器/組件樹,直到你會發現感興趣的JPanel –但是當更好的解決方案即將出現時,爲什麼要讓自己渡過風險和麻煩?

只需保留感興趣組件的引用並以這種方式訪問​​它們。即使在運行時添加了組件,也沒有理由不能設置您的代碼,以便在需要時輕鬆安全地存儲引用。這將是一個更強大的解決方案,而不是像你在做的那樣嘗試遍歷組件樹。

+0

似乎它可能工作,現在嘗試。 – Dauta

+0

哎呀..對不起,覆蓋您的編輯添加。 :P –

+0

@AndrewThompson:沒問題,謝謝你的改進。 –