Как заставить JScrollPane правильно работать с вложенными JPanels? - PullRequest
3 голосов
/ 04 марта 2011

Я создаю Swing-приложение на Java, используя NetBeans, и у меня проблема с макетом.Мой основной фрейм содержит JScrollPane, который содержит JPanel, называемый contentPanel, который, в свою очередь, содержит JPanel, называемый listPanel.listPanel пусто при запуске программы, но когда пользователь взаимодействует с программой, к ней добавляется непредсказуемое число меньших JPanel s.Я использовал GUI-конструктор NetBeans, чтобы привязать верхний край listPanel к верху contentPanel и то же самое с нижними краями.

Проблема в том, что когда больше компонентовдобавлено к listPanel вертикальная полоса прокрутки не отображаются на моей полосе прокрутки.verticalScrollBarPolicy моей полосы прокрутки установлено на AS_NEEDED, а viewportView установлено на contentPanel.Я думаю, что мне нужно сделать так, чтобы contentPanel рос, когда в listPanel.

добавлено больше предметов.

Ответы [ 2 ]

3 голосов
/ 04 марта 2011

Проблема, с которой я столкнулся, заключается в том, что когда в listPanel добавляется больше компонентов, вертикальная полоса прокрутки не появляется на моей панели прокрутки.

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

panel.add( subPanel );
panel.revalidate();

Или, поскольку вы добавляете панель на вспомогательную панель, вам может потребоваться повторная проверка панели прокрутки (я не помню):

panel.add( subPanel );
scrollPane.revalidate();   

Ключом является revalidate (), который сообщает менеджеру раскладки пересчитать его размер.

1 голос
/ 04 марта 2011

Используйте другой LayoutManager.Тот, который позволит вертикальный рост, как BoxLayout.Также помните, что вы можете использовать несколько макетов и вкладывать их друг в друга для получения различных эффектов.

...