В Java, Как нарисовать многострочный текст с автоизменением шрифта, который должен вписываться в границы - PullRequest
0 голосов
/ 15 ноября 2010

Использование TextLayout и LineMeasurer (единственный способ рисовать многострочный текст, выровненный по центру в Java). Как это сделать?

Ответы [ 3 ]

0 голосов
/ 11 декабря 2010

Привет, camickr, я не думаю, что это решение правильно обрабатывает автоматическое изменение размеров шрифтов, чтобы они не выходили за пределы. По сути, я рисую текст на JScreen (форма Jframe без окон) для проецирования текста, и мне нужен любой текст, который находится там, чтобы соответствовать границам экрана, независимо от того, какой размер шрифта был изначально установлен, поэтому он автоматически -приспосабливает размер шрифта как необходимый.

Выравнивание по центру действительно не проблема здесь. Я могу сделать выравнивание по центру самостоятельно без JTextPane. Проблема заключается в подгонке шрифта в определенных пределах.

Я не хотел бы проходить и проверять границы текстового макета каждый раз после получения от linemeasurer и минимизировать размер шрифта до тех пор, пока он не станет правильным, но, похоже, это единственный способ сделать это.

0 голосов
/ 22 января 2011

Итак, я создал класс-оболочку для LineBreakMeasurer, который сразу же заполняет массив TextLayouts при создании экземпляра класса-оболочки.При создании этого списка массивов я получил высоту строки каждого макета и добавил ее постепенно к общей высоте строки.Затем я могу внешне запросить эту оболочку на общую высоту строки всего ее текста, и, если она больше моих вертикальных границ, я заново получу шрифт с меньшим размером шрифта и заново заполню массив списков ..., который затем можно получить изarraylist с использованием некоторого метода getNextLayout ().

У меня также была сила этого класса-оболочки '\ n', которую должен уважать lineBreakMeasurer, выполнив String [] lines = text.split ("\ n") И затемзапуск linebreakMeasurer на каждой из этих строк, пока я заполнял список макетов.

0 голосов
/ 15 ноября 2010

Используйте JTextPane.Вы можете установить атрибуты абзаца как «по центру», и каждая строка будет центрирована в текстовой панели.После создания текстовой панели вы можете сделать что-то вроде:

SimpleAttributeSet center = new SimpleAttributeSet();
StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
doc.setParagraphAttributes(0, doc.getLength(), center, false);
...