В программе происходит следующее: строка, которая будет выравниваться, разбивается на отдельные слова. Для каждого слова программа следит за его длиной в текущем шрифте и автоматически продвигается к следующей строке, если слово не будет помещаться в текущую строку. Каждая законченная строка отображается в окне в выбранном в текущий момент стиле выравнивания. После каждого щелчка мыши в окне апплета, стиль выравнивания изменяется. Пример вывода этой программы представлен на рис.20.
а б в г
Рис. 20. Выравнивание текста: а – влево, б – вправо, в – по центру, г – по ширине
x = x + fm.stringWidth(word) + space + toFill + 1;
nudge--;
}
else
x = x + fm.stringWidth(word) + space + toFill;
}
}
break;
}
}
}
class MyMouseAdapter extends MouseAdapter {
TextLayout tl;
public MyMouseAdapter (TextLayout tl) {
this.tl = tl;
}
public void mouseClicked(MouseEvent me) {
tl.align = (tl.align + 1) % 4;
tl.repaint();
}
}
Посмотрим, как работает апплет. Сначала он создает несколько констант, которые будут использоваться для определения стиля выравнивания, и затем объявляет несколько переменных. Метод init() получает текст, который будет отображен. Затем апплет инициализирует размер шрифта в блоке try-catch, который установит размер шрифта в 14 пунктов, если в документе HTML отсутствует параметр fontSize. Параметр text является длинной строкой текста с HTML-тегом <р> в качестве абзаца-разделителя.
Двигателем этого примера является метод update(). Он устанавливает шрифт и получает базовую линию и высоту шрифта от объекта шрифтовой метрики (FontMetrics fm). Затем создается объект StringTokenizer, который используется, чтобы извлечь следующую лексему (строку, ограниченную пробелами) из строки, определенной в переменной text. Если следующая лексема есть <р>, метод увеличивает интервал строк. Иначе, он выясняет, выходит ли длина этой лексемы за ширину колонки. Если строка заполнена текстом или нет больше лексем, строка выводится методом drawString().
Три первых направления в переключателе метода drawString() работают идентично: каждое выравнивает строку, которая передана через параметр line, по левому, правому краю или по центру окна, в зависимости от стиля выравнивания. Направление LEFTRIGHT выравнивает как левую, так и правую стороны строки. Для этого вычисляется остаточный пробел (разность между шириной строки и шириной колонки) и распределяется между всеми словами. Последний метод в этом классе изменяет стиль выравнивания каждый раз, когда вы щелкаете мышью в окне апплета.
Для запуска программы надо подготовить файл RunTextLayout.html:
As you have seen, the AWT provides support for fonts,
colors, text, and graphics.
<P> Of course, you must effectively utilize these items if you are to
achieve professional results.">
<param name = "fontname" value = "Serif">
<pararn name = "fontSize" value = "14">
</applet>
Запускается ааплет или утилитой appletviewer или браузером. На рис.21 показано окно браузера Mozilla Firefox с апплетом с выравнивание текста по левому и по ширине.
Рис. 21. Апплет в окне браузера с выравниванием текста по левому краю и по ширине