JTextArea - очень маленький размер с длинным текстом - PullRequest
1 голос
/ 18 января 2009

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

JTextArea _definition = new JTextArea(5, 50);

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

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

встроено в JScrollPane

add(new JScrollPane(_definition), gbc);

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

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

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

Ответы [ 2 ]

4 голосов
/ 18 января 2009

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

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

2 голосов
/ 19 января 2009

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

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

Итак, двойная упаковка плюс немного ... странного поведения.

...