Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Вывод текста средствами Java 2D

Читайте также:
  1. A10. Укажите правильную морфологическую характеристику слова ГОТОВЫ из четвертого (4) предложения текста.
  2. A28. Какое высказывание противоречит содержанию текста?
  3. A28. Какое высказывание противоречит содержанию текста?
  4. A9. Укажите верную характеристику второго (2) предложения текста.
  5. FontBold, Fontltalic, FontName, FontSize, FontUnderline определяют шрифты текста метки.
  6. I. ЛОГИКА ВЫВОДА
  7. Snow Brand Milk не делает выводов из собственных ошибок

Шрифт — объект класса Font — кроме имени, стиля и размера имеет еще полтора десятка атрибутов: подчеркивание, перечеркивание, наклон, цвет шрифта и цвет фона, ширину и толщину символов, аффинное преобразование, расположение слева направо или справа налево.

Атрибуты шрифта задаются как статические константы класса TextAttribute. Наиболее используемые атрибуты перечислены в следующей таблице.

Атрибут Значение
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.

Текст в Java 2D обладает собственным контекстом — объектом класса FontRenderContext, хранящим всю информацию, необходимую для вывода текста. Получить его можно методом getFontRenderСontext() класса Graphics2D.

Вся информация о тексте, в том числе и об его контексте, собирается в объекте класса TextLayout. Этот класс в Java 2D заменяет класс FontMetrics.

В конструкторе класса TextLayout задается текст, шрифт и контекст. Начало метода paint() со всеми этими определениями может выглядеть так:

public void paint(Graphics gr){

Graphics2D g = (Graphics2D)gr;

FontRenderContext frc = g.getFontRenderContext();

Font f = new Font("Serif", Font.BOLD, 15);

String s = "Какой-то текст";

TextLayout tl = new TextLayout(s, f, frc);// Продолжение метода }

В классе TextLayout есть не только более двадцати методов getxxx(), позволяющих узнать различные сведения о тексте, его шрифте и контексте, но и метод

draw(Graphics2D g, float x, float у)

вычерчивающий содержимое объекта класса TextLayout в графический области g, начиная с точки (х, у).

Еще один интересный метод

getOutline(AffineTransform at)

возвращает контур шрифта в виде объекта shape. Этот контур можно затем заполнить по какому-нибудь образцу или вывести только контур.

Еще одна возможность создать текст с атрибутами — определить объект класса AttributedString из пакета java.text. Конструктор этого класса

AttributedString(String text, Map attributes)

задает сразу и текст, и его атрибуты. Затем можно добавить или изменить характеристики текста одним их трех методов addAttibute().

Если текст занимает несколько строк, то встает вопрос его форматирования. Для этого вместо класса TextLayout используется класс LineBreakMeasurer, методы которого позволяют отформатировать абзац. Для каждого сегмента текста можно получить экземпляр класса TextLayout и вывести текст, используя его атрибуты.

Для редактирования текста необходимо отслеживать курсором (caret) текущую позицию в тексте. Это осуществляется методами класса TextHitInfo, а методы класса TextLayout позволяют получить позицию курсора, выделить блок текста и подсветить его.

Наконец, можно задать отдельные правила для вывода каждого символа текста. Для этого надо получить экземпляр класса GlyphVector методом createGlyphVector() класса Font, изменить позицию символа методом setGlyphPosition(), задать преобразование символа, если это допустимо для данного шрифта, методом setGlyphTransform(), и вывести измененный текст методом drawGlyphVector () класса Graphics2D.

public void paint(Graphics gr) {

Graphics2D g = (Graphics2D) gr;

int h = 5;

FontRenderContext frc = g.getFontRenderContext();

Font f = new Font("Serif", Font.BOLD, 30);

GlyphVector gv = f.createGlyphVector(frc, "Пляшущий текст");

int len = gv.getNumGlyphs();

for (int i = 0; i < len; i++) {

Point2D.Double p = new Point2D.Double(25 * i, h = -h);

gv.setGlyphPosition(i, p);

}

g.drawGlyphVector(gv, 10, 100);

}

 


Дата добавления: 2015-10-29; просмотров: 140 | Нарушение авторских прав


Читайте в этой же книге: CheckboxGroup | Классы элементов меню | Абсолютное позиционирование | GridBagLayout | Простое Swing приложение | Структура Swing | JPasswordField | Создание меню | РАБОТА С ГРАФИКОЙ | Методы класса Graphics для рисования фигур |
<== предыдущая страница | следующая страница ==>
Рисование фигур средствами Java2D| Программирование апплета

mybiblioteka.su - 2015-2024 год. (0.008 сек.)