Получить JPanel в JScrollPane

У меня есть JScrollPane, и я помещаю JPanel в JScrollPane. JPanel содержит переменное количество JLabels.

Вот как я "новый" это:

JPanel dataPanel  = new JPanel();
//then do a for loop to put a few JLabels in dataPanel
JScrollPane scrollPane = new JScrollPane(dataPanel);

Мне было интересно, как я могу получить эти JLabel в другом классе? Я попробовал следующий код, но не работает с ClassCastException. В этом классе мне удалось получить JScrollPane, и я буду использовать scrollPane для его представления.

//I only put a panel in the JScrollPane, so I used 0 in the getComponent() method
JPanel panel = scrollPane.getComponent(0);
for(int i = 0; i < panel.getComponentCount(); i++){
    JLabel label = (JLabel)panel.getComponent(i);
}

На самом деле в заявлении:

JPanel panel = scrollPane.getComponent(0);

Выбрасывается исключение ClassCastException.

java.lang.ClassCastException: javax.swing.JViewport cannot be cast to javax.swing.JPanel

Признателен за помощь :)


person user1888955    schedule 26.05.2015    source источник


Ответы (1)


JScrollPane#getViewport#getView

Вам придется вернуться к типу вашего компонента

Лучшим решением было бы поддерживать список JLabel в массиве или List

person MadProgrammer    schedule 26.05.2015