Иллюстрированный самоучитель по Java


         

в виде объекта shape. Этот


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

Листинг 9.6.
Вывод текста средствами Java 20 
import java.awt.*; 
import j ava.awt.font.*; 
import j ava.awt.geom.*; 
import java.awt.event.*
class StillText extends Frame{ 
StillText(String s) { 
super(s);
setSize(400, 200); 
setvisible(true); 
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0) ; 
}
}); 
}
public void paint(Graphics gr){ 
Graphics2D g = (Graphics2D)gr; 
int w = getSize().width, h = getSize().height; 
FontRenderContext frc = g.getFontRenderContext(); 
String s = "Тень";
Font f = new Font("Serif", Font.BOLD, h/3); 
TextLayout tl = new TextLayout(s, f, frc);
AffineTransform at = new AffineTransform(); 
at.setToTranslation(w/2-tl.getBounds().getwidth()/2, h/2);
Shape sh = tl.getOutline(at); 
g.draw(sh);
AffineTransform atsh =
new AffineTransform(1, 0.0, 1.5, -1, 0.0, 0.0);
g.transform(at);
g.transform(atsh);
Font df = f.deriveFont(atsh);
TextLayout dtl = new TextLayout(s, df, frc);
Shape sh2 = dtl.getOutline(atsh);
g.fill(sh2); } public static void main(Stnng[] args) {
new StillText(" Эффект тени"); 

}
На рис. 9.6 показан вывод этой программы.


Рис. 9.6.
Вывод текста  средствами Java 2D
Еще одна возможность создать текст с атрибутами — определить объект класса Attributedstring из пакета j ava. text. Конструктор этого класса
AttributedString(String text, Map attributes)
задает сразу и текст, и его атрибуты. Затем можно добавить или изменить характеристики текста одним их трех методов addAttibute ().
Если текст занимает несколько строк, то встает вопрос его форматирования. Для этого  вместо класса TextLayout используется класс LineBreakMeasurer, методы которого позволяют отформатировать абзац. Для каждого сегмента текста можно получить экземпляр класса TextLayout и вывести текст, используя его атрибуты.

Содержание  Назад  Вперед