Атрибут |
Значение |
BACKGROUND |
Цвет фона. Объект, реализующий интерфейс Paint |
FOREGROUND |
Цвет текста. Объект, реализующий интерфейс Paint |
BIDI EMBEDDED |
Уровень вложенности просмотра текста. Целое от 1 до 1 5 |
CHAR_REPLACEMENT |
Фигура, заменяющая символ. Объект GraphicAttribute |
FAMILY |
Семейство шрифта. Строка типа string |
FONT |
Шрифт. Объект класса Font |
JUSTIFICATION |
Допуск при выравнивании абзаца. Объект класса Float со значениями от 0,0 до 1,0. Есть две константы: JUSTIFICATION FULL И JUSTIFICATION NONE |
POSTURE |
Наклон шрифта. Объект класса Float. Есть две константы: POSTURE_OBLIQUE И POSTURE_REGULAR |
RUNJHRECTION |
Просмотр текста: RUN DIRECTION LTR — слева направо, RUN DIRECTION RTL — справа налево |
SIZE |
Размер шрифта в пунктах. Объект класса Float |
STRIKETHROUGH |
Перечеркивание шрифта. Задается константой STRIKETHROUGH ON, по умолчанию перечеркивания нет |
SUPERSCRIPT |
Подстрочные или надстрочные индексы. Константы: SUPERSCRIPT_NONE, SUPERSCRIPT_SUB, SUPERSCRIPT_SUPER |
SWAP COLORS |
Замена местами цвета текста и цвета фона. Константа SWAP COLORS ON, по умолчанию замены нет |
TRANSFORM |
Преобразование шрифта. Объект класса AffineTransform |
UNDERLINE |
Подчеркивание шрифта. Константы: UNDERLINE_ON, UNDERLINE_LOW_DASHED, UNDERLINE_LOW_DOTTED, UNDERLINE LOW GRAY, UNDERLINE LOW ONE PIXEL, UNDERLINE_LOW_TWO_PIXEL |
WEIGHT |
Толщина шрифта. Константы: WEIGHT ULTRA LIGHT, WEIGHT _ EXTRA_LIGHT, WEIGHT _ LIGHT, WEIGHT _ DEMILIGHT, WEIGHT _ REGULAR, WEIGHT _ SEMIBOLD, WEIGHT MEDIUM, WEIGHT DEMIBOLD, WEIGHT _ BOLD, WEIGHT HEAVY, WEIGHT _ EXTRABOLD, WEIGHT _ ULTRABOLD |
WIDTH |
Ширина шрифта. Константы: WIDTH CONDENSED,WIDTH SEMI CONDENSED, WIDTH REGULAR, WIDTH_SEMI_EXTENDED, WIDTH_EXTENDED |
К сожалению, не все шрифты позволяют задать все атрибуты. Посмотреть список допустимых атрибутов для данного шрифта можно методом getAvailableAttributes() класса Font.
В классе Font есть конструктор FontfMap attributes), которым можно сразу задать нужные атрибуты создаваемому шрифту. Это требует предварительной записи атрибутов в специально созданный для этой цели объект класса, реализующего Интерфейс Map: Класса HashMap, WeakHashMap или Hashtable (см. главу 7). Например:
HashMap hm = new HashMap ();
hm.put(TextAttribute.SIZE, new Float(60.Of));
hm.put(TextAttribute.POSTURE, TextAttribute.POSTUREJDBLIQUE);
Font f = new Font(hm);
Можно создать шрифт и вторым конструктором, которым мы пользовались в листинге 9.2, а потом добавлять и изменять атрибуты методами deriveFont () Класса Font.
Текст в Java 2D обладает собственным контекстом — объектом класса FontRenderContext, хранящим всю информацию, необходимую для вывода текста. Получить его можно методом getFontRendercontext () класса Graphics2D.
Вся информация о тексте, в том числе и об его контексте, собирается в объекте класса TextLayout. Этот класс в Java 2D заменяет класс FontMetrics.
В конструкторе класса TextLayout задается текст, шрифт и контекст. Начало метода paint () со всеми этими определениями может выглядеть так:
public void paint(Graphics gr){
Graphics2D g = (Graphics2D)gr;
FontRenderContext frc = g.getFontRenderContex-t();
Font f = new Font("Serif", Font.BOLD, 15);
String s = "Какой-то текст";
TextLayout tl = new TextLayout(s, f, frc) ; // Продолжение метода }
В классе TextLayout есть не только более двадцати методов getxxxo, позволяющих узнать различные сведения о тексте, его шрифте и контексте, но и метод
draw(Graphics2D g, float x, float у)
вычерчивающий содержимое объекта класса TextLayout в графический области g, начиная с точки (х, у).
Еще один интересный метод
getOutline(AffineTransform at)
возвращает контур шрифта в виде объекта shape. Этот контур можно затем заполнить по какому-нибудь образцу или вывести только контур, как показано в листинге 9.6.