Į߂‡ ĶĖ Ä‚ˆ


ŻĶ‚žˆ ś‹–
È ƙ‚– ’‹Ÿßœą›‚œĶƒ

Jean-Pierre Dube ą…Œßœ
JavaWorld
’Ķ…ŒĮ ŃߟĶĮĖ / ĖĮˉ ąĶĮ͌ :ޟ›‡Ķ…›


ąšŠ
‚é›éŒ Įß‚é‡ ĶĖ Ä‚ˆ Ż‚œ ąƒ Jean-Pierre Dube ąß›‡› įĶ‹ ĪĮ ŻĶ‚žˆ ś‹– ĶĖ
ĮĶ Ä‚éˆ Ć™‚– Š‚‹Į ß ąŸ‚„ Dube .Ė߃ ˟Įߊ È ƙ‚– ’‹Ÿßœą›‚œĶƒ ąƒ ĶĖ‚–
Ššé— ¬document Ššé— ¬įĶ韘 ąĪĮ˜Į Ż…‹Ÿ‹ ’Į̓ ĮĶ ’Įą›‚œĶƒ ß ĖĖ’› ɟŽß…
˟‚›œ ’› ’•͐› print ’ŸŒ К— ß page





.˟…Šß›Ą Java Print API ؐŽ ß Åߖ Ō‚–œ ą‚ƒĶĖ ĮĶ ’ƒ™‚Ō› ’™ƒ– ś‹– ą‹ ĶĖ
ĪĮ Ä‚éˆ ’é‡ßĶéŠ ąéŸž… ’Į̓ ą— Java API Ų™…Š› ’‚ž™Ė› ąĶ‚ƒĶĖ ÜßĮ ś‹– ĶĖ
ĶĖ ß ‚éžé™Ė› ޟĮ ’‚Ė— ŻßĖ Å›‹– ĶĖ .˟…•‚Ÿ ’‚˜Ą ˜Ÿ‚›œ’› ąĖ‚•…‹Į ‚žœĄ
ąĖéŒ ŽéŒßĶ Ž‚…ŸĮ̓ ψ ą› ą— Žßœ—Į .ˌ ’•͐› ‚›Œ ąƒ Ä‚ˆ ƙ‚– Żß‹ ś‹–
.˟Ÿ‚›œ ŋĶĖ Į͜Ą ƙ‚– ˟œĮ߅’› ¬Å‹Į





ąĻßĶ„ Ķ‚…Š‚‹
ąßé‰éœ ąéƒ ‘é‡ĮĶ ŻéĮßéŠ’é› ¬ĖéŸéŸ‚›œ ’‹Ÿßœą›‚œĶƒ ąƒ Öß͌ ą—œŸĮ ĪĮ ܃–
ŽĄ Å鋅 ąß‰œ ¬ŽĄ ą‹ß… ’Į̓ ąĖ‚•…‹Į ܃‚– ’‚ĶĮ΃Į ¬ąĻßĶ„ ޟĮ ’Ėœ‚›Ī‚‹
.ŻĖ ÉŸŽß… ĮĶ Ć‹‚œ› ’‚ž™Ÿ‚• ąƒ ’ƒ‚Ÿ…‹Ė Ž‚—› ĶßԜŸ› ß

Ż‚éééœéééƒ (IDE) ‘ééé›ééé…ééé‡é› ’é‹éŸßéœ ąé›‚éœĶéƒ ŌéŸé‰é› ŚéŸ ĪĮ Žé›
ŻĖßé›éœ ąĖ‚•…‹Į Ž‚—ßœŸ— Üßģ‚„ ą…Œßœ (JDE) Java Development Environment
ĪĮ ’é›éžé› ’‚鞟˜ĻŸß ’ĮĶĮĖ ß ¬ĖŒ‚ƒ’› ˟•› Ķ‚Ÿ‹ƒ Emacs Ķ‚œ— ĶĖ ŃĖß‡ß ą—
.ˌ‚ƒ’› ͟‹•… ß ÉŸŽß… ş™ƒ‚– ß Ė— ܟ›—… ¬‘›…‡› debugger ڟ ܟƒ–

’ßé– ĶĮ΃Į ڟ Ant .ŻĖߛœ ąĖ‚•…‹Į ąĻßĶ„ ޟĮ ąŸž… ’Į̓ Ant 1.1 ĪĮ ޟœˆ›
Ant ¬make ؚéŠĶéƒ ’é™ß .Åé‹Į make ąéƒ ąéŸƒŒ ß ĖŒ‚ƒ’› ’‹Ÿßœ ą›‚œĶƒ ’Į̓
ĶĖ Ant Žßéˆ ß .Ė韂›œ’› ؟͐… ĮĶ ’œŸœĮߖ XML ܟ‚• ڟ ąĖ‚•…‹Į ‚ƒ ’…‰Į̓
ĪéŸéœ ‚靯Ķé• Åšé„ ĶéŸ‚é‹ ąƒ Ü‚–…œĮ ܃‚– ’…‰Į̓ ĮĢ™ ŋĮ ąĖŒ ą…Œßœ Į߂‡
ß ĖéŸé•é› Ķ‚éŸ‹ƒ ą™‚–› ˟œĮ߅’› ˟ĶĮ˜ ’Ÿ‚œŒĄ Ant ĶĮ΃Į ‚ƒ ͘Į .ˌ‚ƒ’›
Ż‚éééééééœ ąéééééééƒ ĮĶ Ž‚ééé›Ķééé›éé韂ééé‹ Üééé—éé韂ééé› Ķééé†ßééé›
Ķéƒé…é—Į ²° ¬Javaworld) Automate your build Process Using Java and Ant
.ĖŸģ‚›œ ą™‚Ō› (²°°°

:Ė韂é›éœ’é› ’é•Ķéé› build.xml Ż‚éœ ąƒ ĮĶ Ž› Ant ܟ‚• łŸß…‰› -± ŋŸ™

Listing1:build.xml



įĶßé…—ĶŸĮĖ ĖŸ‚ƒ ą— ĖŸœ—œ ŃߛĮĶ• ¬ĖŸœ—’› ąĖ‚•…‹Į Ž› Ant ܟ‚• ĪĮ ‚›Œ ͘Į
.ĖéŸéĖ Ķ韟“… Ėߊ ’™Į įĶ߅—ĶŸĮĖ ąƒ ĖĶĮĖ ĶĮĶ– ܟ‚• ’š‚ƒ ĶĖ ą— ĮĶ ’™Į
** ± Üé—éŒ ** ąéƒ ąĻßĶ„ ޟĮ ’…‹Ķž• Ķ‚…Š‚‹ ąĶ‚ƒĶĖ Ķ…ŒŸƒ łšŌĮ Ƌ— ’Į̓
.˟Ÿ‚›œ ą‡ĮĶ›

ąéœ Unit Åé‹é… .ĖĖ Ż‚‡œĮ ĮĶ Unit ŋ… ŻĶ• ˜ˆ ˟‚ƒ Į߂‡ Пߜ ą›‚œĶƒ Ķ
ąßé‰éœ ąĶ‚éƒĶĖ ĮĶ ĆßéŠ Ü‚†› ޟ˜ˆ ą—™ƒ ˟‚›œ’› ŋ… ĮĶ ‚›Œ ą›‚œĶƒ ‚žœ…
ĪĮ ‚Ė— ąœß›œ ą› ¬ąß›‡› ޟĮ ĶĖ .ĖĖ’› ąģĮĶĮ ‚›Œ ąƒ ą›‚œĶƒ ĪĮ ąĖ‚•…‹Į
ĪĮ ĖßéŠ Ėé— Åé‹é… ’ĮĶéƒ Ž› .˜ŸĄ ’› Å‹Ėƒ ŋ… ąƒ ŌßƒĶ› ’…šŸž‹… ’‚ĶĮ΃Į
.ŻĖĶé— ąĖ‚é•é…é‹Į Ė錂郒› ŋ… ’Į̓ ’ߖ ĆßˆĶ‚žˆ ß Ķ‚Ÿ› ڟ ą— Junit3.2
Ėé— ĶƒĶ‚— ĖŸĖ ĪĮ ą‚Ÿ‹ ąƒ‡ ڟ ÅĶߍƒ Ė— ŋ… ’Į̓ ĮĶ Junit ş™ƒ‚– ‚ßŠ›
ŃßĶ ßĖ ŽéŸĮ .ŻĖ’› ɟ‡Ķ… ¬ÜŠĮĖ ŌŸ‰› ĪĮ ˟•‹ ąƒ‡ ڟ ‚Ÿ ß Žß͟ƒ ԟ‰› ĪĮ
Ķé˜Į .ĖéœĶĮĖ ŁĶ• ͘ŸĖ—Ÿ ‚ƒ ‚›Œ ŋ… ’…šŸž‹… ’‚ĶĮ΃Į ą‚˜Ÿ‚‡ Š‚‹Į ̓ ŋ…
Šé„é‹ ¬ĖéŸĶĮ̘ƒ Ėߊ ŋ… ą›‚œĶƒ ŽĮߜ ąƒ ą…‹ƒ ڟ ĶĖ ĮĶ Ėߊ ŋ… ’‚ĶĮ΃Į
ĶĖ Ėߊ ŋ… ’‚ĶĮ΃Į ŽĖĮĖ ĶĮĶ– ‚ƒ ˟œĮ߅’› ¬ĖŸĖ Ż‚‡œĮ ĮĶ ĖŸ•‹ ąƒ‡ ŋ…
’‚éĶĮ΃Į ¬ąß›‡› ޟĮ ĶĖ .˟Ė Ż‚‡œĮ Ϝ ĮĶ ą‚Ÿ‹ ąƒ‡ ŋ… ͘ŸĖ ą…‹ƒ ڟ
ŅßééŠé› ÜéŸ‚é• ’éĖœ‚›Ī‚‹ Ķß՜› ąƒ .˜Ė’› Ž‚Œœ ĮĶ ą‚Ÿ‹ ąƒ‡ ŋ… ¬Å‹…
PrintFrameWork ąéŒéŸĶ įĶßé…é—ĶéŸĮĖ ĶĖ .˟œ— ą‚˜œ ± ܗŒ ąƒ įĪ‚‹ ĆßˆĶ‚žˆ
.˟ƒ‚Ÿƒ ĮĶ ąĻßĶ„ ޟĮ ąƒ ŌßƒĶ› ąŠ‚Œ ͟Π’‚ž™Ÿ‚• ą› ˟œĮ߅’›


Name Description
Build Contains the print framework library (printframework.jar)
classes Contains output directory for the Java compiler
Test Contains source code for unit testing
images Contains images needed by the print framework library -- those images are copied by ANT to the classes subdirectory when a rebuild is complete
Src Contains source files for the print framework library


.ĖéŸéœ— Öß͌ ĮĶ ’‹Ÿßœ ą›‚œĶƒ ˟œĮ߅’› ¬ĖŸœĮĖ’› ĮĶ ‚ž™Ÿ‚• Ž‚—› ą— Žßœ—Į
ąé— Åé‹Į ŻĪš Ķé˜Į .˟œ— Ī‚’Ą measurement ’‚Šš— ą› ܟ›—… ‚ƒ ĮĶ Ž‚…Ķ‚—
.˟Ÿ‚›œ ą‡ĮĶ› UML Diagram 1 ąƒ ĖŸœ— ĶßĶ› ĮĶ Ć™‚– ÉĶŌ



į͟˜ ąĪĮ˜Į Ż…‹Ÿ‹ ’‚Šš— ܟ›—…
ĆßéˆĶ‚éžéˆ ĶĖ Ķé˜ŸĖ Šš— Ķ Žßˆ ˟Ÿ‚›œ ܟ›—… ĮĶ į͟˜ ąĪĮ˜Į ’‚Šš— ˟‚ƒ
‚žœ… ¬ĖŒ‚ƒ’› į͟˜ ąĪĮ˜Į Ż…‹Ÿ‹ ƙ– PFunit К— .ŋ‚žœĄ ąƒ ą…‹ƒĮß ß ’—…›
.Ėéœéœ—’› ܛ ąœ‚˜Įˇ Ķßԃ Ĉ ś‹– ĶĖ setPoints() ß getPoints() ’‚Ė…›
ß Ėéœé— ’é› ÜéŸĖ郅 getPoints() ’ßĶ Ō‚–œ ąƒ ĮĶ į͟˜ ąĪĮ˜Į ˉĮß ą— įĖ—
Ėé…é› ’ßĶ ĖéœĮĖĶé˜’é› Ķéƒ įĶéŸé˜ ąĪĮĖéœĮ ˉĮß ąƒ ĮĶ Ō‚–œ ą— įĖ— Š—™‚ƒ
.˟ĶĮ̘ƒ setPoints()

Żé ’酂ƒ‹‚‰› ’‚Ė…› .˜ĮąĖŒ Ż‚‡œĮ PFUnit ĶĖ ąŸ™ßĮ ’…‚ƒ‹‚‰› łŸ™› ą›
’霂éƒéŸé…錄 double ĶĮĖ–› ڟ ĪĮ ‚Ÿ ß PFUnit К— ĪĮ ‚Ÿ Ž‚ŒŸĖßĶß ŽĮߜƒ
Ėé…é› ¬ĖŸĖ’› ĶĮĶ– ‚Ķ…›ĮĶ‚„ ’ßĶ ĮĶ double ĶĮĖ–› ڟ ‚›Œ ’…–ß .˜Ÿ‚›œ’›
ąé™Ÿ‹ßƒ ĖĶĮĖ ĶĮĶ– į͟˜ ąĪĮ˜Į ˉĮß ĶĖ ą— įĶĮĖ–› ŽĄ ą— Ėœ—’› ÓĶ• ĶßԜŸĮ
ĶĖ ’Ž‚ŸĶ ’‚Ė…› ĪĮ ’—Ÿ ąƒ ą— double ĶĮĖ–› ڟ š†› .ŋĮ ąĖŒ ’•͐› ŽĄ К—
’ĮĶé‡Į .ĖßéŒ’é› ąé…é•Ķ˜ Ķ՜ ĶĖ ČœŸĮ ÅĶߍƒ ŋĮ ąĖŒ ܖ…œ› PFInchUnit К—
.ŋĮ ąĖŒ ÉĶŌ› ² ŋŸ™ ĶĖ PFUnit

Lising 2: Pfunit



ĖßéŠ įĶéŸé˜ ąĪĮ˜Į Ż…‹Ÿ‹ ’Į͇Į ’Į̓ ĮĶ ’œ‚‹Ą ŃßĶ ’‹Ÿßœ ą›‚œĶƒ įːƒ ъƒ
.˟‚›œ’› Į͇Į ĮĶ PFInchUnit К— ъƒ ޟĮ .ĖĖ’› Ž‚Œœ ‚›Œ

implements the PFInchUnit class.
1|package com.infocom.print;
2|
3|/**
4| * Class: PFInchUnit <.p>
5| *
6| * @author Jean-Pierre Dube <.jpdube@videotron.ca>
7| * @version 1.0
8| * @since 1.0
9| * @see PFUnit
10| */
11|
12|public class PFInchUnit extends PFUnit {
13|
14| //--- Private constants declarations
15| private final static int POINTS_PER_INCH = 72;
16|
17|
18| /**
19| * Constructor: PFInchUnit <.p>
20| *
21| */
22| public PFInchUnit () {
23|
24| }
25|
26|
27| /**
28| * Constructor: PFInchUnit <.p>
29| *
30| * @param parValue a value of type double
31| */
32| public PFInchUnit (double parValue) {
33|
34| super (parValue);
35|
36| }
37|
38|
39| /**
40| * Method: getPoints <.p>
41| *
42| * Return the result of the conversion from
43| * inches to points.
44| *
45| * @return a value of type double
46| */
47| public double getPoints () {
48|
49| return (getUnits () * POINTS_PER_INCH);
50|
51| }
52|
53|
54| /**
55| * Method: setPoints

56| *
57| * @param parPoints a value of type double
58| */
59| public void setPoints (double parPoints) {
60|
61| setUnits (parPoints / POINTS_PER_INCH);
62|
63| }
64|}// PFInchUnit


ÜéŸĖéƒé… ąéŌé–éœ ąéƒ ą— Å‹Į (ȜŸĮ) ’Ÿ‚Ė‰Įß ąĖœĖ Ž‚Œœ š‚ƒ Ė— ĶĖ “¹ Ԋ
˜›Ī‚Ÿœ Ō‚–œ ąƒ ‚žˆœŸĮ ܟ˃… ĮĢ™ ¬ĖĶĮĖ Ėß‡ß ČœŸĮ Ķ ĶĖ ąŌ–œ ·² .˜ĮąĖŒ
ąé…é‹Ė ßĖ PFUnit ąéœ‚銃‚…— .˟Ÿ‚›œ ĆĶŽ ·² ĶĖ ĮĶ ČœŸĮ ĶĮĖ–› ą— Å‹Į ޟĮ
.ĖĖ’› Ž‚Œœ ĮĶ PFPointUnit ß PFCmUnit ’‚ž›‚œ ąƒ Ķ˜ŸĖ ąĪĮ˜Į ˉĮß

‚éžéœĄ ĪĮ ¬ĖŸœ— ܟ›—… ĮĶ PFRectangle ß PFSize ¬PFPoint ’‚Šš— ˟‚ƒ Š„‹
.˟œ— ąĖ‚•…‹Į Ķß—Ģ› į͟˜ ąĪĮ˜Į Ż…‹Ÿ‹ ‚ƒ ’‹Ėœ ł…Š› џ‚›œ ’Į̓

ĶĖ Ėßé‡ßé› Ō‚é–éœ ’‚靊šé— ąéƒ Åéƒé‹éœ įĶé…éŒéŸƒ ’‚žŸŸĄĶ‚— PFPoint К—
ß ŲĢé‰ Ī韜 ĮĶ į͘ŸĖ PFPoint ˜Į߅’› PFPoint ¬š†› .ĖĶĮĖ Java Print API
ĶĖ ĮĶ Ė— Ż…•Ķ˜ ݟ›… Ž› ĮĢ™ ˜…‹ įĶĮĶ—… ’Ž‚ŸĶ łŸ™› Žßˆ .˟‚›œ ą•‚ŽĮ
.ĖĪ‚‹’› ąœŸžƒ ĮĶ ‚› ’Į͘ ’ŸŒ ÉĶŌ ŽŸœˆ› Ķ‚—œŸĮ ¬ŻĖ ĶĮĶ– К— ŽĄ Ėߊ

‚éžœ… .˟œ— ąĖ‚•…‹Į PFSize К— ĪĮ ¬ĆßˆĶ‚žˆ ĶĖ ąĪĮ˜Į ڟ ŽĖĮĖ Ž‚Œœ ’Į̓
ßĖ ĪĮ ĖéĖ’› Ž‚—›Į ‚›Œ ąƒ ą— ĖŒ‚ƒ’› scale() Ė…› ¬ŽĄ ͟˜›Œˆ ß Żž› ’˜ĻŸß
’Į̓ scale() .ւ•…ĶĮ ’͘ŸĖ ß ÓĶ Ķ՜ ĪĮ ’—Ÿ :˟Ė ͟Ÿ“… ĮĶ ąĪĮ˜Į ąƒœ‡
.ŋĮ ˟•› ł‰• (ŽĖĶ— ŪĶ΃) ŽĖĶ— ŻßĪ

ąĖ‚é•é…é‹Į ܗŒ ’™ŸŌ…‹› ąŌ߉› ڟ џ‚›œ ’Į̓ PFRectangle К— ĪĮ ˟œĮ߅’›
Ė‚éžéœŒŸ„ ÜŸŌ…‹› ąĪĮ˜Į ß Ü‰› ݟ՜… ’Į̓ ĮĶ ŃßĶ ßĖ PFRectangle .˟Ÿ‚›œ
:˟‚›œ’›

PFPoint Ššé— ĪĮ ‚éŸ ¬ĖéŸéŸ‚›œ ݟ՜… ąœ‚˜Įˇ Ķßԃ ĮĶ Ö‚•…ĶĮ ß ÓĶ z ß y
Żéžé› .ĖéŸéœ— ąĖ‚•…‹Į ąĪĮ˜Į ݟ՜… ’Į̓ PFSize К— ĪĮ ß Ü‰› ݟ՜… ’Į̓
ŚéŸ ĪĮ PFRectangle ¬ĖéŸéœé—’é› ŻéŸé՜… ĮĶ Å‚…Š› ß ąĪĮ˜Į ĶßԈ ą— Å‹Ÿœ
ĮĶ Üé‰é› ß ąĪĮĖéœĮ ’‚éž—ĮĶ… ’ߙ‡ ‚… ˜—’› ąĖ‚•…‹Į PFSize ڟ ß PFPoint
.Ė͟˜ƒ

ĆßéˆĶ‚éžéˆ ĶĖ ą— ĖŒ‚ƒ’› į͟˜ ąĪĮ˜Į Ż…‹Ÿ‹ ąœŸ›Ī ĶĖ ‚› ’ߘ…•˜ ą‡Ÿ…œ ޟĮ
‚éƒ ¬ĖéĖ’é› ÜéŸé—Œ… Į͜Ą Š‚‹Į ß ąŸ‚„ PFPoint .ŋĮ ąĖ›Ą ĶĖ Į͇Į ąƒ Ä‚ˆ
ß PFInchUnit Üé†é› ’鍂…ŠĮ į͟˜ ąĪĮ˜Į ’‚ž›…‹Ÿ‹ ˟œĮ߅’› PFUnit ą‹ß…
PFRectangle ß PFSize ¬PFPoint ąßšééƒ .˟œ— Ė‚‡ŸĮ Ėߊ ’Į̓ ĮĶ PFCmUnit
ĖéĮßéŠ PFDocument Ššé— ąĶ‚ƒĶĖ Ž› įːƒ ʉƒ› .˜…‹ ’‹Ėœ ł…Š› ͘œ‚Œœ
.Ė߃





PFDocument К—
Ä‚éˆ ’‚éž…Ÿ™‚• ’›‚›… ą— ’™Į К— ĖĶĮĖ ĶĮĶ– PFDocument È ƙ‚– ŠĮĶ ĶĖ
ŽßĶĖ ąéƒ ’靂阜 .Ė͟˜’› ÅĶߍ ŽĄ Ō‹ß… Instantiation ß export łŸ™› ‚Ÿ
:ݟĪĮ˜Į’› PFDocument

Listing3: PFDocument


ąĶéŸéŠĢ ’ĮĶéƒ .Ėéœé— ’› ܛ ą‰• ͜Ÿ…œ‚— ڟ ˜œ‚› ÜßĮ ą™ß ĶĖ Šš— ޟĮ
.(˟œ— ą‡ĮĶ› ³± ĶŌ‹ ąƒ) Ėߌ’› ąĖ‚•…‹Į Vector К— ڟ ĪĮ ł‰•

ąĶé‡éœ„ ą— ĖœŸß˜’› print() Ė…› ąƒ ³ ŋŸ™ ³¹ ß ³ø ’‚ĶŌ‹ ĶĖ flag ßĖ Š„‹
.ĖĖ Ž‚Œœ ĮĶ Ä‚ˆ ‚Ÿ Ģ’‚—

ß ąé‰é• Ķ‹ ą— Ė‹Ķ’› (µ“ ’™Į “² ’‚ĶŌ‹) header ’‚Instance ąƒ Åƒßœ Š„‹
.ĖĶĮĖ̓ ĶĖ ĮĶ Ģ’‚— ą‰• ‚„

ĮĶ Å‚‰• ą— ŻĮąĖĶ— ą•‚ŽĮ ĮĶ įĖ‚ŸĪ ’‚Ė…› ³ ŋŸ™ ĶĖ ±³¹ ß µ¹ ’‚ĶŌ‹ ޟƒ
ĮĶ Ž‚é—é›Į ŽéŸĮ ‚雌ƒ (·¶ ĶŌ‹ ĶĖ ) addPage() Ė…› .˟‚›œ’› Ų̉ ‚Ÿ ą•‚ŽĮ
ąéƒ (“ø ĶéŌé‹ ĶĖ) addPage() Ė…› .˟œ— ą•‚ŽĮ ąĖœßĶ„ ąƒ ą‰• ڟ ą— ĖĖ’›
ąƒ Ķ…›ĮĶ‚„ ÅĶߍƒ ĮĶ ŽĄ ąĶ‚›Œ ą— ’Įą‰• ĪĮ Š„ ą— ĖĖ’› ĮĶ Ž‚—›Į ޟĮ ‚›Œ
Ė…› ßĖ ’‚ž™›—› removePage() Ė…› ßĖ .˟œ— ą•‚ŽĮ ą‰• ڟ ¬ĖŸĖĶ— ĖĶĮß Ė…›
‚éƒ ĮĶ ąé‰é•é ڟ (±°° ĶŌ‹ĶĖ) removePage() Ė…› ޟ…‹Šœ .˜Œ‚ƒ’› addPage
‚éƒ ĮĶ ąé‰é•é (µ±± ĶŌ‹ ĶĖ) įːƒ Ė…› ß Ėœ—’› Ų̉ ą‰• ąĶ‚›Œ ĪĮ ąĖ‚•…‹Į
.˜—’› Ų̉ PFPage ’ŸŒ ĪĮ ąĖ‚•…‹Į

ĮĶ Ä‚éˆ ß ąé‰é•é ’‚ąĶ‡œ„ showPageDialog() ß showPrintDialog() Ė…› ßĖ
¬ĖéœĶĮĖ ĶĮĶ– ³ ŋŸ™ ĶĖ ²±ø ’™Į ±øø ’‚ĶŌ‹ ޟƒ ą— ’Ÿ‚Ė…› .˜œ—’› ÜĶ…œ—
ŽéŸéŸéé… ĮĶ ŻĪš ’‚Ķ…›ĮĶ‚„ ß ‚flag Ō–• ‚žœĄ .˜Ė’›œ Ž‚Œœ ĮĶ ‚ąĶ‡œ„
.ĖĶĮĖ ąĖžƒ ĮĶ ‚ąĶ‡œ„ џ‚›œ ÅŸĶŸĖ› print() Ė…› .˜œ—’›

ąéƒ ĮĶ Ä‚éˆ Ćé™‚é– (³ Åé‹éŸé™ ĶĖ ²¹¶ ’é™Į ²³“ ’‚éĶéŌé‹) print() Ėé…é›
.ݟĪĮ˜Į’› Ė…› ޟĮ ąƒ ’‚˜œ ܂‰ .˜—’› ڜŸ™ Java Print API

ąĶéŸéŠĢ Åéžé‡ for ąé–™‰ ĶĖ ’ŸŒ ޟĮ ĪĮ .Ėߌ’› Ė‚‡ŸĮ PFPage ’ŸŒ ڟ ĮĖ…ƒĮ
pageFormat ’éŸéŒ Šé„é‹ .ĖĖ͘’› ąĖ‚•…‹Į Ėߌ È ˟‚ƒ ą— ’Įą‰• Ķ Ž…Š‚‹
ąĶ釜„ ĶĖ ą— ĖŒ‚ƒ’› ą‰• ś͕ ł›ŸÕœ… ąĖœĶĮĖ̓ ĶĖ ’ŸŒ ޟĮ .Ėߌ’› Ė‚‡ŸĮ
Ķé…é›ĮĶ‚é„ ąé—éŸé…Ķßé ĶĖ Ō–• ł›ŸÕœ… ޟĮ ĪĮ .˜Ė͘’› ؟͐… Page Setup
.ĖĖ͘’› ąĖ‚•…‹Į ¬ĖŒ‚ƒ ąĖŒ ؟͐… showPageDialog

ÜĶé…éœé— ĖßéŒ’é› ąĖĮĖ Ėé…é› ąƒ Ķ…›ĮĶ‚„ ÅĶߍƒ ą— Å‚‰• ĖĮː… ąĖßˉ› Š„‹
ɟ‰… ĮĶ ĶĮĖ–› Ė…› ¬ĖŒ‚ƒ Ī‚‡› ąĖßˉ› ĪĮ Ķ…ĮĶ• ł‰• ąĖßˉ› ͘Į .ĖĖ͘’›
Ėé…é› .ĖĖĶé˜’é› Ė‚é‡éŸĮ printerJob ’éŸéŒ ŽĄ ĪĮ Ėééƒ .ĖéœĮĖĶ阒› Ī‚ƒ ß
ĶéŌé‹ ĶĖ Š„‹ .˜—’› ܖ…œ› printerJob ’ŸŒ ąƒ ĮĶ ąĖœßĶ„ Ż‚œ setJobName()
Page Setup ąĶé‡éœé„ ¬Ė߃ true ͘Į .ĖĖ͘’› ÜĶ…œ— showPageSetupFlag ¬²¶²
.Ėߌ’› ąĖĮĖ ŃŸ‚›œ

ĶĮĶé– ąĖéœßĶ„ ĶĖ ą— ĮĶ ’…‚‰• ’›‚›… ą— ĖŸœ— Ė‚‡ŸĮ ĮĶ Book ’ŸŒ ˟‚ƒ Š„‹
ĪĮ ĮĶ Å‚é‰• ’›‚›… ą— Ėߌ’› ’Įą–™‰ ĖĶĮß ą›‚œĶƒ .Å•Ķ˜ ĖĮߊ̓ ĶĖ ¬ĖœĶĮĖ
if ŌĶéŒ Ķßé…‹Ė ŚŸ ¬ą–™‰ ޟĮ ĶĖ .˜—’› ą•‚ŽĮ Book ’ŸŒ ąƒ pageCollection
ąĶé‡éœé„ Ķé˜Į .Ėߌ ąĖ‚•…‹Į ˟‚ƒ pageFormat ŻĮĖ— ĪĮ ą— Ėœ—’› ÜĶ…œ— ͘ŸĖ
Ė霗’› ؟͐… ĶƒĶ‚— ą— ąĖœßĶ„ ą‰• Ķ ¬Ėߌ ąĖĮĖ ŃŸ‚›œ PFPageSetupDialog
ąé‰• ś͕ ĪĮ ÅĶߍœŸĮ ͟’ ĶĖ .Ė͟˜’› ĶĮĶ– Page Setup ł›ŸÕœ… ąĖßˉ› ĶĖ
ąĖœßĶ„ ł‰• ŃĪĮĖĶ„ ą–™‰ ą—Ÿ›‚˜œ .ĖĖ͘’› ąĖ‚•…‹Į ąĖŒ ؟͐… page ĶĖ ą—
ĶĖ ²ø± ĶéŌé‹ ąéƒ) ˜—’› ą•‚ŽĮ printJob ’ŸŒ ąƒ ĮĶ Book ’ŸŒ ¬ĖŸ‹Ķ Ž‚Ÿ‚„ƒ
.(˟œ— ą‡ĮĶ› ³ ŋŸ™

Ė韝Įߊ’› printerJob ĪĮ ą— ’Ÿ‚‡ ’œŸ try/catch ś‹– ĖĶĮß ą›‚œĶƒ ‚…Ÿ‚žœ
¬ĖßéŒ ÖßĶéŒ Ä‚éˆ ĖœŸĮĶ• ą—œŸĮ ĪĮ ܃– .Ėߌ’› ĖĶĮß ¬Ėœ— È ĮĶ ąĖœßĶ„ ‚…
ąĶé‡éœé„ ¬Ėßéƒ ąĖéŒ ŲéŸĶéé… Ķé˜Į .Ė韜— ÜĶ…œ— ĮĶ showPrintSetupDialog
Ä‚éˆ Ü› ˜Į߅’› ĶƒĶ‚— ¬ąĶ‡œ„ ޟĮ ‚ƒ .Ėߌ’› ąĖĮĖ ŃŸ‚›œ JavaPrintDialog
¬³ Åé‹éŸ™ ²ø· ĶŌ‹ ĶĖ if Ķ߅‹Ė .˜— ÜŌ‚ƒ Į͜Ą ‚Ÿ ß ąĖĮĖ ą›ĮĖĮ ß Öß͌ ĮĶ
ĮĶ true ĶĮĖé–é› Ä‚éˆ ąĶé‡éœé„ ͘Į .˜—’› ÜĶ…œ— ĮĶ showPrintSetupDialog
.ĖĪ‚‹’› Ų–ß…› Į͜Ą ÅĶߍœŸĮ ͟’ ĶĖ ß Ėœ—’› Į˟„ ą›ĮĖĮ È ܛ ¬ĖœĮĖ̓͘

šé›‚é— ÖßéŽß› ޟĮ Į͟ΠŻĮą…Œßœœ ĮĶ printHTML() ß print() Ė…› ßĖ ą›‚œĶƒ
ĮĶ ‚éžœĄ ’‹Ÿßœ ą›‚œĶƒ .ˌ‚ƒ’› ąß›‡› ޟĮ ąĖßˉ› ĪĮ Ķ…ĮĶ• ß ąĖ߃ ąĖŸˆŸ„
Åé‹éŠéœ .ݜ—’› ‚›Œ ąƒ ąŌƒĮĶ ŽŸĮ ĶĖ Ė‚žœŒŸ„ ˜ˆ ’™ß ݜ—’› ĶĮ̘Įß ‚›Œ ąƒ
ąŸƒŒ for ą–™‰ ڟ Š„‹ .˜—’› ˟™ß… ĮĶ HTML ܟ‚• ą‰• Ķ‹ ś‹– PFDocument
ąĖéœßĶé„ ą‰• Ķ ’Į̓ ĮĶ HTML ’‚Ė— ą…•Ķ Ķ‚—ƒ print() Ė…› ĶĖ ą— ’Įą–™‰
ąé‰é• Ķ ’Į̓ ĮĶ HTML ’ŸŒ Ķ ą— Ķ˜ŸĖ for ą–™‰ ڟ ¬‚…Ÿ‚žœ .ĖĶߥ’› Å‹Ėƒ
ޟĮ ĶĖ ’ŸŒ Ķ ą— Å‹Į ҊŒ› ¬UML Diagram 1 ąƒ ŁŸ–Ė ’‚˜œ ‚ƒ .ĖĶߥ’› Å‹Ėƒ
.PDF ąĮߊ ß ĖŒ‚ƒ HTML ąĮߊ ˜— ąģĮĶĮ ĮĶ ŻĪš Ė— ˟‚ƒ ąĶŸ‡œĪ

Ž‚éŸ‚é„ printPreview() Ėé…é› ’é‹ĶĶéƒ ‚éƒ PFDocument К— ĖĶߛ ĶĖ ‚› ʉƒ
ĮĶ ąĖéœßĶé„ Ė…› ޟĮ ¬Ėߌ’› ąĖĪ ĮĖ printPreview() Ė…› ą—Ÿ›‚˜œ .˃‚Ÿ’›
’é‹éŸßéœ ąé›‚éœĶéƒ .ĖéĖ’é› Ń韂é›éœ (PFPrintPreview) ĶßĶé› ąĶé‡éœ„ ĶĖ
.ĖĮĖ ŻĮߊ ɟŽß… ݇œ„ ś‹– ĶĖ ĮĶ printPreview()



PFPage К—
ŚéŸ ß Åé‹Į łé‰é• ĪĮ ’Įąß›‡› ąĖœßĶ„ ڟ .ŋĮ ą‰• ͘œ‚Ÿ‚›œ PFPage К—
’Į̓ PFPage ĪĮ instance ڟ ˟‚ƒ È ƙ‚– ĶĖ .È ‚ŸŒĮ ĪĮ ’Įąß›‡› ą‰•
’é‹éŸßéœ ąé›‚éœĶéƒ Üé‰ĮĶé› ąéƒ ’‚˜œ ܂‰ .˟œ— Ė‚‡ŸĮ ąĖœßĶ„ ĪĮ ą‰• Ķ
įĪ‚é‹ ąĶéŸŠĢ ’Į̓ Vector ’ŸŒ ڟ ĪĮ PFPage Listing 4: PFPage .ݟĪĮ˜Į’›
ąĖ‚é•é…‹Į È ‚ŸŒĮ ŽĖĶ— Ų̉ ß ą•‚ŽĮ ’Į̓ Ė…› ޟ˜ˆ ’œ‚ƒŸ…Œ„ ß Ä‚ˆ ‚ŸŒĮ
±µ¶ ß ±³° ’‚éĶéŌé‹ ĶĖ ĖŸœĮ߅’› ĮĶ ‚Ė…› ޟĮ ’‹Ÿßœ ą›‚œĶƒ ܉ĮĶ› .˜—’›
.˟œ— ąÕ‰š› “ ŋŸ™

¬ŽĄ Åéžé‡ ß Ģ’‚— ąĪĮ˜Į ¬‚ąŸŒ‚‰ ˜œ‚› ą‰• ’‚Ķ…›ĮĶ‚„ įĪ‚‹ ąĶŸŠĢ އ
ąĖ‚é•é…é‹Į ¬Ėéœé—’é› ąéģĮĶĮ ĮĶ įĖ‚éŸĪ ’‚ÅŸ™ƒ‚– ą— PFPageFormat К— ĪĮ
Ä‚éˆ ’‚éĶ…›ĮĶ‚„ ą— ĖĖ’› ąĪ‚‡Į PFPageSetupDialog ąƒ Šš— ޟĮ .ݟŸ‚›œ’›
ąĖ‚é•é…é‹Į ąé‰• ’Į̓ į͘ŸĖ ś͕ ĪĮ ĶƒĶ‚— ͘Į ß .˜ĮĖ͘ Ī‚ƒ ß ą…•Ķ˜ ĮĶ
ڟ ĪĮ ąĖ‚•…‹Į ‚ƒ ĮĶ ĖŸĖ‡ ’‚Ķ…›ĮĶ‚„ ˜Į߅’› PFDocumentPrint() Ė…› ¬Ėœ—
’ĮĶéƒ ‚é… ˟‹Ÿßœƒ ą›‚œĶƒ ˟‚ƒ ĶŌ‹ ˜ˆ ą— ĖŸœ— Ķߍ… .˟‚›œ ą•‚ŽĮ Ė— ĶŌ‹
ß .ĖéŸéœé— ŲéŸĶ鐅 ĮĶ Ģ’‚— އ ß Å‹ĮĶ ¬Äˆ ¬ŽŸŸ‚„ ¬š‚ƒ ’‚ąŸŒ‚‰ ą‰• Ķ
.ĖĖ’› ĶĮĶ– Ėߊ Ž‚—› ĶĖ ĮĶ ŃŠƒ ß Å›‹– Ķ PFPageFormat ‚…Ÿ‚žœ

ŻéŸéÕéœé… ¬ąé‰é• ĪĮ PFPageFormat Ž…•Ķ˜ ¬ą‰• ś͕ ޟŸ… ’Į̓ ąĮĶ ‚žœ…
.Åé‹Į setPageFormat() Ė…› ĪĮ ąĖ‚•…‹Į ‚ƒ PFPageFormat ޟŸ… ß ‚Ķ…›ĮĶ‚„
clone ŚéŸ Ėߌ’› ąĖœĮĖ̓͘ getPageFormat() Ė…› Ō‹ß… ą— PFPageFormat ’ŸŒ
.˟Ÿ‚›œ ą™‚Ō› ˟œĮ߅’› ĮĶ PFPageFormat К— É͌ ³ ŋŸ™ ĶĖ .ŋĮ ’™Į

ĶĖ ±³± ’é™Į ·¹ ’‚éĶéŌ‹ ĶĖ ą— ĖŒ‚ƒ print() ˜Į߅’› PFPage ъƒ ŽŸĶ…ƒ™‚‡
ŽéŸĮ .ĖßéŒ’é› ÜŸĖƒ… Graphics2D ’ŸŒ ąƒ Graphics ’ŸŒ .ŋĮ ąĖŒ ĒĶĖ “ ŋŸ™
’‚éžé‹šé— ’雂é›é… ¬Šé„ ŽĮ ĪĮ ĮĶéŸĪ Ė͟˜ ÅĶߍ Ė…› ’ĮĖ…ƒĮ ĶĖ ĖŸ‚ƒ ܟ˃…
.˜Ÿ‚›œ’› ĶĖœĶ Graphics2D ’ŸŒ ‚ƒ ĮĶ Ėߊ PFPrintObject

’‚éĖé…é› .Ėéœé—’é› ĶĖéœĶ ĮĶ ‚é›éŒ ’郂銅œĮ ą‰• ‚„ ¬ą›‚œĶƒ įːƒ ś‹–
Ķé‹ :ĖéœĶŸ˜’› ĮĶ ’Ÿ‚žœ ݟ›… ąĖ‚– ޟĮ Š‚‹Į ̓ getFooter()/getHeader()
ÅĶß鍜ŸĮ͟’ ĶĖ .˜͟˜’› ĶĮĶ– ąĖ‚•…‹Į ĖĶߛ ˜Ė߃œ null ͘Į ą‰• ‚„/ą‰•
Ķé˜Į .ĖéœéŸ‚›œ’› ĮĶ non-null ą‰• ‚„/ą‰•Ķ‹ ’‚Ž‚–… PFDocument ĪĮ ‚Ė…›
.ĖĶéŸé˜ ’é› ĶĮĶé– ąĖ‚é•é…‹Į ĖĶߛ ąĖœßĶ„ ą‰• ‚„ /ą‰•Ķ‹ ¬Ė߃ ц› Ź‹‚„
ÅéŸéé–ßé› ’Į̓ .˜ߌ’› ąĖĮĖ ĶĮĶ– Ėߊ ’‚ž™‰› ĶĖ ą‰•‚„ ß ą‰•Ķ‹ ‚…Ÿ‚žœ
.˟œ— ą‡ĮĶ› ² ܗŒ ąƒ ŁŸ–Ė


² ܗŒ


ąĶéŸéŠĢ ’‚éPFPrintObject ’›‚›… ĪĮ ą–™‰ ޟĮ .ŋĮ print ą–™‰ įːƒ ą™‰Ķ›
.˜Ÿ‚›œ ĶĖœĶ ĮĶ Ėߊ ą— ĖĮߊ’› pageObjectCollection ĶĖ ąĖŒ

ĮĶ ’Įąé‰é•é PFPage :ŻéŸĪĮĖĶ„’› ˟…•Ķ˜ĮĶ• Žßœ—‚… ą— ’ƒ™‚Ō› ĶßĶ› ąƒ Ü‚‰
Üé›é PFPrintObject ‚éŸéŒĮ ’›‚›… ’Į̓ Container ڟ ˜œ‚› ß ąĖĶ— ؟͐…
ĶĖéœĶ ĮĶ ąé‰é•é ‚éŸéŒĮ ’›‚›… ¬ĖĖ͘’› ܂• print() Ė…› ą—Ÿ›‚˜œ .˜—’›
ޟĮ ĪĮ ą—™ƒ ¬Ėœ—’›œ ąĶŸŠĢ ĮĶ ą‰• ’‚Ķ…›ĮĶ‚„ ‚›Ÿ–…‹› PFPage К— .˜—’›
.˟‚›œ’› ąĖ‚•…‹Į įĪ‚‹ ąĶŸŠĢ ’Į̓ ¬ŻĖ’› ɟŽß… Įːƒ ą— PFPageFormat К—



PFPageFormat К— ĪĮ ąĖ‚•…‹Į ‚ƒ ą‰• ’‚Ķ…›ĮĶ‚„ ݟ՜…
PFPageFormat Ššé— ĪĮ ’Įąé‰é•é Åé›Ķé• ’‚ąĖĮĖ Ž…Š‚‹ ąĶŸŠĢ ß ŻŸÕœ… ’Į̓
ß getPageAreaOrigin() ’‚éĖ…› ĪĮ ąĖ‚•…‹Į ‚ƒ PFPageFormat .˟œ— ąĖ‚•…‹Į
ßĖ Ķé .Ėéœé—’› ąƒ‹‚‰› Ģ’‚— ĮĶ ’„‚ˆ ’‚Ž• ß Öß͌ ąŌ–œ getPageAreaSize()
.˜ĮąĖŒ ؟͐… µ ŋŸ™ ĶĖ ²³¹ ’™Į ²±² ’‚ĶŌ‹ ĶĖ ‚Ė…› ޟĮ

Listing 5: PFPageFormat


ĶĖ ĪŸœ ĮĶ (µ ŋŸ™ ¹µ ’™Į µ² ’‚ĶŌ‹) getPageFormat() Ė…› ޟœˆ› К— ޟĮ
’éŸéŒ ąéƒ ĖéŸéœĮßé…’é› getPageFormat() Ėé…é› ĪĮ ąĖ‚é•é…é‹Į ‚ƒ .ĖĶĮĖ Ķƒ
’éŸéŒ ŽĖéœĮĖĶé˜Ī‚éƒ ĪĮ Üéƒé– .ĖéŸéœé— ĮĖ韄 ’‹Ķ…‹Ė java.awt.PageFormat
‚ƒ–‚…› ß ŽŸŸ… ĮĶ Ģ’‚— އ ĮĖ…ƒĮ ˟‚ƒ getPageFormat() Ė…› ¬PageFormat
landscape Åéžé‡ ĶĖ ĖéŸ‚éƒ Ģ’‚— ͘Į .˜— ݟ՜… ĮĶ Ģ’‚— ąĪĮ˜Į ß ‚ąŸŒ‚‰
.˜ߌ ‚‡ƒ‚‡ ą‰• ւ•…ĶĮ ß ‚œž„ ß Äˆ ß š‚ƒ ’‚ąŸŒ‚‰ ˟‚ƒ ¬Ėߌ Ķ˜Ķ

ĶĖ .ĖéŸéŒ‚éƒ ą…ŒĮĖ Ė‚Ÿƒ PFDocument К— print() Ė…› ĖĶߛ ĶĖ ĮĶ ’™ƒ– ʉƒ
ß Ä‚éˆ Ćé™‚é– ŽŸƒ П•Ķ…œŸĮ ڟ ŽĮߜƒ getPageFormat() ĪĮ µ ŋŸ™ ²·· ĶŌ‹
ąĶéŸéŠĢ ’ĮĶéƒ ’é…ß‚•…› К— ĪĮ ą— ‚‡œĄ ĪĮ .Ėߌ’› ąĖ‚•…‹Į Java Print API
Ćé™‚é– ĶĖ ąé‰é•é Åé›Ķé• ŻéŸé՜… ’Į̓ ¬ĖŸĮąĖĶ— ąĖ‚•…‹Į ą‰• ś͕ Ž…Š‚‹
’éééŸéééŒ Åééé›Ķééé• ąéééƒ ĮĶ Ėßééé‡ßééé› Åé›Ķé• ĖéŸ‚éƒ Java Print API
.˟œ— ą›‡Ķ… java.awt.print.PageFormat



:Żéœé— Åéƒé‰é Ä‚éˆ Ć陂– К— ŽŸĶ…›ž› ĖĶߛ ĶĖ ą— ąĖŸ‹Ķ ĮĶ• ŽĄ Ž‚›Ī ܂‰
.˟œ— Ė‚‡ŸĮ È ’ŸŒ Ķ ’Į̓ ĮĶ Šš— ޟĮ ˟‚ƒ .PFPrintObject



PFPrintObject К—
ĶĖ .ĖĶĮĖ Ėßé‡ß ąé‰é• ĶĖ ą— Å‹Į „‚ˆ ’ŸŒ Ķ ’Į̓ ąŸ‚„ К— PFPrintObject
Ü߃– ĮĶ ’Ÿ‚ŸŒĮ Ō–• PFPage .ˌ‚ƒ’› È ƙ‚– К— ŽŸĶ…ąĖŸˆŸ„ ޟĮ ĶŽ‚‰ ܂‰
Š‚é‹Į Ķéƒ ŽĄ ’é‰ĮĶéŌ .Ė霌‚ƒ ą…•‚Ÿ ą‹ß… PFPrintObject К— ĪĮ ą— Ėœ—’›
Üé›‚é— Åé‹éŸé™ .ĖéœĮąĖéŒ ąĖĮĖ ÉéŸéßé… ³ Å雋– ĶĖ ą— Å‹Į ’ƒ—Ķ› ’‚ß˜™Į
.ĖŸģ‚›Ķ• ąÕ‰š› List 6 ĶĖ ĖŸœĮ߅’› ĮĶ PFPrintObject

Listing 6: PFPrintObject






Ć—Ķ› ’ߘ™Į ’‰ĮĶŌ
ĖéĖ’é› ąĪ‚‡Į PFPrintObject ąƒ ą— Ėœ—’› ąģĮĶĮ ĮĶ ’Ÿ‚’˜ĻŸß Ć—Ķ› ’ŸŒ ڟ
Ķé…éœéŸéģ‚é„ ’éŸéŒ Ķ ą‡Ÿ…œ ĶĖ .Ė͟˜ ̓ ĶĖ ĪŸœ ĮĶ ‚PFPrintObject ͟‚‹
Ķéƒ ĶĖ ’é…éŠĶĖ Ķ‚é…Š‚‹ ڟ Ė‚‡ŸĮ ‚ƒ Ϝ ĮĶ ‚PFPrintObject ͟‚‹ ˜Į߅’›
ŋŸ™ ĶĖ ³“ ĶŌ‹ ąƒ ) ݜ—’› ąĶŸŠĢ Vector К— ĶĖ ĮĶ Ķ…œŸģ‚„ ‚ŸŒĮ Ž› .Ė͟˜
.(Ėߌ ą‡ĮĶ› ¶

ĮĶ (child object) Ķé…éœéŸģ‚„ ‚ŸŒĮ ą— ĖœĖ’› ĮĶ Ž‚—›Į ޟĮ ‚›Œ ąƒ Ė…› ßĖ
¶ ŋŸ™ ³“· ĶŌ‹ ĶĖ add(PFPrintObject) .˟œ— ą•‚ŽĮ ‚žœĄ ąƒ ‚Ÿ ĖŸģ‚›œ Ų̉
ĪĮ ąĖ‚é•é…‹Į ‚ƒ ß Ėœ—’› ą•‚ŽĮ printObjectCollection ąƒ child object ڟ
ĶĖ Ķ酚‚éƒ ‚éŸéŒĮ Ž…‹œĮĖ .˜—’› ܍…› Ķ…š‚ƒ ’ŸŒ ąƒ Į͜Ą setParent() Ė…›
remove() ’霐Ÿ ͘ŸĖ Ė…› .ŋĮ ąĖœœ— Ś›— ‚ŸŒĮ ĪĮ ’ĮąĶŸ‡œĪ ŽĖĶ— ĶĖœĶ Ž‚›Ī
Į˃› ’ŸŒ Ō–• Ė…› ޟĮ .˟œ— Ų̉ ĮĶ Ķ…œŸģ‚„ ’ŸŒ ڟ ą— ĖĖ’› ąĪ‚‡Į ‚›Œ ąƒ
.˜—’› Ü߃– įĖßĶß ŽĮߜƒ ĮĶ (source object)





ŽĖĶ— Ķ˜Ķ
PFPage ‚éŸ PFDocument ĪĮ Ķ酱Ė韈Ÿ„ ’›— PFPrintObject ŽĖĶ— ĶĖœĶ ĖœŸĮĶ•
parent ’éŸéŒ .ĖßéŒ ĶĖéœĶ Ėߊ ĪĮ Ķ…š‚ƒ ’ŸŒ ąƒ Åƒ‹œ ˟‚ƒ ’ŸŒ Ķ ĮĶŸĪ Å‹Į
Ķé…錟ƒ łšŌĮ ’Į̓) .PFPrintObject ‚Ÿ ß ĖŒ‚ƒ PFPage ’ŸŒ ڟ ‚Ÿ ˜Į߅’›
.(ĖŸģ‚›œ ą‡ĮĶ› Żß‹ ś‹– ąƒ

ąé— ĖĮĖ ŻéĮßéŠ ÉéŸéŽß… ¬Å‹Į abstract ’ŸŒ ڟ ¬PFPrintObject ą— ‚‡œĄ ĪĮ
.˟‚›œ ĶĖœĶ ĮĶ Ėߊ ˜Į߅ ’› subclass ڟ ąœß˜ˆ

ąé— ĮĶ (¶ Åé‹éŸé™ ĶĖ ²±² ’é™Į ±±µ ’‚ĶŌ‹) computeSizeAndPosition() Ė…›
.ĖéŸéœé— ĮĖé ¬Ėéœé—’› ąƒ‹‚‰› Ķ…š‚ƒ ’ŸŒ ąƒ Åƒ‹œ ĮĶ ’ŸŒ ş–ß› ß ąĪĮ˜Į
ąĪĮĖéœĮ ß Į˃› drawSize ß drawOrigin ‚ŸŒĮ ¬ĖŒ ܟ›—… ą™‰Ķ› ޟĮ ą—Ÿ›‚˜œ
.˜œ—’› şƒ†… ĮĶ subclass ’ŸŒ

’éŸéŒ ĮĖéƒé› ß ąĪĮĖéœĮ ŽĖĶßĮ Å‹Ėƒ ¬ÅŸ–ß› ß ąĪĮ˜Į ąƒ‹‚‰› ĶĖ ŻĖ– ޟ™ßĮ
PFPage ’韌 ¬Ķ…š‚ƒ ’ŸŒ ą— ŻŸ›ž•ƒ ą—œŸĮ ’Į̓ .ŋĮ (PARENT OBJECT) Ķ…š‚ƒ
’éŸéŒ ąé—霟Į ĪĮ Š„ .ݟœ—’› ĮĖ ĮĶ isChild() Ė…› ¬PFPrintObject ‚Ÿ ŋĮ
.parentSize ß parentLocation :ĖéœßéŒ’é› ÅéŸéƒé†… ’ŸŒ ßĖ ¬ĖŒ Į˟„ Ķ…š‚ƒ
’éŸéŒ ßĖ ŽŸĮ ¬ĖŸœ— ąƒ‹‚‰› ˟Įߊ’› ĮĶ fill ß sticky ’‚ÅŸ–ß› ą—Ÿ›‚˜œ
.ĖĶ— ˜Įߊ Ś›—


Ķé˜Į .ĖéŒ‚éƒ Łé™Ō› ‚Ÿ ’ƒ‹œ ˜Į߅’› ą— Å‹Į į͟˜ĶĮĶ– ř‚‰ ÜĶ…œ— ¬ŻßĖ ŻĖ–
ąéƒé‹‚é‰é› Ķ…š‚ƒ ’ŸŒ Š‚‹Į ̓ ‚ÅŸ–ß› ’›‚›… ¬ĖŒ‚ƒ ’ƒ‹œ į͟˜ĶĮĶ– ş–ß›
.ˌ ˜Įߊ ąƒ‹‚‰› ą‰• ąƒ Åƒ‹œ ÅĶߍœŸĮ ͟’ ĶĖ ß ĖœĖ͘’›


.(˟œ— ą‡ĮĶ› ¶ ŋŸ™ ĶĖ ±µµ ’™Į ±µ± ’‚ĶŌ‹ ąƒ) ŋĮ ‚ąŸŒ‚‰ ¬Żß‹ ą™‰Ķ›

ąé™é‰Ķé› ( ¶ Åé‹éŸ™ ĶĖ ±¶ø ’™Į ±µø ’‚ĶŌ‹) fill resolution ‚Ÿ fill ŖĖ
ÅĶߍƒ ĮĶ Ėߊ Ķ…š‚ƒ ’ŸŒ ą— ĖœĖ’› ąĪ‚‡Į Ķ…œŸģ‚„ ‚ŸŒĮ ąƒ ‚žœĄ .ŋĮ ŻĶ‚žˆ
.˜œ— Ķ„ įĖߛ ‚Ÿ ’–•Į

’‚éÅéŸéé–ßé› įĖß雏 ß ’–•Į ş–ß› ß ąĪĮ˜Į ąƒ‹‚‰› ’Ÿ‚žœ ß Ż‡œ„ ą™‰Ķ›
.ŋĮ sticky

computeSizeAndPosition() Ėé…é› ąé— drawSize ß drawOrigin ĪĮ ąĖ‚•…‹Į ‚ƒ
.˟œ— ĶĖœĶ ĮĶ Ėߊ ’ŸŒ ¬Ėœ—’› ąƒ‹‚‰› ĮĶ ‚žœĄ

ĖéœĮßé…’› parent object Ķ ą— ąß›‡›ĶŸĪ ‚ŸŒĮ ’›‚›… ą— printChild() Ė…›
‚韌Į ĪĮ ܃– Ķ…œŸģ‚„ ‚ŸŒĮ .˟œ— ĮĖ ĮĶ ¬Ėœ—’› ĶĖœĶ ĮĶ ĖŒ‚ƒ ą…ŒĮĖ Ķƒ ĶĖ
.˜ߌ’› ĶĖœĶ Ėߊ ĪĮ Ķ…š‚ƒ

PFFrame ąƒ ŌßƒĶ› print() Ė…› ˟‚ƒ ąœß˜ˆ ĖĖ’› Ž‚Œœ ą— Å‹Į ’™‚†› ĶŸĪ Ė—
: Ōߜ ˟‚ƒ ĮĶ

113| /**
114| * Method: print <.p>
115| *
116| * @param parG a value of type Graphics2D
117| */
118| public void print (Graphics2D parG) {
119|
120|
121| Color saveForeground = parG.getColor ();
122|
123|
124| //--- Print the child objects
125| computePositionAndSize ();
126|
127|
128| rectangle = new Rectangle2D.Double (getDrawingOrigin ().getX ().getPoints (),
129| getDrawingOrigin ().getY ().getPoints (),
130| getDrawingSize ().getWidth ().getPoints (),
131| getDrawingSize ().getHeight ().getPoints ());
132|
133|
134| //--- Draw the rectangle
135| if (fillColor != null) {
136| parG.setColor (fillColor);
137| parG.fill (rectangle);
138| }
139|
140| //--- Set the tickness
141| Stroke lineStroke = new BasicStroke ((float) tickness);
142| parG.setStroke (lineStroke);
143| parG.setColor (lineColor);
144| parG.draw (rectangle);
145|
146|
147| parG.setColor (saveForeground);
148|
149| printChilds (parG);
150| }



.Ėéœé—’é› Ü‚éé• ĮĶ computeSizeAndPosition() Ė酛 ¬Łß• ܂†› ĶĖ ±²µ ĶŌ‹
’‚éĶ…›ĮĶ‚„ ąƒ ’‚Š ą‡ß… ˟‚ƒ .Ėߌ’› ĶĖœĶ ±“· ’™Į ±²ø ’‚ĶŌ‹ ĶĖ ÜŸŌ…‹›
ß drawOrigin ĶéŸĖ‚é–é› ĪĮ .ĖéŸéŒ‚éƒ ąé…ŒĮĖ ÜŸŌ…‹› ’ŸŒ ’Į̓ ąĖŒ ąĖ‚•…‹Į
’‚éĖé…é› ĪĮ ĖéŸ‚éƒ ąéŒéŸé› .ŋĮ ąĖŒ ąĖ‚•…‹Į ’ŸŒ ş–ß› ’‚‡ƒ drawSize
Ä‚éˆ ĖéŸ‚éƒ ą— ’ŸŒ ڟ ş–ß› ŽĖĶߥ Å‹Ėƒ ’Į̓ drawSize() ß drawOrigin()
’éŸéŒ Ķé ±“¹ ĶéŌé‹ ĶĖ printChilds() Ėé…é› "‚…Ÿ‚žœ .ĖŸģ‚›œ ąĖ‚•…‹Į Ėߌ
.˜—’› ĶĖœĶ ¬ĖŒ‚ƒ ą…ŒĮĖ Ķƒ ĶĖ ĖœĮ߅’› parent ’ŸŒ ą— ĮĶ įĶ…œŸģ‚„



Sticky ş–ß›
.Ėéœé—’é› ąéģĮĶĮ ‚éŸéŒĮ sticky ÅéŸéé–ßé› ŽéŸéŸ… ’Į̓ Ė…› ßĖ Ä‚ˆ ƙ‚–
ß Ėééœé—’é› ŽéŸéŸéé… ĮĶ įĖßé›é Ķßé‰é› Ķé…é›ĮĶ‚é„ setVerticalSticky()
ĶéŸĪ Üߡ .˟‚›œ’› ޟŸ… ’–•Į Ķ߉› ’Į̓ ĮĶ ĶĮĖ–› setHorizontalSticky()
:ĖĖ’› Ž‚Œœ ‚›Œƒ ĮĶ ąŌßƒĶ› ’‚Ķ…›ĮĶ‚„

Attribute Axis Description
STICKY_NONE Both Disable the sticky feature
STICKY_LEFT Horizontal Stick to the left side of the parent object
STICKY_CENTER Both Stick to the center of the parent object
STICKY_RIGHT Horizontal Stick to the right side of the parent object
STICKY_TOP Vertical Stick to the top of the parent object
STICKY_BOTTOM Vertical Stick to the bottom of the parent object


.˟ƒ‚Ÿƒ ¶ ŋŸ™ ĶĖ ²µ¹ ß ²±µ ’‚ĶŌ‹ ޟƒ ˟œĮ߅’› ĮĶ sticky ’‚Ė…›



‚ąŸŒ‚‰
‚éƒ .ĖéŸéœ— ޟŸ… PFPrintObject ß PFPage ‚ŸŒĮ ’Į̓ ĮĶ ‚ąŸŒ‚‰ ˟œĮ߅’›
’ĮąĻéŸß ’‚靱ßé™é‡ ąéƒ ĖéŸéœĮ߅’› ’…‰Į̓ ’ŸŒ ąŸŒ‚‰ ß composition ß—Ķ…
.˟œ— Į˟„ ’ƒ‚Ÿ…‹Ė

‚éƒ ąéƒé™ ßĖ ‚éƒ ÜéŸŌ…‹› ڟ ŽĮ߅’› ąœß˜ˆ ˟œŸƒƒ ‚… ˟œ— ’‹Ķ̓ ĮĶ ³ ܗŒ
.ĖĶ— Ė‚‡ŸĮ È ƙ‚– ĪĮ ąĖ‚•…‹Į



³ ܗŒ



‚éƒ ĖéŸéœĮßé…’› ¬ĖŸģ‚›œ ąĖ‚•…‹Į ˜—’› ąģĮĶĮ È ƙ‚– ą— ’…Ÿ™ƒ‚– ĪĮ ͘Į
.˟‹Ķƒ ³ ܗŒ ĶĖ ą™‚‰ ą‡Ÿ…œ ąƒ Ńš… ŽŸĶ…›—

ĮĶ ‚žœĄ sticky ş–ß› ß ĖŸœ— ؟͐… (’‡Ķ‚Š į͘ŸĖ ß ’™ŠĮĖ ’—Ÿ) ÜŸŌ…‹› ßĖ
.ĖŸģ‚›œ ޟŸ… ‚ƒ–‚…›

.ĖŸģ‚›œ ޟŸ… 0.125 ĮĶ ’œß͟ƒ ÜŸŌ…‹› ąŸŒ‚‰

ĮĶ ‚éžœĄ įĖߛ ß ’–•Į sticky ş–ß› ß ĖŸœ— ޟŸ… ĮĶ fill Ķ…›ĮĶ‚„ ßĖ Ķ
.˟œ— ؟͐… STICKY_CENTER

͟Ÿ“… Į͜Ą ąĪĮ˜Į ͘Į ’…‰ .˟œ— ą•‚ŽĮ ’œß͟ƒ ÜŸŌ…‹› ąƒ ĮĶ ’™ŠĮĖ ÜŸŌ…‹›
ĖĶ— ĖĮߊ Օ‰ ĮĶ Ėߊ Ķ‚Õ ąŒŸ› ¬ĖŸĖ



È ƙ‚– ĪĮ ąĖ‚•…‹Į ’Į̓ ąŸß…
¬PFDocument ‚éŸéŒĮ ‚éƒ .ŻĖĶé— ąéģĮĶĮ ‚‡œŸĮ ‚… ĮĶ Ä‚ˆ ĆßˆĶ‚žˆ Ķ‚…Š‚‹ ܗ
Żé…‹Ÿ‹ ą— ĖŸ…•‚ŸĶĖ ¬ą•‚Ž‚ƒ .˟ˌ ‚œŒĄ ܛ‚— Ķßԃ PFPrintObject ß PFPage
ĖßéŠ ąé›‚œĶƒ ąƒ ĮĶ ‚žœĄ ˟œĮ߅’› ąœß˜ˆ ß Ėߌ’› ’‰ĮĶŌ ąœß˜ˆ į͟˜ ąĪĮ˜Į
’‚靱éŸéßé… ąéƒ ¬ĖŸĮąĖŒ ‚œŒĄ łŸģ· ß Ü‰ĮĶ› ’›‚›… ‚ƒ ą— Ü‚‰ .˟Ė Ō‹ƒ
.ĖŸģ‚›œ ą‡ß… È ƙ‚– ĪĮ ąĖ‚•…‹Į ąƒ ŌßƒĶ›

:ŋĮ ݟ‹–… ܃‚– ąĖ‚‹ ą™‰Ķ› Ķ‚žˆ ąƒ ĖœŸĮĶ• ޟĮ

.ĖŸģ‚›œ Ė‚‡ŸĮ PFDocument ’ŸŒ ڟ

.ĖŸģ‚›œ ą•‚ŽĮ PFDocument ąƒ Į͜Ą ß Ė‚‡ŸĮ PFPage ’ŸŒ ڟ

PFPage ’韌 ąƒ ĮĶ ‚žœĄ ß Ė‚‡ŸĮ ˜ߌ ’› Ķ‚Õ ą‰• ĶĖ ą— ĮĶ ’Ÿ‚ŸŒĮ ’›‚›…
.˟œ— ą•‚ŽĮ

.Ėߌ È ‚… ˟œ— ĮĖ ĮĶ document.print() Ė…›
‚é›éŒ ÜéŸ‚é• ĶĖ Ė߇ߛ ł‰• ’›‚›… ‚… ˟œ— ĶĮĶ—… ĶĖ–œĄ ĮĶ ą‹ ß ßĖ Ü‰ĮĶ›
.˟œ— Į͇Į ĮĶ Ķ‚— ޟĮ ąœß˜ˆ ą— ĖĖ’› Ž‚Œœ ‚›Œƒ ĶŸĪ Ė— .˜ߌ Ė‚‡ŸĮ






Resources
Graphic Java 2, Mastering the AWT, Volume 1, David M. Geary (Prentice Hall, 1998) -- you will find tons of books covering Java AWT, but none will cover the subject to this extent. If you're writing GUIs, you must have this book next to your computer:
http://www.amazon.com/exec/obidos/ASIN/0130796662/javaworld

Migrating from Java 1.0 to Java 1.1, Daniel I. Oshi and Pavel A. Vorobiev (Ventana Communications Group, 1997) -- this book was helpful when Java 1.1 came out, and was the first to talk about printing in Java:
http://www.amazon.com/exec/obidos/ASIN/1566046866/javaworld

Java 2D API Graphics, Vincent J. Hardy (Prentice Hall, 1999) -- probably the best book on Java 2D, this book covers all aspects of the 2D API and provides a Graphics framework for advanced 2D compositions:

http://www.amazon.com/exec/obidos/ASIN/0130142662/javaworld

"Getting Started with Java 2D," Bill Day, (JavaWorld, July 1998) -- an excellent introduction to the Java 2D API:
http://www.javaworld.com/javaworld/jw-07-1998/jw-07-media.html

"Programmer's Guide to the Java 2D API" (Sun Microsystems) -- a reference document on the 2D API:
ftp://ftp.java.sun.com/docs/j2se1.3/j2d-book.pdf

"Test Infect Your Enterprise JavaBeans," Michael T. Nygard and Tracie Karsjens (JavaWorld, May 26, 2000) -- how to use JUnit to test JavaBeans applications:
http://www.javaworld.com/javaworld/jw-05-2000/jw-0526-testinfect.html

"Automate Your Build Process Using Java and Ant," Michael Cymerman, (JavaWorld, October 20, 2000) -- learn to use Ant:
http://www.javaworld.com/javaworld/jw-10-2000/jw-1020-ant.html

"Benefit from Platform-Independent Builds," Sanjay Mahapatra (JavaWorld, August 2000) for more on build processes and Ant:
http://www.javaworld.com/javaworld/jw-08-2000/jw-0804-builds.html

"Incremental Development with Ant and JUnit," Malcolm Davis, (developerWorks, November 2000) -- learn to integrate Ant and JUnit:
http://www-4.ibm.com/software/developer/library/j-ant/?dwzone=java

The Ant homepage: http://jakarta.apache.org/ant/

The JUnit homepage: http://junit.org




Copyright 2001, Java World/International Data Group Inc./PC WORLD Iran. All rights reserved.


’‡œ‹Ķ՜
ޟĮ ĖĶߛ ĶĖ ĮĶ Ėߊ Ķ՜
:˟Ÿß˜ƒ ‚› ąƒ Ć™Ō›

ŃĪĶĮ ‚ƒ ’™ŸŠ -
ŃĪĶĮ ‚ƒ -
ŃĪĶĮ’ƒ -

’œ šßŌ ’™ŸŠ -
Ƌ‚œ› -
ą‚…ß— -

’Š… ’™ŸŠ -
Ćߙԛ -
ŋŸœ ’Š… ’•‚— ąĪĮ˜Į ąƒ -


:Ż‚œ

:ڟœßĶ…—™Į ŋ„

: Å—ĶŒ Ż‚œ

܃– ’‚Å›‹–
Į߂‡ ĶĖ Ä‚ˆ įߘ™Į ‚ƒ ’Ÿ‚œŒĄ -ÜßĮ ś‹– Į߂‡ ĶĖ Ä‚ˆ
È ޟ…‹Šœ -ŻßĖ Å›‹– Į߂‡ ĶĖ Ä‚ˆ
È ƙ‚– ŲĮĖĮ -Żß‹ ś‹– Į߂‡ ĶĖ Ä‚ˆ
È ƙ‚– ’‹Ÿßœ ą›‚œĶƒ -ŻĶ‚žˆ ś‹– Į߂‡ ĶĖ Ä‚ˆ