Глава 18. Потоки введення / виведення
Друк в Java
Оскільки принтер - пристрій графічне, висновок на друк дуже схожий на висновок графічних об'єктів на екран. Тому в Java засоби друку входять в графічну бібліотеку AWT і в систему Java 2D.
У графічному компоненті крім графічного контексту - об'єкта класу Graphics, створюється ще "друкарський контекст". Це теж об'єкт класу Graphics, але який реалізує інтерфейс printGraphics і отриманий з іншого джерела - об'єкта класу print job, що входить в пакет java.awt. Сам же цей об'єкт створюється за допомогою класу Toolkit пакета java.awt. На практиці це виглядає так:
PrintJob pj = getToolkitO .get, Print Job (this, "Job Title", null);
Graphics pg = pj.getGraphics ();
Метод getPrintJob () спочатку виводить на екран стандартне вікно Друк (Print) операційної системи. Коли користувач вибере в цьому вікні параметри друку і почне друк кнопкою ОК, створюється об'єкт pj. Якщо користувач відмовляється від друку за допомогою кнопки Скасування (Cancel), то метод повертає null.
У класі Toolkit два методу getPrint Job ():
getPrintJob (Frame frame, String jobTitle, JobAttributes jobAttr,
getPrintJob (Frame frame, String jobTitle, Properties prop)
Аргумент frame вказує на вікно верхнього рівня, що управляє печаткою. Цей аргумент не може бути null. Рядок jobTitle задає заголовок завдання, яка не друкується, і може дорівнювати null. Аргумент prop залежить від реалізації системи друку, часто це просто null, в даному випадку задаються стандартні параметри друку.
Аргумент jobAttr задає параметри друку. Клас JobAttributes, екземпляром якого є цей аргумент, влаштований складно. У ньому п'ять підкласів, що містять статичні константи - параметри друку, які використовуються в конструкторі класу. Втім, є конструктор за замовчуванням, що задає стандартні параметри друку.
Аргумент pageAttr задає параметри сторінки. Клас pageProperties теж містить п'ять підкласів із статичними константами, які і задають параметри сторінки і використовуються в конструкторі класу. Якщо для друку досить стандартних параметрів, то можна скористатися конструктором за замовчуванням.
Ми не будемо розглядати ці десять підкласів з десятками констант, щоб не захаращувати книгу дрібними подробицями. До того ж система Java 2D пропонує більш зручний набір класів для друку, який ми розглянемо в наступному пункті.
Після того як "друкарський контекст" - об'єкт pg класу Graphics - визначений, МОЖНА викликати метод print (pg) АБО printAll (pg) Класу Component. Цей метод встановлює зв'язок з принтером за замовчуванням і викликає метод paint (pg). Апарат друкує все те, що задано цим методом.
Наприклад, щоб роздрукувати текстовий файл, треба в процесі введення розбити його текст на рядки і в методі paint (pg) вивести рядки методом pg.drawstring () так само, як ми виводили їх на екран у розділі 9. При цьому слід врахувати, що в "друкованому контексті" немає шрифта, завжди треба встановлювати шрифт методом pg.setFont ().
Після виконання всіх методів print про застосовується метод pg. dispose (), що викликає прогін сторінки, і метод pj .endо, що закінчує друк.
У лістингу 18.7 наведено простий приклад друку тексту і кола, заданих в методі paint (>. Цей метод працює два рази: перший раз викреслюючи текст і окружність на екрані, другий раз, точно так же, на аркуші паперу, вставленої в принтер. Всі методи друку зібрані в один метод simplePrint ().
Лістинг 18.7. Друк засобами AWT
import j ava.awt.event. *;
class PrintTest extends Frame