Java -практика использования

         

Атрибуты шрифта



Таблица 9.1. Атрибуты шрифта

Атрибут

Значение

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.



Содержание раздела