JTextArea в JTextPane - нужна новая строка

Я хочу добавить текст в JTextArea и иметь полосу автоматической прокрутки по вертикали.

но при наборе текста по горизонтали я хочу автоматически создавать новую строку, когда в строке нет места. Если я использую только JTextArea, все в порядке, но когда я помещаю ее в JScrollPane, при необходимости новая строка не создается.

Как я могу это сделать?

Спасибо!


person DudiD    schedule 25.01.2012    source источник


Ответы (3)


вам нужно настроить textArea для переноса:

textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);

Вы можете прочитать базовое руководство, чтобы эффективно начать работу :-)

person kleopatra    schedule 26.01.2012

По умолчанию JTextArea не переносит текст, поэтому вам нужно вручную определить это поведение:

textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);

Также убедитесь, что вы правильно настраиваете JScrollPane:

JScrollPane sp = new JScrollPane(textArea);

//JScrollPanes are just like JPanels (except for the scrollbars) so be careful not to just add the JComponent to your frame; add the container instead.

frame.add(sp);

В качестве примечания прочтите учебник @kleopatra, любезно предложенный чтобы получить хорошую прочную основу для текстовых областей.

person fireshadow52    schedule 26.01.2012

Разве JTextArea не реализует интерфейс Scrollable? Итак, зачем вам JScrollPane?

Отредактируйте свой комментарий, это работает для меня:

JScrollPane sP= new JScrollPane(txtarea);
sP.setBounds(10,60,780,500);
sP.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
person Stefan    schedule 25.01.2012
comment
При необходимости полоса прокрутки не отображается. Я установил для автопрокрутки значение true - person DudiD; 25.01.2012
comment
Можете ли вы опубликовать код, как вы поместили его в JScrollPane? Я редактирую сообщение выше с кодом, который работает для меня как минимальная концепция - person Stefan; 25.01.2012
comment
-1 за распространение случайных догадок (Scrollable != JScrollPane). Более того, setBounds всегда делать не стоит — вместо этого используйте приличный LayoutManager и пусть он делает свою работу. - person kleopatra; 26.01.2012