Как заставить JScrollPane выполнять только прокрутку по вертикали?

Ребята, мне нужно поместить некоторые кнопки в панель jscrollpanel, но JScrollPane не будет создавать прокрутку по вертикали. Я использую JPanel внутри JScrollPane, который использует простой макет FlowLayout. Как заставить JScrollPanel прокручиваться только по вертикали?

Проблема:

enter image description here

Требуемое решение: enter image description here

Ответы

Ответ 2

Тот факт, что вы используете JScrollPane, меняет немало вещей, касающихся внутреннего FlowLayout. действительно, когда FlowLayout пытается создать макет, содержащий JButtons, он использует для этого доступное пространство. В вашем случае у вас нет ограничений на пространство в "прокручиваемом клиенте" вашего JScrollPane. Как следствие, если ваш FlowLayout имеет бесконечное пространство, он использует это пространство для отображения элементов в соответствии с ним.

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

Однако вы даже в этом случае не вернете свою строку, поскольку FlowLayout не очень хорошо справляется с этим случаем.

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

Ответ 3

JTextArea c = new JTextArea();
c.setLineWrap(true);
c.setWrapStyleWord(false);

Это приведет к переносу всего текста в текстовую область на следующую строку без создания горизонтальной прокрутки.

Ответ 4

Использовать измененный макет потока, который я опубликовал в этом ответе: Как я могу позволить JToolBars переносить на следующую строку (FlowLayout) без их скрытия от JPanel под ними?

Он будет перенесен на следующую строку, и ваша полоса прокрутки должна прокручиваться по вертикали.

Ответ 5

scrollbar = new Scrollbar(Scrollbar.VERTICAL);

Ответ 6

Или вы можете использовать JList.

Смотрите этот сайт для получения дополнительной информации: http://docs.oracle.com/javase/tutorial/uiswing/components/list.html

класс example: ListDialog использует только вертикальную полосу прокрутки, когда размер окна изменяется или элементы не соответствуют представлению.