Á߂‡ ÍË Ä‚ˆ


݇œ„ ś‹–

È Ă߈ ͂žˆ ނƒŸ…Œ„ ˙‚Đš— ،—

Jean-Pierre Dube ŕ…Œßœ
JavaWorld
ËÁˉ ŕÍÁ͌ :݇ͅ›


ŕšŠ
ÜßéÁ ŕ͂éƒÍË Jean-Pierre Dube .˃‚Ÿ˙› ŕ›…‚Š Ă߈͂žˆ ÉÍÔ ‚ƒ ŕ™‚–› ޟÁ
.˜—˙› щ ޅ› Üͅœ— ß Ä‚ˆ џ‚›œ џ„ ˙˜ĎŸß ŹÚŸ•Á͘ ŕŸ™ßÁ

˙‚éžé™Ëé› ‚ƒ ÜßÁ ś‹– ÍË .˟˛Ŕ Ńߊ Á߂‡ ÍË Ä‚ˆ ś‹– ޟ͊Ŕ ß ŢŸ›‡œ„ ŕƒ
.ËéŸËéŒ ‚éœéŒŔ ŹË霗˙› ŕ˂•…‹Á È ˙‡ß͊ ˟™ß… ˙Á̓ Java API ŕ— ˙•™…Š›
ÍË ß ŹÄ‚ˆ Ă߈ ͂žˆ ‚ƒ Ýߋ ś‹– ÍË Ź‚ž™Ë› ޟÁ ˙‚Ë— ŕœß›œ ‚ƒ ÝßË Ĺ›‹– ÍË
ÁËéŸé„ ˙Ÿ‚œŒŔ ŹËœË˙› ܟ—Œ… ÁÍ Ă߈͂žˆ ŕ— ˙™Á ˙‚Đš— ‚ƒ ݝ Ý͂žˆ ś‹–
ŕé›é ß PFDocument ŹPFPage ŹPFPrintObject ŕ͂éƒÍË Ţ› ŕ— ÍßԜ‚› .˟Ë͗
˙‚éĐšé— ŕ͂éƒÍË Ýé‡éœé„ ś‹– ÍË ŹÝËÁË ÉŸŽß… ‚›Œ ŕƒ á͟˜ ŕÎÁ˜Á ˙‚Đš—
ÖßÍéŒ PFParagraph Đšé— ‚éƒ ÁËé…éƒÁ .ËÁË ÝéÁߊ ɟŽß… Ă߈ ͂žˆ ˙œ‚ƒŸ…Œ„
.ݜ—˙›



ޅ› ş͟˛
˙Áŕ韙ßÁ łŸ™› ŕ› К— ޟÁ .ŋÁ È ˙…‚Ÿ‰ Ă߈ ͂žˆ ڟ PFParagraph К—
PFParagraph ÎÁ ŕ˂é•é…é‹Á ‚ƒ .Ë΂‹˙› ‚Ÿž› ŋÁ ÝΚ ޅ› ˂‡ŸÁ ˙Á̓ ŕ— ÁÍ
ß Îé—Í› ŋÁÍ ŹÄˆ ÎÁ :˟œ— ÎÁͅ ͟Π˙‚žƒŸ…Í… ŕƒ ß Ë‚‡ŸÁ ÁÍ Ţ…› ˟œÁ߅˙›
Ĺéœß• ŕÎÁ˜Á ß ŰœÍ ‚… Ë΂‹˙› Í˂– ÁÍ ‚›Œ К— ޟÁ ŕߚƒ .ܛ‚— Íßԃ ÎÁͅ
ÁÍ Ţé…é› áËßÍß Ëé…é› ßË ŢéŸéœéˆé› PFParagraph .˟Ÿ‚›œ ݟ՜…Οœ ÁÍ Ţ…›
͘Á ‚Ÿ ß String ݂œƒ ËÍÁ˜‚…‹Á К— ڟ ÎÁ ‚Ÿ ˟œÁ߅˙› .˟‚›œ˙› ˙œ‚ƒŸ…Œ„
ÚéŸ ÎÁ ËéŸÍÁË Î‚éŸéœ Ţé…é› ŢËßé›éœ ËÍÁß ˙ÁÍéƒ áÍé…éžéƒ ß Í…–Ÿ–Ë ŃßÍ ŕƒ
˙‚éžéŸéŸŔÍ‚é— ŕ雝 ޟœˆ› PFParagraph .˟Ÿ‚›œ ŕ˂•…‹Á AttributedString
Ëßé‡ß ‚ƒ .ËÍÁ̘˙› ‚›Œ ͂Ÿ…ŠÁ ÍË ŹËŒ ŕËÁË ÉŸŽß… šƒ– ŕ— ÁÍ PFPrintObject
ÍÁÍé– ĐÍé…é‹Ë ÍË ‚éŕ韌‚‰ ˙Á̓ ÁÍ ˙›Ÿ–…‹› ˙œ‚ƒŸ…Œ„ PFParagraph ŕ— ŢŸÁ
Ëé— ËéŸéœÁ߅˙› .˟œ— ŕ˂•…‹Á PFPrintObject ˅› ÎÁ ˟œÁ߅˙› ˙™ß ŹËË˙›œ
.˟ƒ‚Ÿƒ ą ŋŸ™ ÍË ÁÍ PFParagraph


PFParagraph :ą ŋŸ™


Ţé› ŹĹé‹Á Ý鞕 ܃‚– ß ŕ˂‹ ‚…ƒ‹œ PFParagraph ˙‚ž…›‹– ͅŒŸƒ ŕ—Ÿě‚‡œŔ ÎÁ
print() ˅› ÍË á΂‹ÍËœÍ ËœŸÁ͕ .ݜ—˙› ˟—‚… ŢŔ á΂‹ÍËœÍ ˙‚Ë…› ˙ßÍ Ô–•
Ĺéœß• ß ŰœÍ Ë…› ޟÁ Á˅ƒÁ .ËÍÁË Ëß‡ß ą ŋŸ™ ÍË ąˇš Ԋ ÍË ŕ— Ëߌ˙› Öß͌
(ŕËéœÎ‚é‹) ΂‹ÍËœÍ Ë…› ŹŢŔ ˙–•Á ÎÁͅ ŕƒ ŕ…‹ƒ Є‹ .˟‚›œ˙› ݟ՜… ÁÍ Ţ…›
print Ë酛 ŹËŒ ݂›… á΂‹ÍËœÍ ËœŸÁ͕ ͂— ˙…–ß .˜Áߊ˙› Á͕ ÁÍ Ţ…› ˂œ›
.˜—˙› ŕ˂•…‹Á ŢŔ ÜߛŒ› ˙Í• ˙ŸŒ ͝ á΂‹ÍËœÍ ˙Á̓ printChilds() ˅› ÎÁ

:ËÍÁË Ëß‡ß Ţ…› ޅŠ‚‹ÍËœÍ ˙Á̓ private ˅› ´

ŹrenderLeftJustified() -
ŹrenderFullyJustified() -
ß ŹrenderCenterJustified() -
.renderRightJustified() -

ÝßË Ĺé›é‹– ÍË ŕ— á˗ ނ› ÎÁ ‚ƒŸÍ–… (ł¸ˇ Ԋ) renderLeftJustified() ˅›
.˟‚›œ˙› ŕ˂•…‹Á ŹËŒ ˙•͐› ´ ŋŸ™ ÍË

ނéŒéœ ÁÍ renderLeftJustified() ß renderRightJustified() Ĺ߂•… ł˛ľ Ԋ
˙Áŕ…ŒÍ Ó͏ Є‹ .˟œ— ˛ ̓ ݟ‹–… ÁÍ ŢŔ Ó͏ Ź˙ŸŒ Η͛ ŕƒ‹‚‰› ˙Á̓ .˝Ë˙›
Ëééƒ .ËéŸéœ— ˛ ̓ ݟ‹–… ŹËŸŔ ˙› ŋ˃ layout.getAdvance() ˅› ÎÁ ŕ— ÁÍ
Ĺé‹Ëéƒ ÁÍ ŕé…éŒÍ á΂‹ ÍËœÍ Ü‰› ‚… ˟œ— ݗ ŕ…ŒÍ ŢŔ Η͛ ÎÁ ÁÍ ˙ŸŒ Η͛
.Ĺé‹Á renderLeftJustified() ŕéƒ ŕŸƒŒ renderRightJustified() ˅› .˟ÍßŔ
.(˟Ë˙› ݂‡œÁ ݟ‹–… łŸ™› Ţß˃ ÁÍ Ĺ‚ƒ‹‚‰› ނ› ˙œŸ)

‚éƒ .ËÍÁË ŮÍé• á΂é‹ÍËéœÍ ˙‚éËé…é› ͘ŸË ‚ƒ renderFullyJustified() ˅›
ß renderCenterJustified() ß renderLeftJustified() ˙‚éËé…é› ÎÁ ŕ˂•…‹Á
ÚéŸ ÍË ŕ—Ÿ™‚‰ ÍË ŹËœßŒ˙› ÎÁͅ ŘÁ͘Á͂„ ÔßԊ ŕ› renderRightJustified()
Đšé— Ţßéˆ .ËéŒ‚éƒ ÎÁÍé… Ë韂éƒéœ ÍéŠŔ ÔéŠ ŕËéŒ ÎÁÍé… šé›‚é— ŘÁÍé˜Á͂é„
ŘÁÍé˜ÁÍ‚é„ ÍéŠŔ ÔéŠ ŕƒ ˙œ‚›Î ŕˆ ŕ— Ëœ— ޟŸ… ˜Á߅˙›œ LineBreakMeasure
ޟÁ ܉ ŕÁÍ ŕœ‚…ŠƒŒßŠ .˟Ë ݂‡œÁ ÁÍ Í‚—œŸÁ ނ…Ëߊ ˟‚ƒ ‚›Œ Á̙ ŹË‹Í˙›
ß Ţé—é‹Á Vector ˙éŸéŒ ڟ ÍË ÁÍ ŘÁ͘Á͂„ Ԋ ͝ ˟‚ƒ Ԗ• .ŋÁ ŕ˂‹ ܗŒ›
˙Ԋ ͝ ‚… Ëߌ˙› ˙Áŕ–™‰ ËÍÁß Ë…› ޟÁ Є‹ - (´´š-ł˛´ ÔßԊ) .˟Ÿ‚›œ ŕ͟ŠĚ
Íßé…é‹Ë ÎÁ .Ë韂›œ ÍËœÍ ŹĹ‹Á ŕˌ ŕ͟ŠĚ ˙™ƒ– ŕˌ ˂‡ŸÁ vector ÍË ŕ— ÁÍ
˟Ÿ‚›œ ÍËœÍ ÁÍ ŢŔ Є‹ ß ËŸœ— Üͅœ— ÁÍ ÍŠŔ Ԋ ‚… .˟œ— ŕ˂•…‹Á (´ľš Ԋ)
Ëééé…é› ËÍéƒÍ‚é— ŕéƒ ´ś° ÔéŠ ÍË .ËéŒ‚éƒ ÎÁÍé… Äéˆ Ĺé›é‹ ÎÁ ŕé—éŸÍßéÔéƒ
ÎÁÍé… Ü雂é—Íßéԃ ÁÍ Ţ…› Ԋ ڟ ˅› ޟÁ .˟œ— ŕ‡ß… getJustifiedLayout()
.ˌ‚ƒ˙› TextLayout К— ÎÁ ˟•› ˙˜ĎŸß ڟ ޟÁ .˟‚›œ˙›

ÁÍ ÍŸÎ Ë…› ßË Ţ…› ŕ‰• ڟ ˙ßÍ ‚ž•Á͘Á͂„ ˙Ë џÁÍŔ ŢËߛœ ނ‹Ŕ Íß՜› ŕƒ
ß ŘÁÍé˜ÁÍ‚é„ Ö‚é•é…ÍÁ ŕ— getTextHeight() ˙—Ÿ :ÝË̓ ͂—ƒ PFParagraph ÍË
ÁÍ áËééƒ ŘÁÍé˜ÁÍ‚é„ á͟˜ ÍÁ͖ ܉› ŕ— getNextParagraphPosition() á͘ŸË
ŕ— ËŸœ— ŕ˂•…‹Á ˙œ‚›Î getNextParagraphPosition() ˅› ÎÁ .˟‚›œ˙› Üͅœ—
ÍË ŕé— ÍßԜ‚› .˟Ÿ‚›œ Å͛ á͘ŸË ÎÁ Є ˙—Ÿ ÁÍ ŘÁ͘Á͂„ ޟ˜ˆ ˟Áߊ˙›
.ŋÁ ŕˌ ŕËÁË Ţ‚Œœ ą ܗŒ



jw-0302-print1.gif - 11169 Bytes
getNextParagraphPosition ˅› ÎÁ ŕ˂•…‹Á ‚ƒ ŘÁ͘Á͂„ џÁÍŔ :ą ܗŒ



.ÝË͗ ŕ˂•…‹Á ͟Π˙‚Ë— ÎÁ ޛ Źą ܗŒ ÎÁ Ńƛ á͟˜ ŕ‡Ÿ…œ ˙Á̓

1|PFParagraph paragraph = new PFParagraph ();
2|PFParagraph paragraph1 = new PFParagraph ();
3|
4|page.add (paragraph);
5|paragraph.setText (text);
6|paragraph.setHorizontalAlignment (PFParagraph.FULL_JUSTIFIED);
7|paragraph.setSize (new PFSize (page.getPrintableAreaSize ().getWidth (), new PFInchUnit (6)));
8|
9|page.add (paragraph1);
10|paragraph1.setText (text1);
11|paragraph1.setHorizontalAlignment (PFParagraph.FULL_JUSTIFIED);
12|paragraph1.setSize (new PFSize (page.getPrintableAreaSize ().getWidth (), new PFInchUnit (6)));
13|paragraph1.setPosition (paragraph.getNextParagraphPosition ());


ß paragraph ŕéƒ Ţé…é› ŕé— ËéŸéœé— Ó͕ ŢŔ ŢË͗ ÚÍË Í…žƒ ß Ţˌ ތßÍ ˙Á̓
˅› ŕ— ˙™‰› .ËÍÁË ÍÁ͖ ął ÔŠ ÍË Ëœ•Í… ޟÁ .ŋÁ ŕ…•‚Ÿ ҂…ŠÁ paragraph1
Üé‰é› ‚é… ŕËÍé— ÁËé ÁÍ setPosition() Ëé…é› getNextParagraphPosition()
ÎÁ ŕ˂é•é…‹Á ‚ƒ ÁÍ ˙™Ÿ‚• ˟Áߊ˙› ˟œ— Ó͕ .˜— ޟŸ… ÁÍ áːƒ ŘÁ͘Á͂„
ÁÍ PFParagraph ÎÁ instance ڟ ˟‚ƒ Íß՜› ޟÁ ˙Á̓ .˟Ÿ‚›œ È Ă߈ ͂žˆ
ĂéŸé…Í… ß ŃŸÁÍŔ ˙Á̓ getNextParagraph() ˅› ÎÁ ß ŕË͗ ˂‡ŸÁ Ԋ ͝ ˙Á̓
á͘ŸË ŕ‰• ˟œÁ߅˙› Ĺ–ß ŕˆ ŕ—œŸÁ ŕƒ ŢË̓ ˙„ ˙Á̓ .˟Ÿ‚›œ ŕ˂•…‹Á Ԋ ͝
.˟Ÿ‚›œ ŕ˂•…‹Á getTextHeight() ˅› ÎÁ ˟œ— ˂‡ŸÁ ÁÍ

ÎÁ ŕ˂é•é…é‹Á ‚éƒ ޅ› á΂‹ÍËœÍ ŕ͂ƒÍË Ţߜ—‚… ÁÍ ŕˆœŔ ˟Ÿ‚Ÿƒ Ţߜ—Á Ăߊ
Ë΂é‹˙› Í˂– ÁÍ ‚›Œ PFParagraph К— .ݟœ— Íß͛ ˟Áŕ…Šß›Ŕ È Ă߈ ͂žˆ
ŹÄéˆ ŘÍéÔ ÎÁ :ËéŸÎ‚‹ ÍËœÍ ÁÍ Ëߊ ޅ› ͟ΠÎÁͅ ˙‚Ĺ™‚‰ ÎÁ ŕ˂•…‹Á ‚ƒ ‚…
˙ŸŒ ڟ ŢÁߜƒ ‚Ÿ ÁÍ Ţ…› К— ޟÁ .(ŘÍÔ ßË Í ÎÁ) ܛ‚— Íßԃ ß Î—Í› ŹĹ‹ÁÍ
ÁÍ ˙韂metrics ޟœˆ› PFParagraph .Ë̄͟˙› String ‚Ÿ AttributedString
.Ëéœé— ڛ— ‚›Œƒ ޅ› łŸß…‰› џÁÍŔ ÍË ŕ™Ÿ‹ßœŸËƒ ‚… ËÍÁ̘˙› ނ…Í‚Ÿ…ŠÁ ÍË
‚é›éŒ ŕéƒ Ýé‹Í ˙ÁÍéƒ ÁÍ Ă߈ ͂žˆ ÍË Ë߇ߛ ŕŸ™ßÁ ÜߍÁ ݝÁߊ˙› Źŕ›ÁËÁ ÍË
.ݜ— ˙•͐›







Ý‹Í ŕŸ™ßÁ ÜߍÁ
:˟‚›œ˙› ˙•͐› ‚›Œ ŕƒ ÁÍ Ý‹Í ŕŸ‚„ К— ŕ‹ Ä‚ˆ Ă߈͂žˆ

.ܟԅ‹› Ý‹Í ˙Á̓ PFFrame
.ÔßԊ ŢËߛœ ÍËœÍ ˙Á̓ PFLine
‚ŕ͟ÁË ŢËߛœ ÍËœÍ ˙Á̓ PFCircle

ŕéé‹ßé… ÁÍ Ëߊ ŕˌ È ˙‡ß͊ ‚… ˜Ë˙› ނ—›Á ‚›Œ ŕƒ ˙ÁŕŸ‚„ К— ŕ‹ ŢŸÁ
.˟Ë ܟ—Œ… Ëߊ ͅŕ˟ˆŸ„ ͟߂… Ý‹Í ˙Á̓ ÁÍ ˙‚˜Ÿ‚„ ß ŕËÁË


‚ž™ŸÔ…‹›
PFRectangle ‚éƒ ÁÍ ŢŔ .ŋÁ ܟԅ‹› Ý‹Í Ř͐› PFFrame К— È Ă߈ ͂žˆ ÍË
.˟͟˜œ ŕ‚ƒ…ŒÁ Ëߌ˙› ŕ˂•…‹Á á͟˜ ŕÎÁ˜Á ݅‹Ÿ‹ ˙Á̓ ŕ—

ß ÔéŠ ŰéœÍ ŹÔŠ ś‚ŠŽ :˟Ÿ‚›œ ˂‡ŸÁ ˙˜ĎŸß ޟ˜ˆ ‚ƒ ÁÍ ‚ž™ŸÔ…‹› ˟œÁ߅˙›
ŕËéœéœé— ݟ՜…/ŕ˜͟˜ ܍Á ÍË ‚Ë…› ޟÁ ŕ› Ţ߈ ß Ü—Œ ŢË͗ ̈́ ŇߍŠ› ۜÍ
ÍË ąˇ° ß ął° ÔßéÔéŠ ŢéŸéƒ ŕ— print() ˅› ˙ßÍ Ţ› ŹËœ…‹ (getter/setter)
.ݜ—˙› ŕŸ—… ËÍÁË ÍÁ͖ ˛ ŋŸ™


PFFrame :˛ ŋŸ™


ŕÎÁËéœÁ (ą´ľ Ԋ) computePositionAndSize() ˅› ÎÁ ŕ˂•…‹Á ‚ƒ ˟‚ƒ Á˅ƒÁ
Rectangles2D.Double ˙éŸéŒ ˙…–ß Є‹ .˟Ÿ‚›œ ŕƒ‹‚‰› ÁÍ PFFrame ˙ŸŒ ܉› ß
.ËéŸéœ— ŕ˂•…‹Á ŕ˜œ— ÍËœÍ ˙ŸŒ ŢÁߜƒ ܟԅ‹› ˙ŸŒ ÎÁ Ź(ą´¸ Ԋ) ˌ ˂‡ŸÁ
ŕÎÁËéœÁ ß Ü‰› ŕ— getDrwingSize() ß getDrawingOrigin() ˙‚Ë…› Ë̓͂— ŕƒ
˙éŸéŒ ÎÁ ÔéŠ Ĺ›‚ŠŽ ݟ՜… ˙Á̓ .˟Œ‚ƒ ŕ…ŒÁË ŕ‡ß… ˜œ—˙› ޟŸ… ÁÍ ÜŸÔ…‹›
ÍË áÎ‚é‹ ÍËœÍ ËœŸŔ͕ ŕ͊š‚ƒ ß .˟œ— ŕ˂•…‹Á (ąśą ß ąś° Ԋ) BasicStroke
˙éŸéŒ ŹËéŸéœé— Ä‚éˆ ÁÍ ˙Í• ˙‚ŸŒÁ ŕ—œŸÁ ÎÁ џ„ ‚›Á .Ëߌ˙› ݂‡œÁ ąśł Ԋ
.˟Ÿ‚›œ restore џ™ƒ– ŰœÍ ‚ƒ ÁÍ Graphics2d

ËÍÁß Ţé› ÁĚé™ ŹËéœéœé—˙é› Ü› PFFrame ܆› PFCircle ß PFLine ˙‚Đš— Ţ߈
.Ýߌ˙›œ ނŒ…‚Ÿě·

PFImage Đšé— ËÍé— ËéŸéÁßéŠ ˙é‹Í̓ ß ŕ™‚Ô› Á͜Ŕ ŕ— áːƒ á΂‹ ÍËœÍ Đš—
.Ë΂‹˙› JPEG ß GIF ͟߂… ˂‡ŸÁ ŕƒ Í˂– ÁÍ ‚›Œ ŕ— ËŒ‚ƒ˙›



͟߂…
‚éƒ ˙é™ß .ËéŸŔ˙é› ŕËéœéœ— ŕ…‹Š ᘟŔ͕ Í՜ ŕƒ ÍŸß‚… ˂‡ŸÁ ÜßÁ ŕ‚˜œ ÍË
.Ĺé‹Á ÍéŸĚé„ Ţ‚—›Á ˙˜Ë‚‹ ŕƒ ÍŸß‚… á΂‹ ÍËœÍ Java Print API ÎÁ ŕ˂•…‹Á
Ë韂ƒ ͟ߍ… ڟ ˂‡ŸÁ ˙Á̓ .ŋÁ ނ‹Ŕ ş‚žœ˙ƒ Ϝ PFImage К— ŢË͗ ŕ˂›Ŕ
ÁÍ URL Ë酛 ޟÁ .˟Ÿ‚›œ ޟŸ… ÁÍ ÍŸß… ĐÍËŔ setURL() ˅› ÎÁ ŕ˂•…‹Á ‚ƒ
ÔßéԊ ޟƒ ŕ— print() ˅› .˝Ë˙› ÍÁ͖ ŕՕ‚‰ ÍË ÁÍ ÍŸß… ß ËŸ‚›œ˙› ŕ͟ŠĚ
ŕé— ÍßԜ‚› .˜—˙› ŕ˂•…‹Á ͂…Š‚‹ ޟ› ÎÁ ËÍÁË ÍÁ͖ ł ŋŸ™ ÍË š¸ ß ˇś
computePositionAndSize() Ëé…é› Á˅ƒÁ ŹËŒ ŕËÁË ÉŸŽß… ˙™ƒ– È ˙‚Ë…› ÍË
.˜ˌ ˂‡ŸÁ áːƒ ˙‚˙ŸŒ ŕ͊š‚ƒ ß Ë‚‡ŸÁ Image ˙ŸŒ Є‹ ß ŕˌ ŕ…•Í˜ ͂—ƒ



PFImage :ł ŋŸ™


Ôé‹éƒ Ϝ ͟ߍ…͘ŸË ˙‚ž…›Í• ÎÁ ˙œ‚ƒŸ…Œ„ ˙Á̓ ÁÍ Ë…› ޟÁ ˟œÁ߅˙› ŕ…ƒ™Á
ŕ‹ß… ˙Á̓ (Java Advanced Imaging) ނ‹ JAI ŕœ‚Šƒ‚…— ÎÁ ˟œÁ߅˙› ß ËŸË
.˟œ— ŕ˂•…‹Á К— ޟÁ



È џ‚›œ џ„ ŕ͇œ„
.ÝËÍé— Öß͌ Ýߋ ś‹– ÍË Ä‚ˆ џ‚›œ џ„ ŕ͇œ„ ͂…Š‚‹ ˙•͐› ‚ƒ ÁÍ Ý͂— ޛ
˙é™ßÁ :ËéŒ˙é› ÝéŸé‹–… ˙™Á К— ßË ŕƒ Ä‚ˆ џ‚›œ џ„ ŕ͇œ„ ŕ— Ĺ‹ ނ…Ë‚Ÿ
˙ééé›ßË ß .Ë΂ééé‹˙ééé› ŕééé‰ééé•é ˙ßÍ ÁÍ ÍéŸßéé… ŕé— PFPrintPreview
ËéŸé™— ڟ ̓͂— ˙…–ß ß Ëœ—˙› ˙•͐› ÁÍ Í‚ƒ Ü߅ ŕ— PFPrintPreviewToolbar
.ËÍéééƒ˙éé› Í‚é—éƒ ŢŔ ˙ÁÍéƒ ÁÍ ˙éƒé‹‚éœé› Ëé…é› ŹËéœé—˙é› Ă‚éŠé…éœÁ ÁÍ
ÜßÁ ËéŸéŸ‚Ÿƒ .ˌ‚ƒ˙› PFPrintPreview ˙™ŠÁË Đš— ڟ PFPrintPreivewToolbar
ËÍÁË ÍÁ͖ ´ ŋŸ™ ÍË ´¸¸ ß łśš ÔßԊ ޟƒ ŕ— PFPrintPreviewToolbar К— ŕƒ
.ݟÎÁ˜‚Ÿƒ ˙‚˜œ



PFPrintPreview :´ ŋŸ™


ŕ͂éééƒÍË ŕéé— áÍé˜éŸË Ýéžé› ÎéŸéˆ ‚éžéœé… Í‚éƒ Üßé… Ë‚é‡éŸÁ ͂éœé— ÍË
˙éŸéŒ ÚéŸ ËéŸ‚éƒ ‚é›éŒ ŕ— Ĺ‹Á ޟÁ ŹĹ‹Á Í—Ě Ţ‚Ÿ‚Œ PFPrintPreviewToolbar
˙‚靂鎂é–é… Í‚éƒ Ü߅ .(´°ł Ԋ) ˟͂„‹ƒ ŢŔ ŕ˜΂‹ ŕƒ ÁÍ PFPrintPreview
˙ƒ‚ŸÍŸ‹› ͂— ActionPerformed() ˅› .˅‹Í•˙› PFPrintPreview ŕƒ ÁÍ ÍƒÍ‚—
ÁÍ ŕé‰é•é ˂é‡éŸÁ ˜ŸŔ͕ PagePanel К— (´¸ś-˛ś´ ÔßԊ) .˝Ë˙› ݂‡œÁ ÁÍ
ÔßéÔéŠ) paint() Ëé…é› ˙ßÍ Í…ŒŸƒ ޛ ł‰ŸŽß… .(˛ˇ°-łśś ÔßԊ) ˝Ë˙› ݂‡œÁ
‚é›éŒ .Ë霗˙› ˂‡ŸÁ ÁÍ JPanel ˙ŸŒ ڟ PagePanel К— .ËÍÁË ŕŸ—… (´śł-łł¸
݂œ ŕƒ ÍŸ’…› ڟ Є‹ .˟œ— override ŕ‰• ˂‡ŸÁ ˙Á̓ ÁÍ paint() ˅› ˟‚ƒ
Ä‚éˆ ŕ鉕 ŕƒ Ĺƒ‹œ ÁÍ ŕ‰• ˂œ… ‚… ˟œ— ˂‡ŸÁ ÁÍ (ł´¸ Ԋ) ScaleFactor
Ë韂›œ˙› ˙œ‚ƒŸ…Œ„ ÁÍ ˙…‚‰• Ԗ• È џ‚›œ џ„ ‘–ß› ޟÁ ÍË .ËÍÁ˞˜œ ŕˌ
ß͎ Ź˙ˆœŸÁ ąą ÍË ¸/ľ ŕ‰• ڟ ˙Á̓ .˜Áŕˌ ᘃ Ο‚‹ ނŒ•ß͉ Ђ‹Á̓ ŕ—
ÍÁË閛 ޟÁ ŕƒ Ń‚•…ÍÁ ŕƒ ŕ‰• Ó͏ ݟ‹–… ‚ƒ ˟œÁ߅˙› .ˌ‚ƒ˙› 0.77 ЂŸ–›
.˟‹Íƒ

˙Á̓ ˙ŸŒ ޟÁ .(łľ° Íԋ) ŋÁ ŕˌ ˂‡ŸÁ BufferedImage ˙ŸŒ ڟ ŕԖœ ޟÁ ÍË
ĹéŒé„ ˟‚ƒ ːƒ .Ëߌ ˙› ˂‡ŸÁ ŕ‰• ˙ßÍ ÍŸß… Є‹ ŹËßÍ˙› ͂—ƒ ŕ‰• ˂‡ŸÁ
‚éœéƒ ÁÍ Ý‹Í Ü‰› ŕÎÁ˜Á ˟œÁ߅˙› ŕ‡Ÿ…œ ÍË .(łľ˛ Ԋ) ˟œ— ˟•‹ ÁÍ ŕœŸ›Î
ŢŔ ËÍéƒÍ‚— ß ˙™ƒ– ŕˌ ŕƒ‹‚‰› ЂŸ–› ß͎ ÎÁ ŕ˂•…‹Á ‚ƒ ß Ě’‚— ŕÎÁ˜Á ŕƒ
-(łľš - łľ¸ ÔßéÔéŠ) ˟œ— ˂‡ŸÁ ÁÍ ŕ‰• ş‚žœ ÍË .˟Ë ͟Ÿ“… g2d ˙ŸŒ ÍË
.ËéŸéŸ‚›œœ ˂‡ŸÁ ËÍÁ˜ ˙‡Í‚Š Ëß‡ß ŕ— ˙Áŕ‰• ŕ— ËŸœ— ܍‚‰ ނœŸ›ÔÁ Á˅ƒÁ
ßË ŢéŸÁ ܂郜˃ .˟œ— ŕ˂•…‹Á Graphics2d ˙ŸŒ ß page.print() ˅› ÎÁ Є‹
ޟ͊Ŕ .ˌ ˝Áߊ ˂‡ŸÁ doubleBuffer ĹÍߍƒ ͟ߍ… ŗ‡ƒŔ ÍË ÎŸœ ŕ‰• ˗ Ԋ
Đšé— Ć鉃› ޟ͊Ŕ ŕ͊š‚ƒ ß (˛śł-ąśł Ԋ ) ŋÁ ŕ‰• ˙ßÍ ÍŸß… ˂‡ŸÁ ŕ™‰Í›
ŃéŸé„ Ýé…鋟‹ ÍË ŕ— ˙Ÿ‚Đš— ÍßԈ ŕ— ËŸ…Šß›Ŕ ‚›Œ .ˌ‚ƒ˙› PFPrintPreview
ŢÁÍéƒÍ‚é— ŕéƒ ‚é… Ë霜—˙› ÍÁ͖̓ Ԃƒ…ÍÁ ͘ŸË—Ÿ ‚ƒ ˜ÍÁË ÍÁ͖ È џ‚›œ
ŕéœéŸ›Î ÍË Ţߜ—Á .˜ÍÁ̘ƒ џ‚›œ џ„ ŕƒ ŕ‰• ˙ßÍ ÁÍ Ë‚œ‹Á ŕ— ËœË ނ—›Á
.ݟœ—˙› ߘ…•˜ PFPageSetupDialog



ŕ‰• ݟ՜… ŕ͇œ„
ŹĚé’‚é— ŕÎÁËéœÁ ËéŸéœÁßé…˙› PFPageSetupDialog ŕ˂‹ ŕ͇œ„ ÎÁ ŕ˂•…‹Á ‚ƒ
.ËéŸéŸ‚雜 Š…œÁ ÁÍ Ě’‚— ĐÍߋ ˌ ŕ˂›Ŕ JDK 1.4 ˙…–ß ŕ˜ŸŔ ÍË ß ŹŕŸŒ‚‰
˂Ÿƒ ÁÍ Ý͂žˆ ś‹– .˟Ÿ‚›œ ŕ˂•…‹Á PFPageFormat К— ‚ƒ ÝÁ߅ ÁÍ Đš— ޟÁ
ŕé‰é• ˙‚ž—ŸÍ…› ˙Á̓ container ڟ ŢÁߜƒ PFPageFormat ŢÁ ÍË ŕ— ËŸÍ߂Ÿƒ
PFPageFormat ˙ŸŒ ˟‚ƒ PFPageSetupDialog ÎÁ ŕ˂•…‹Á Íß՜› ŕƒ .˜—˙› ܛ
̓͂— ŕƒ ÁÍ PFPageForamt ͟˂–› Űߙ‚ŸË Є‹ .˟œ— ܂‹ÍÁ ŢŔ ŕ˜΂‹ ŕƒ ÁÍ
Í韟“… ÁÍ ‚žœŔ ‚Ÿ Ë̄͟ƒ ÁÍ ŕ‰• ś͕ ͟˂–› ˜Á߅ ˙› ßÁ ŕ— ËË˙› ނŒœ
.˝Ë



ŕ‰• ݟ՜… ŕ͇œ„ :˛ ܗŒ



:ݟÎÁ˜Ÿƒ ˙‚˜œ ˅› ޟÁ ŕŸž… ܉Á͛ ŕƒ Ţߜ—Á



PFPageSetupDialog :ľ ŋŸ™



FormPanel ˙éŸéŒ ÎÁ ŕÍé‡éœé„ ˙‚éŕ•™ß› џÁÍŔ ß ÉÍÔ Ţ…Š‚‹ ŕœŸžƒ Íß՜› ŕƒ
݂é‡éœÁ ނé…éŸÁ̓ ÁÍ FormLayout ˙ŸÁÍŔ ŕ‰• ͟˛ ڟ ͂— ŕ— ËŸœ— ŕ˂•…‹Á
ŕéé‡Á͛ Resources ŕƒ FormLayout ŕ͂ƒ ÍË Í…ŒŸƒ łšÔÁ ˗ ˙Á̓) .˝Ë˙›
ÁÍ áËßÍß ˙‚éÍ酙Ÿ• ß ‚žƒ‹ˆÍƒ ˟œÁ߅˙› FormLayout ÎÁ ŕ˂•…‹Á ‚ƒ .(˟œ—
˙‚éžé…é•é‡ Ţßé…é‹/ŘéŸËÍ ÍéŸË‚é–é› ÎÁ ŕ˂•…‹Á ‚ƒ Є‹ .˟͟˜ƒ Í՜ ÍË ˙—Ÿ
ͅ ނ‹Ŕ ˙™ŸŠ Formlayout ÎÁ ŕ˂•…‹Á .˟Ë ÍÁ͖ Ëߊ ܉› ÍË ÁÍ Ţ߅‹/ˈ̓
(ąš-¸¸ ÔßԊ) .˟œ— initialize ÁÍ Űߙ‚ŸË ŕ͇œ„ .ˌ‚ƒ˙› GridBaglayout ÎÁ
ŕ͟ŠĚ PFPageFormat ÍË ŕ— ˙Ÿ‚Í…›Á͂„ setFields() ˅› ÎÁ ŕ˂•…‹Á ‚ƒ Є‹
‚éË陟• џÁÍŔ ß ÉÍÔ Đ„‹ .˜ߌ˙› ŕËÁË Ĺƒ‹œ Ëߊ ŇߍŠ› ˙‚Ë™Ÿ• ŕƒ ËœÁŕˌ
‚éƒ ‚éËé™éŸé• ŕéƒ ˙éË џÁÍŔ ÉÍÔ ŕ— ËŸœŸƒ˙› .(šľ-ą°° ÔßԊ) Ëߌ˙› ŕËÁË
˙é—éŸ ŕÍé‡éœ„ ˙ßÍ ËŸ™— ßË Đ„‹ .ŋÁ ŕ˂‹ Í˖ˆ (FormPanel К— ÎÁ ŕ˂•…‹Á
ŕËÁË Ń韂é›éœ Page setup ŕ͇œ„ ˙…–ß .˜ߌ˙› ܂• Cancel á͘ŸË ß Accept
ß ËÍéŸĚ„ƒ ÁÍ ŕˌ ˂‡ŸÁ ĹÁ͟Ÿ“… Accept ˟™— Š…œÁ ‚ƒ ˜Á߅˙› ̓͂— ŹËŒ
Ëé…é› ŕéƒ .ËÍéŸé˜éƒ ŕËéŸË‚éœ ÁÍ ĹÁÍéŸéŸé“é… Cancel ËéŸé™— Š…œÁ ‚ƒ ‚Ÿ
ÁÍ Accept ÍéƒÍ‚é— ˙é…é–ß .ËéŸÎÁË霟ƒ ˙‚˜œ ą¸˛ Ԋ ÍË ActionPerformed()
˙éŸéŒ ÍË ÁÍ ‚Ë™Ÿ• ͟˂–› ‚… Ëߌ˙› ŕËÎ Áˍ getField() ˅› ˜—˙› Š…œÁ
ÁÍ Cancel ÍéƒÍ‚é— Íé˜Á .ËßéŒ˙› Ř̉ ŕ͇œ„ Є‹ .˟‚›œ ŕ͟ŠĚ PFPageFormat
Ë韂é›éœ ŕ͟ŠĚ PFPageFormat ˙ŸŒ ÍË ÁÍ ÍŸË‚–› ŕ—œŔ ˙ƒ ŕ͇œ„ ŹËœ— Š…œÁ
.ËßÍ˙› ͂œ—

ß ËË˙› ÍÁ͖ Đͅ‹Ë ÍË ÁÍ Ü›‚ ݅‹Ÿ‹ ÎÁ ܖ…‹› ŕ͇œ„ ڟ Page Setup ŕ͇œ„
.Ë΂‹˙› ۜ‚› ß ŕˆÍ‚„ ڟ È Ă߈ ͂žˆ ‚ƒ 𛂗 ÁÍ Ëߊ

Ä‚éˆ :Ĺé‹Á ŕË߃ á͂Ÿ‹ƒ ŚÁߋ ܛ‚ ŕ— Ýœ— щ ˙ßŽß› ˙ßÍ ÝÁߊ˙› Ţߜ—Á
ÁÍ PFVisualComponent ŹĂßéˆ Í‚žˆ ŕƒ ‘ƒ‚… ޟÁ ŢËßΕÁ ˙Á̓ .˙͍ƒ ˙‚ŕ•™ß›
.ÝËߛœ ˂‡ŸÁ





AWT/Swing ˙‚ŕ•™ß› È
ŢéŸÁ È Á̙ ŹËœ…‹ ˙—…› layout manager ˙‚ŕ›‚œÍƒ ŕƒ á͍ƒ ˙‚ŕ•™ß› Ţ߈
ÚéŸ Ţé› Ĺšé—éŒé› ŢéŸÁ ŕƒ ŕƒ™’ Íß՜› ŕƒ .ˌ‚ƒ ŕÁ͛ ˜•Í… ‚ƒ ˟‚ƒ ŕ•™ß›
ÁÍ ÍéŸßéé… ڟ .ÁÍ ŕ•™ß› Ëߊ ‚… ÝË͗ ÍËœÍ Á͜Ŕ ß Ë‚‡ŸÁ component image
.˟Ë ͟Ÿ“… Á͜Ŕ ŕÎÁ˜Á ß ŕËÁË ÍÁ͖ canvas ڟ ˙ßÍ Íƒ ˟œÁ߅˙› ͅ…‰ÁÍ

ÁÍ BufferedImage .ËéŸéœ— ŕ‚˜œ ś ŋŸ™ ÍË ą°ą ß ľ¸ ÔßԊ ޟƒ print ˅› ŕƒ
.ÝÁŕË͗ ˂‡ŸÁ ŕ•™ß› ͟ߍ… áÍÁ˞˜œ ˙Á̓ ÁÍ ŢŔ ޛ ŕ— ËŸœŸƒ˙›



PFVisualComponent :ś ŋŸ™



ß .˟‚›œ ÍËœÍ double-buffer image ˙ßÍ Íƒ ÁÍ Ëߊ ŕ— ŕˌ ŕ…‹Áߊ ŕ•™ß› ÎÁ
.Ëߌ˙› ÍËœÍ ŕ‰• ˙ßÍ ŕ•™ß› ͟ߍ… ŕ͊š‚ƒ

Ĺé‹Á ŕËéŒ ÁÍé‡Á Ä‚éˆ Ăßéˆ Í‚éžˆ ÍË ÍŽ‚‰ ܂‰ ÍË ŕ— ÁÍ ˙Ÿ‚žŸ˜ĎŸß ŕ› ‚›Œ
.ËÍÁË ˙˜Î‚… Îߜ ˙˜ĎŸß ޟÁ ˙™ß ˟Áŕ˟Ë



˜Áŕˌœ ŕ•‚ŽÁ Îߜ ŕ— ˙Ÿ‚žŸ˜ĎŸß
хÍ˖ ŕƒ Ë߃ ÍÁËÍߊ̓ ‚žœŔ ÎÁ ͘Á ŕ— Ĺ‹Á ˙˜ĎŸß ޟ˜ˆ ˖‚• È Ă߈ ͂žˆ
˙š‚éƒ ÍË ŕé— ËéŒ‚éƒ ˙é› flow ˙ŸŒ ڟ ˖‚• ŕ—œŸÁ ŕ› ÎÁ ÜßÁ .ˌ˙› ŕËßΕÁ
‚éŸ ÚéŸ ˙ßÍ Í‚œ ͘ŸË ß ÍŸß… ŹŢ…› È ނŸÍ‡ ß ŕ…•Í˜ ÍÁ͖ È Ă߈͂žˆ
.Ë΂‹˙› ނ‹Ŕ ÁÍ ‚žœß…‹ ˂‡ŸÁ ͂— ˙ŸŒ ޟÁ .˜— Üͅœ— ŕ‰• ˜ˆ

.Ë韂雜 export ÁÍ ˙‡ß͊ ˜Á߅˙›œ PDF ß HTML ˙‚ž…›Í• ŕƒ Ă߈͂žˆ ޟœˆ›
.ÝËߛœ Ř̉ ÁÍ Ţ‚ƒŸ…Œ„ HTML ß RTF ˙‚ž™Ÿ‚• È ˙Á̓ ޟœˆ› ޛ

XML ʼn… ޅ› ݅‹Ÿ‹ ڟ ˟‚ƒ ‚›Œ ŹHTML ß RTF ŹPDF ˙œ‚ƒŸ…Œ„ ŢËßΕÁ ̓ ŕߚ
XML ˙‚éŰé… ÎÁ ŕ˂镅‹Á ‚ƒ ޅ› ŢËߛœ ś͕ ˙Á̓ ˟œÁ߅˙› .˟΂‹ Á͇Á ÁÍ
.˟Ÿ‚›œ ޟȟ‚‡ ÁÍ ĹÁÍ߅‹Ë





ŕ‡Ÿ…œ
ÎÁ ŕ˂é•é…é‹Á ŕßé‰éœ ÎÁ -ËéŸËßé›éœ ˗ ÁÍ á͂Ÿ‹ƒ łšÔÁ Źŕß›‡› ޟÁ ÍË
Ýé…é‹éŸ‹ ŕƒ ÁÍ á͘ŸË ˙‚˙ŸŔ͂— ŕ— Ä‚ˆ Ă߈ ͂žˆ ˂‡ŸÁ ‚… Java Print API
˟œ— ŕ˂•…‹Á џ™• іœ ޟ› ‚ƒ Ă߈ ͂žˆ ÎÁ ˟œÁ߅˙› .˟ÁΕÁ˙› Á߂‡ „‚ˆ
њ… ݅‹œÁ߅ ŕ— ‚‡œÁ ‚… ޛ .˙…Ŕ ŕ‹ß… ˙Á̓ ˙‹‚‹Á ß ŕŸ‚„ ŢÁߜƒ ŢŔ ÎÁ ‚Ÿ
.ÝÍÁĚ阃 ނ…Í‚Ÿ…ŠÁ ÍË Ëßˉ› ނ›Î ß Ţ‚—› ޟÁ ÍË ÁÍ Ĺ‚šÔÁ ˙›‚›… ŕ— ÝË͗
˟ˇ Java Print API ɟŽß… ˙Á̓ ޛ ˟‚›œ ŕŽÍ ÁÍ JDK 1.4 ނ‹ ŕ— ˙…–ß ‚…
‚éŸ ŚÁßéěé‹ ŕéß雇› ޟÁ ‚ƒ ŕԃÁÍ ÍË Í˜Á ‘–ß› ŢŔ ‚… .݋Í˙› śˊ Áˡ›
.˟œ—œ ۜÍË ˙ÁŕՉ™ ޛ ŕƒ ˙—Ÿœßͅ—™Á ŕ›‚œ ܂‹ÍÁ ÍË ËŸ…ŒÁË ˙…Á˂žœŒŸ„

Jean-pierre Dube






ŕ˜‹Ÿßœ ˙•͐›
ąš¸¸ Ü‚é‹ ÍË ÁÍ Infocom ßÁ .Ë錂éƒ˙› Á߂‡ ܖ…‹› Í߂Œ› Jean-pierre Dube
ş͟˛ ˟™ß… ˙Á̓ ÁÍ ˙‚…ŠÁ ŕ›‚œÍƒ ޟ˜ˆ Infocom ŢŔ ÎÁ Є .Ëߛœ П‹‚…
.ŋÁ ŕËÁË ˙–̓ ÔßԊ ٟÍÔ ÎÁ á͟˜ ŕÎÁ˜Á ŕËͅ‹˜ ş͟˛ ß Ëœ‹
ß C ŹVisualBasic ˙‹Ÿßœ ŕ›‚œÍƒ ŕœŸ›Î ÍË ˙œÁßÁ͕ ŕƒÍ‡… ˙ÁÍÁË Jean-pierre
.ËßÍ˙é› Í‚é›Œƒ ˟ˇ ˙‚ŕĎß̈́ ŕ› ˙Á̓ ݞ› ނƒÎ ڟ Ţߜ—Á ŕ— ËŒ‚ƒ˙› Java
Ĺé•Í ‚éŸéœË ÎÁ ŕ陂閛 ޟÁ ޅŒßœ ݂˜œ ÍË ŕ— ŃÍ˂› ŕƒ ÁÍ ŕß›‡› ޟÁ ßÁ
.ŋÁ ŕËߛœ ݟ˖…




Resources
Graphic Java 2, Mastering the JFC: AWT, Volume 1, David M. Geary (Prentice Hall, 1998) -- you will find tons of books covering Java AWT, but none will cover the subject as thoroughly. 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. Joshi and Pavel A. Vorobiev (Ventana Communications Group, 1997) -- this book was helpful when Java 1.1 came out, and it 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 4, 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

"Java Tip 43: How to Read 8- and 24-bit Microsoft Windows Bitmaps in Java Applications," Jeff West, with John D. Mitchell (JavaWorld):
http://www.javaworld.com/javatips/jw-javatip43.html

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

The JUnit homepage:
http://junit.org

The form layout manager:
http://www.oz.net/~bhawkins/software.html





˙‡œ‹Í՜
ޟÁ ËÍߛ ÍË ÁÍ Ëߊ Í՜
:˟Ÿß˜ƒ ‚› ŕƒ Ă™Ô›

ŃÎÍÁ ‚ƒ ˙™ŸŠ -
ŃÎÍÁ ‚ƒ -
ŃÎÍÁ˙ƒ -

˙œ šßÔ ˙™ŸŠ -
˂œ› -
ŕ‚…ß— -

˙Š… ˙™ŸŠ -
Ăߙԛ -
ŋŸœ ˙Š… ˙•‚— ŕÎÁ˜Á ŕƒ -


:݂œ

:ڟœßͅ—™Á ŋ„

: ŗ͌ ݂œ

܃– ˙‚Ĺ›‹–
Á߂‡ ÍË Ä‚ˆ áߘ™Á ‚ƒ ˙Ÿ‚œŒŔ -ÜßÁ ś‹– Á߂‡ ÍË Ä‚ˆ
È ޟ…‹Šœ -ÝßË Ĺ›‹– Á߂‡ ÍË Ä‚ˆ
È ق– ŘÁ˝Á -Ýߋ ś‹– Á߂‡ ÍË Ä‚ˆ
È ق– ˙‹Ÿßœ ŕ›‚œÍƒ -Ý͂žˆ ś‹– Á߂‡ ÍË Ä‚ˆ
È Ă߈ ͂žˆ ނƒŸ…Œ„ ˙‚Đš— ،— -݇œ„ ś‹– Á߂‡ ÍË Ä‚ˆ








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