Как в JTextPane реализована перенос слов, и как сделать так, чтобы строка переносилась без пробелов?

Как именно осуществляется перенос слов в JTextPane?

Я пытаюсь понять, как именно это работает, чтобы я мог изменить поведение. Прямо сейчас, если у меня есть стандартный JTextPane внутри JScrollPane, он будет разбивать текст на пробелы, но не на длинные слова - если есть строка текста без пробелов, которая шире окна, она не будет переносить / разбивать и появится горизонтальная полоса прокрутки. По мере увеличения ширины текста ширина ParagraphView (через getWidth()) увеличивается для хранения текста.

В этой статье Лапицкого говорится, что LabelView.getBreakWeight() возвращает View.ExcellentBreakWeight для меток с пробелами и View.GoodBreakWeight для меток без пробелов (и код в GlyphView.java, кажется, подтверждает это), так почему же он не ломается? Это как-то возвращает BadBreakWeight вместо GoodBreakWeight? Или есть какая-то проблема с макетом? Или есть ошибка?

Вот некоторый код (для вашего удобства просмотра):

//somewhere inside JPanel or JFrame constructor
JTextPane textPane = new JTextPane();
JScrollPane scrollPane = new JScrollPane(textPane);
add(scrollPane);

Обратите внимание, что он по-прежнему не переносится, если я вынимаю панель прокрутки и просто использую текстовую панель (она просто обрезается при выходе за пределы окна).


Javadocs для Swing, похоже, недостаточно подробно описывает, как некоторые объекты (например, JTextPane, View и связанные объекты) работают вместе. Есть ли дальнейшая документация по дизайну таких классов, возможно, с подробным описанием назначения каждого класса и как они все работают вместе? Разве это не общедоступно? (Или у меня единственная проблема с такими вещами? Или недостаточная документация ограничена вещами, которые не должны рассматриваться типичным разработчиком?)

1 ответ

Ссылка о нестандартной переноске (принудительная и без переноса). http://java-sl.com/wrap.html

Ссылка о переносе письма http://java-sl.com/tip_html_letter_wrap.html

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