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

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

:

enter image description here

Нужное Решение: enter image description here

6 ответов


Проверьте Обернуть Макет


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

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

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

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


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

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