Прежде чем я начну, я знаю, что его плохая идея не использовать диспетчер макета и, как правило, я его использую, однако у меня также есть все мои компоненты, автоматически меняющие размер и перемещение в зависимости от размера окна. Кроме того, программа, над которой я работаю, предназначена только для работы на одной машине на протяжении всей ее жизни. Пожалуйста, не уменьшайте меня только из-за отсутствия менеджера макета, я нашел, что это то, что мне нужно для этой конкретной программы.
К моей проблеме я нашел аналогичную запись в 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, я просто надеялся, что будет решение.
Проблема заключается в том, что JScrollPanel
нуждается в предпочтительном размере компонента вида, чтобы определить, когда представление превышает область просмотра панели прокрутки.
Предпочтительный размер компонента обычно определяется менеджером компоновки. Хотя вы можете использовать setPreferredSize
, он обычно обескуражен, и вы просто столкнетесь с той же проблемой, что и контент, превышающий то, что вы когда-либо определяли.
Лучшим решением было бы использовать LayoutManager
или составной макет (используя несколько менеджеров компоновки над несколькими контейнерами), чтобы достичь желаемого результата... или написать собственный...