Учебное пособие: Многопоточность и работа с потоками

g.drawLine(d.width/4, secondLine—1, 3*d.width/4, secondLine-1);

g.drawLine(d.width/4, secondLine, 3*d.width/4, secondLine);

g.setFont(fl);

g.drawstring(s1,(d.width-fml.stringWidth(s1))/2, firstLine+2*nextLine);

g.drawString(s2,(d.width-fml.stringWidth(s2))/2,firstLine+3*nextLine);

}

public static void main(String[] args){

GraphTest f = new GraphTest("Примеррисования");

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent ev){

System.exit(0);

}

});

}

}

В примере 1 использован простой класс Dimension, главная задача которого — хранить ширину и высоту прямоугольного объекта в своих полях width и height. Метод getSize() класса component возвращает размеры компонента в виде объекта класса Dimension. В программе 1 размеры компонента f типа GrapTest установлены в конструкторе методом setBounds() равными 500x300 пикселов.

Еще одна особенность примера 1 — для вычерчивания толстой линии, отделяющей заголовок от текста, пришлось провести три параллельные прямые на расстоянии один пиксел друг от друга.


Рис. 2. Пример использования класса Graphics

Как вы увидели из обзора класса Graphics и сопутствующих ему классов, средства рисования и вывода текста в этом классе весьма ограничены. Линии можно проводить только сплошные и только толщиной в один пиксел, текст выводится только горизонтально и слева направо, не учитываются особенности устройства вывода, например, разрешение экрана.

Эти ограничения можно обойти разными хитростями: чертить несколько параллельных линий, прижатых друг к другу, как в примере 1, или узкий заполненный прямоугольник, выводить текст по одной букве, получить разрешение экрана методом getScreenSize() класса Java.awt.Toolkit и использовать его в дальнейшем. Но все это затрудняет программирование, лишает его стройности и естественности.

В Java 2 класс Graphics, в рамках системы Java 2D, значительно расширен классом Graphics2D.

Возможности Java 2D

В систему пакетов и классов Java 2D, основа которой— класс Graphics2D пакета java.awt, внесено несколько принципиально новых положений:

· Кроме координатной системы, принятой в классе Graphics и названной координатным пространством пользователя (User Space), введена еще система координат устройства вывода (Device Space): экрана монитора, принтера. Методы класса Graphics2D автоматически переводят (transform) систему координат пользователя в систему координат устройства при выводе графики.

· Преобразование координат пользователя в координаты устройства можно задать "вручную", причем преобразованием способно служить любое аффинное преобразование плоскости, в частности, поворот на любой угол и/или сжатие/растяжение. Оно определяется как объект класса AffineTransform. Его можно установить как преобразование по умолчанию методом setTransform(). Возможно выполнять преобразование "на лету" методами transform() и translate() и делать композицию преобразований методом concatenate().

· Поскольку аффинное преобразование вещественно, координаты задаются вещественными, а не целыми числами.

· Графические примитивы: прямоугольник, овал, дуга и др., реализуют теперь новый интерфейс shape пакета java.awt. Для их вычерчивания можно использовать новый единый для всех фигур метод draw(), аргументом которого способен служить любой объект, реализовавший интерфейс shape. Введен метод fill(), заполняющий фигуры— объекты класса, реализовавшего интерфейс shape.

· Для вычерчивания (Stroke) линий введено понятие пера (реn). Свойства пера описывает интерфейс Stroke. Класс BasicStroke реализует этот интерфейс. Перо обладает четырьмя характеристиками:

К-во Просмотров: 389
Бесплатно скачать Учебное пособие: Многопоточность и работа с потоками