Во всех примерах, которые я могу найти, что использовать JTextArea
, ширина высота & известна перед тем построения JTextArea
, и если JTextArea
потребуется больше высоты, то он помещается внутри JScrollPane
. Очевидно, что высота JTextArea
зависит от ширины и содержимого текста.Как создать JTextArea с указанной шириной и наименьшей возможной высотой, необходимой для отображения всего текста?
Теперь моя ситуация требует, чтобы я не использовал JScrollPane
, но вместо этого, чтобы JTextArea
был достаточно высок, чтобы отобразить весь текст. Когда я создаю JTextArea
, я знаю содержание текста и сколько ширины ему придется работать; Я не знаю высоты - я хочу, чтобы это было как можно меньше, не отрезая ни одного текста. Это кажется очень трудным для достижения.
В качестве примечания стороны добавляется JTextArea
к JPanel
, у которого нет менеджера компоновки - он использует абсолютное позиционирование на основе предпочтительного размера добавленного компонента. Это требует, чтобы мой JTextArea
вернул правильные размеры на getPreferredSize()
. Правильные размеры должны быть той шириной, которую я предоставил, когда я ее построил, и минимальной высотой, необходимой для отображения всего текста с предоставленной шириной.
Я нашел несколько похожих тем, которые обсуждают странности/ошибки, связанные с JTextArea
, которые иногда решаются путем вызова pack()
дважды в родительском контейнере. Это не вариант для меня. Я соблазн в основном создать свой собственный JTextArea
, который принимает ширину и строку и вычисляет необходимую минимальную высоту в зависимости от ширины и настроек шрифта, но я решил, что сначала попрошу, прежде чем тратить время на это.
Надеюсь, мой вопрос ясен. Спасибо за вашу помощь!
Будет ли JLabel вместо JTextArea? –
@Andrew Thompson Конечно, я мог бы использовать 'JLabel', но тогда мне все равно придется вручную вставлять новые строки в строку, что потребует от меня вычислить, где они должны быть основаны на настройках ширины и шрифта, а затем я нужно добавить некоторую специальную обработку, чтобы она обернулась целыми словами, а не символами. Это вещи, предоставленные «JTextArea», поэтому я бы предпочел использовать это, если смогу. –
См. Пример ниже. Мне нравится использовать небольшой «трюк HTML» для достижения таких вещей. ;) –