Добавление JScrollPane в JPanel без менеджера макетов

1

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

К моей проблеме я нашел аналогичную запись в stackoverflow, но решение так и не было достигнуто. Я добавляю динамическое количество JLabels к моему JPanel, я заметил, что при использовании диспетчера макетов скроллер не работает.

Это упрощенная версия моего кода инициализации.

JPanel mypanel = new JPanel();
mypanel.setLayout(null);
mypanel.setSize(800,450);
mypanel.setForeground(Color.WHITE);
mypanel.setBackground(Color.BLACK);
scrollablePanel = new JScrollPane(mypanel);
scrollablePanel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollablePanel.setPreferredSize(new Dimension(800,300));
scrollablePanel.setSize(800,300);
scrollablePanel.setLocation(250,156);
myContainer.add(scrollablePanel);

где myContainer будет контейнером (также без менеджера компоновки). JLabels добавляются позже к JPanel с:

enter code here mypanel.add(label1);

после установки некоторых базовых настроек для таких меток, как setForeground и setBackground.

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

http://i.imgur.com/zp0QKGG.png

Текст таблицы, изображенный на изображении, состоит из нескольких JLabels. Если не удастся решить проблему без использования Менеджера макета, я переключусь на BoxLayout, я просто надеялся, что будет решение.

Теги:
swing
jpanel
jscrollpane

1 ответ

4
Лучший ответ

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню