Друк в Java
Оскільки принтер - пристрій графічне, висновок на друк дуже схожий на висновок графічних об'єктів на екран. Тому в Java засоби друку входять в графічну бібліотеку AWT і в систему Java 2D.
У графічному компоненті крім графічного контексту - об'єкта класу Graphics, створюється ще "друкарський контекст". Це теж об'єкт класу Graphics, але який реалізує інтерфейс printGraphics і отриманий з іншого джерела - об'єкта класу print job, що входить в пакет java.awt. Сам же цей об'єкт створюється за допомогою класу Toolkit пакета java.awt. На практиці це виглядає так:
Метод getPrintJob () спочатку виводить на екран стандартне вікно Друк (Print) операційної системи. Коли користувач вибере в цьому вікні параметри друку і почне друк кнопкою ОК. створюється об'єкт pj. Якщо користувач відмовляється від друку за допомогою кнопки Скасування (Cancel), то метод повертає null.
У класі Toolkit два методу getPrint Job ():
Аргумент 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.