2015-04-21 2 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

* «Inces они вставляются динамически, я не знаю, сколько их будет». * Держите счет! –

+0

@AndrewThompson, Спасибо за подсказку. Но я до сих пор не могу получить к ним доступ через этот метод. – Dauta

+0

@ Даута: согласно моему ответу, вам понадобится рекурсия. и, согласно моему ответу, ** не делайте этого **. –

ответ

2

Да, класс Контейнер имеет метод getComponentCount(), и вы могли бы назвать instanceof, чтобы увидеть, если ваш Component является Container, бросайте его Container, вызовите этот метод, а затем рекурсивно этот путь не пройти через дерево контейнер/компонент до вы найдете интересующий вас JPanel –, но зачем вам подвергать себя риску и неприятностям, когда доступны более качественные решения?

Просто держите ссылки интересующих компонентов и обращайтесь к ним таким образом. И даже если компоненты добавляются во время выполнения, нет причин не устанавливать свой код, чтобы легко и безопасно хранить ссылку на него, если это необходимо. Это будет гораздо более надежное решение, чем попытка пройти через дерево компонентов, как вы это делаете.

+0

Кажется, что это может сработать, пытаясь это прямо сейчас. – Dauta

+0

К сожалению, извините, если вы переписываете свое дополнение в редактирование. : P –

+0

@AndrewThompson: Нет проблем, и спасибо за улучшения. –

Смежные вопросы