JTextArea - очень маленький размер с длинным текстом

Я использую JTextArea для отображения длинного текста

JTextArea _definition = new JTextArea(5, 50);

с переносом слов

_definition.setLineWrap(true);
_definition.setWrapStyleWord(true);

встроенный в JScrollPane

add(new JScrollPane(_definition), gbc);

Все это является частью JPanel с GridBagLayout.

Все работает нормально с более коротким текстом, но когда я добавляю длинный текст с переносом строк и требуется полоса прокрутки, pack () идет на юг, и все компоненты имеют минимальный размер, и диалог становится непригодным (не только TextArea затронутый).

Я пытался понять, что происходит, но все, что я мог понять, это связано с текстом в TextArea. Я застрял .. есть идеи? Спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
2 026
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте дважды вызвать pack(). JTextArea имеет странное поведение как описано в этой записи в базе данных ошибок Java. Первоначально он сообщает свой предпочтительный размер как однострочную запись, которая очень широка (например, одна строка, тысяча столбцов). Как только он поймет, что это определенная ширина, он сообщит правильный предпочтительный размер для необходимого количества строк.

Мне пришлось сделать несколько разных вещей, чтобы обойти это поведение, в том числе создать подкласс JTextArea и изменить его поведение, чтобы оно было немного умнее. Двойной pack() может сработать для вас в этом случае, или вам, возможно, придется прибегнуть к более сложной настройке в зависимости от того, как все в вашем макете сочетается друг с другом.

Двойная упаковка () не сработала для меня .. не могли бы вы подробнее рассказать о "более сложной настройке" .. спасибо!

Thorsten 18.01.2009 23:10

Первым шагом, вероятно, будет попытка создать подкласс JTextArea и отслеживать каждый раз, когда вызываются методы get * Size (), и посмотреть, соответствуют ли результаты тем, которых вы ожидаете.

Ross 18.01.2009 23:13
Ответ принят как подходящий

Получил, чтобы работать ... Ответ Росс давал мне несколько лучших терминов для поиска, так что спасибо за помощь, указав в правильном направлении!

 pack();
 _definition.setSize(_definition.getPreferredSize());
 pack();

Так что двойная упаковка плюс какое-то дополнительное ... странное поведение.

Другие вопросы по теме