Ответ 1
Посмотрите Wrap Layout
Ребята, мне нужно поместить некоторые кнопки в панель jscrollpanel, но JScrollPane не будет создавать прокрутку по вертикали. Я использую JPanel внутри JScrollPane, который использует простой макет FlowLayout. Как заставить JScrollPanel прокручиваться только по вертикали?
Проблема:
Требуемое решение:
Посмотрите Wrap Layout
Тот факт, что вы используете JScrollPane
, меняет немало вещей, касающихся внутреннего FlowLayout
. действительно, когда FlowLayout пытается создать макет, содержащий JButtons, он использует для этого доступное пространство. В вашем случае у вас нет ограничений на пространство в "прокручиваемом клиенте" вашего JScrollPane. Как следствие, если ваш FlowLayout имеет бесконечное пространство, он использует это пространство для отображения элементов в соответствии с ним.
Таким образом, решение заключалось бы в изменении вашего прокручиваемого клиента, чтобы ограничить область видимости тем же, что и ваш JScrollPane JViewport
.
Однако вы даже в этом случае не вернете свою строку, поскольку FlowLayout не очень хорошо справляется с этим случаем.
Если бы я был вами, я бы, конечно, выбрал другой макет. Поскольку GridLayout
не очень хорошо обрабатывает границы, я думаю, что единственный разумный стандартный макет, который вы можете использовать, - это GridBagLayout
, тем не менее, я боюсь, что ваши ограничения динамического содержимого могут потребовать от вас что-то еще более настраиваемое.
JTextArea c = new JTextArea();
c.setLineWrap(true);
c.setWrapStyleWord(false);
Это приведет к переносу всего текста в текстовую область на следующую строку без создания горизонтальной прокрутки.
Использовать измененный макет потока, который я опубликовал в этом ответе: Как я могу позволить JToolBars переносить на следующую строку (FlowLayout) без их скрытия от JPanel под ними?
Он будет перенесен на следующую строку, и ваша полоса прокрутки должна прокручиваться по вертикали.
scrollbar = new Scrollbar(Scrollbar.VERTICAL);
Или вы можете использовать JList.
Смотрите этот сайт для получения дополнительной информации: http://docs.oracle.com/javase/tutorial/uiswing/components/list.html
класс example: ListDialog использует только вертикальную полосу прокрутки, когда размер окна изменяется или элементы не соответствуют представлению.