Автоматическое изменение размера JTextArea

Я хочу, чтобы мой JTextArea изменял свой размер (расширялся по вертикали), когда была достигнута последняя строка (которую может предложить высота текстовой области), и пользователь хочет начать новую строку. Вы знаете, как текстовое поле в MSWord.

У меня есть идея использовать getLineCount() и определить (при необходимости) новую высоту JTextArea. У вас есть или вы знаете лучшие подходы для реализации этого?


person Halo    schedule 08.04.2010    source источник


Ответы (4)


На самом деле JTextArea всегда имеет правильный размер, поэтому видны все строки текста. Вероятно, вы столкнулись с тем, что вы обернули текстовую область в JScrollPane. Просто опустите панель прокрутки и сделайте текстовую область прямым дочерним элементом контейнера.

Другим решением является прослушивание событий изменения размера текстовой области и соответствующего размера области прокрутки. Таким образом, вы можете вырасти до определенного размера, а затем начать отображать полосы прокрутки (например, когда кто-то вставляет 500 КБ текста в текстовую область).

person Aaron Digulla    schedule 08.04.2010
comment
Я просто добавляю JTextArea в JPanel. Это что-то с установкой размера? Но если я не задаю размер, то он не отображается. - person Halo; 08.04.2010
comment
Вам просто нужно установить размер JPanel, чтобы текстовая область могла увеличиваться. Текстовая область должна автоматически подстраиваться под размер текста внутри. - person Aaron Digulla; 09.04.2010
comment
ну не получилось. Кстати, я перешел на использование JTextPane, но проблема с расширением все еще сохраняется. - person Halo; 09.04.2010
comment
хм, я думаю, это проблема с настройкой текста. Я использую setText(), но, возможно, мне следует использовать insertString(). я попробую это - person Halo; 09.04.2010

У меня такая же проблема. Из моих тестов я не верю, что JTextArea динамически устанавливает свой размер. Вместо этого его размер, кажется, ограничен его контейнером (в моем случае это JPanel). Однако JTextArea изменяет свой предпочтительный размер в зависимости от содержащегося в нем текста. Из документации:

java.awt.TextArea имеет две строки свойств и столбцы, которые используются для определения предпочтительного размера. JTextArea использует эти свойства, чтобы указать предпочтительный размер области просмотра при размещении внутри JScrollPane, чтобы соответствовать функциональным возможностям, предоставляемым java.awt.TextArea. JTextArea имеет предпочтительный размер, необходимый для отображения всего текста, чтобы он правильно функционировал внутри JScrollPane. Если значение для строк или столбцов равно нулю, предпочтительный размер по этой оси используется для предпочтительного размера окна просмотра по той же оси.

person Hillary Ryan    schedule 26.12.2012

Перейдите в JTextArea "Свойства" - контрольный список "lineWrap".

person Arvy Dharmmaparayaandhika    schedule 25.06.2018

У меня была та же проблема: я поместил JTextArea в JScrollPane и установил предпочтительный размер JTextArea, и я считаю, что это причина проблемы.

Таким образом, правильное решение - поместить JTextArea в JScrollPane и не трогать предпочтительный размер JTextArea, вместо этого установите JScrollPane.

person MrVPlusOne    schedule 07.03.2016