Đang tải... (xem toàn văn)
Thật sự, thì Swing còn nhiều hơn như thế. Swing là bộ công cụ GUI thế hệ kế tiếp mà Sun Microsystems tạo ra cho phép môi trường phát triển enterprise trong Java.Bằng môi trường phát triển enterprise, chúng ta hiểu rằng, các lập trình viên có thể sử dụng Swing để tạo ra các ứng dụng Java có khả năng mở rộng với một dãy nhiều thành phần mạnh mẽ. Thêm vào đó, bạn có thể kế thừa hoặc chỉnh sửa những thành phần này để điều khiển việc hiển thị và các hành xử của chúng. Swing không phải là một từ viết tắt. Đó là tên thay thế cho một tập hợp lựa chọn của nó cho các designer khi dự án được thực hiện vào 1996. Swing thật sự là một phần của gia đình rộng lớn các sản phẩm của Java được biết đến như Java Foundation Classes s(JFC) bao gồm nhiều đặc điểm của Internet Foundation Classes của Netscape cũng như bị ảnh hưởng thiết kế của Taligent và Lighthouse Design của IBM. Swing được phát triển thật sự kể từ thời điểm bản beta của JDK 1.1, khoảng mùa xuân 1997. Swing API bản beta đưa ra khoảng nửa cuối 1997 và được chính thức phát hành vào tháng 3 năm 1998. Khi được phát hành, các thư viện của Swing 1.0 chứa khoảng 250 lớp và 80 giao tiếp. Sự phát triển được tiếp tục khi theo thời gian, bản Swing 1.4 chứa 85 giao tiếp public và 451 lớp public. Mặc dù Swing là được phát triển đơn lẻ từ lõi của Java Development Kit, nó yêu cầu phải có tối thiểu JDK 1.1.5 để chạy. Swing được xây dựng dựa trên những mô hình event được giới thiệu trong serie JDK 1.1. Bạn không thể sử dụng Swing với JDK 1.0.2, thêm vào đó bạn phải có Java 1.1 cho phép trình duyệt hỗ trợ Swing Applet. Java 2 SDK 1.4 được phát hành bao gồm nhiều lớp Swing được cập nhật và hỗ trợ một vài đặc điểm mới. Swing được tích hợp đầy đủ trong cả trong bộ công cụ của các nhà phát triển và runtime environment của tất cả các bản phát hành Java 2 (SDK 1.2 và những phiên bản cao hơn) chứa cả Java Plug-in.
!"!"#$%&''()!*+), -./01!230456%!!%78901! : ; !3 $<=>?@@4* 01! : A : @ 6)B+-!CD045!2!EFG= %H! )/)@) !%I%2 0A% :@@ % )@ #JK2 0A% :@@ % )@+!L: K+!!46% -M!N:)OPE: !!QPE#!N=3RS 5T5P/%7,MN+!N:= U!!V)O;%7/:=:!:W!!XO !"!L =2%345YZN4M/!56%1%4B!9 !"N!!!P@)@ =PB01!B![[\6)B4 5%7!"- 54T!!)3%]!"#01!0# ?P^4))@))$#?^*8U!:!"@ @?P ^4))@) !" @)!%@ !_ 0 W 3 0S = !" 4@ <)@`@)!"JH01!% :6)B=:A:3 @!"#`+=3aXb[[cde3@0 =3 O!f[[c01!!gQ!%hR[[i01! %+!!0!"j!Q=3klj4T%ij%B % :01!%E!=@A+3m!Qil% %4!ml4T%%4! HU!Pa401!% :D4n4o!"#`@@4%@+N/M !7%3!Nf:#`l:!/01!Xb/PBPB M; 2-@@01!T )@ @#`J=2:)OPE T#`jk+MN%3!N#!%I% -P/p 1d%%4@#k`m01!%84T% 01!!6%6p 15U!:T01!g!1%7/" !3 5!2!E!"!!% : @@ @!". !3!!3%#k$`k;%M3!D*!Q!3 #e4q k ZU!:!" k^3e44@ H5 ;g:LW.S!!4T%4=3R ;!3$<=>?@@4)*!p%7+6!g/!3 A: @<>?) S5. 9 ! % :FGjR0APa@5!T=:P Hr% sP)ht!C)OPE 5 %4r GXH! )r <>?u9D !![l'[i''kjjj !"9 +f/gH!)!_!N5<>?01!= M 7 0A Pa d%%4@ !3 ./ 3 T !L !N=3R:<>?=!p 1!!<>? 8sP)+GXHr#H@44<>?U!WMN+ !%I%0APa!/:<>?A: @=2 %3NQPE@!!/+50APa),OX@!3 4:f.fT9v!3./6)B!N94 5% :+/<>?! MfTp%7 kk^!%7<s@ w7!!%7=2U@x@+ x4;%7/5!46% M;<>?:W!L/ N+!L)OPE2 0A89f!D3:,!L M - 3R ;%74@477M01!!6% #`+U!Pa;%7ds!g4=2601! ;U!:41!"N 0T!N+!!46% -M=2!N5)B 4B!90!N;4T%!(^)U!(e@4: ;46% -M!N: ;%7!" M9k4T%/+ #X!W5f01%@!/:/ %7/+!5p%7:0D!03 bN4!O)+-),01!U M-!;6+0AD $)4P*v-;%7/M9y@/@zS-!L Y ; ; %7 S 5 S Q! 5 f! # =2 )O PE vT!!%74@+p%7:3bNK !!)OPE89f!!"f01F %!)^L42:3b !L MU!"!!%7@/@!.!L01! !Q N;4T%/!%I%!!46% -M:5!! !N;!389!"=!Q$!@ *34; %7=01!aT+!/D;-!N){ 0T!N # w7!!%744@+!V!N5!@ %q4@@4 4=2%3=/!%I%!!46% -M,,4<>?!" QPE!"9A: @=1%!L!3!" !/QPENMN+!!=!!%7 !%I%p 1P|P!V)O!!XO!"!!%7 kh^!U!:S 5 ;U!: M=!%bT;%7 ds !_ !N . ; %7 T 04@+ @@+ )4P@ +)%@ + % @)) +@ 4r @@X;%7p 1!/ !!)@!"!LK5)f401a/}!! P@ 48M ^!%7!N!!4%UM M!LJ!N:a/!9 !!)B=%g!!!%7+Wx!L50 T ; %g N ! q !C!Np 1P@!!:W;%7 km^!N!!4T% `0T b/ 4 ; 2 3 Y !! N 0 1.javax.accessibility ^Q!!4T%!!%!N:01!)OPE!%I%!2 1 L%:0D!T!!%7!"^!!2 1L%!6% 5P/!!@+59!R3%N-HU!Pa!!4T% !!@))4/4;!2=25!!!%70 !L 01! )O PE S 5 2 !! %7 2.javax.swing ^Q!!%7!f4o!"+f7!!2-% !! 4T% p 1 3.javax.swing.border ^QWx!!4T%0A 01!_0i0A01! WxJ P@ =2%34;%7+/-+!L4; /f89U!)OPE0;5!gU!L X!!%70f P@ !" M+ !N:4T%!; P@ !N){ N/+U!!N: ! 5 4T%T 4.javax.swing.colorchooser wp 1 ! %7 #^4 ^)@ 5.javax.swing.event ZWx;4)@@ T;@@;%7)O PE : % 2 T !! !4)) 6.javax.swing.filechooser wp 1 ! %7 #?4@^)@ 7.javax.swing.plaf ZWx;/fP/.M<>?!p%7 N / !Q !! N ! 4 (X)%4r)!+ (X)%4r@4 (X)%4r4 8.javax.swing.table ^!.%!!2-)!%74@+!%I%)Y%X% 2 M WP40TT)BX.0DB03g 9.javax.swing.text ^!.%!!:!"!!4T%%PB MR3p 1= 2 PE 01! 0 P!@'@ 10.javax.swing.text.html O PE =~ 6 9! W P R 3 wH< 11.javax.swing.text.html.parser wp 1 ! %b g! wH< 12.javax.swing.text.rtf O PE =~ 6 9! W P •! @X ? 13.javax.swing.tree ZWx!!2-)%75!b/%b!.%+!N:/ 5 !. L! r4@ U! 5 P/ !! 5! g 14.javax.swing.undo ^Q;!Q!R!7!!)!Q!RP ^!=!Q!R!" ^!%7)B%b!.%T !!b € % b € M • • %b • FG!b ‚ 0&)+4))+ @)+ • @X @)+4 • 0 ƒ • %b • • „ )@ ƒ %2 € D „ %M ‚ „ MFG !!0D … • ! ‚ „ • +! • ! € ! € !2 € 0D „ !0 € 0P) • 4 ) d%%4!m • %b • 0APa0)& • 5frame+U!5!O)4!!g$#? @* • 5panel+20A94pane$#e@4* • 5$#J* • 54@4$#<@4* frame 4f01!QSQ!V)top-level containerBP !"r @K!!b € %5a:!! • %b • =!46%)B!NU !"- MaN !C!N!! • %b • =!0A01!)0 ‚ P „ :4f01!QQ!V4P4)$#`4*%%4@)$#d%%4@* panel 4f01!QQ! $intermediate container) panel R • „ !… € !X € ! „ „ … € ! ‚ • 4@40 ƒ 2 € 0D „ !0 € 0 € ! = € ! ! • ! € )! 44 %@) $#! 44e@* • @P %@) $#@Pe@*+! € ! € ‚ 0D ‚ 4bƒ+0D € !D € PM „ ! ‚ 2 „ !0D … • button • label4 • 0 ƒ • %b • !D ‚ $atomic components*+0 ƒ • %b • • =2M ‚ !0 € ! € ! • %b • = € !ds20D • + ! € ! • %b • !D ‚ • /)@ ƒ 4 • DM ‚ b „ 2b • • 0 • %… € 0D • P • de!!b € %M • • %b • !D ‚ +2 • !X@) $#^JX*+@Xr@4P)$#@X?@4P*+ • 4@)$#4@* w… • P0D € b/ 4 • )D 2 • %b !b € % D € „ ! ‚ ! € ! • %b • ingApplication 0… • @ ƒ M+/! ‚ ! € !!0D … • D ‚ b € ! ƒ ! € M • 0 € != € !0D • 2 € !! ‚ )D2 • bƒ4 • 2 € 0D „ !0 € 0 € ! … ‚ +D € M ‚ ! € ! • %b • = € !M ‚ M „ )0 „ 2 • „ ! ‚ … • H2ƒ2 „ 2 € 0D „ !0 € 0 € !… ‚ M • € M € %!0 € 2 „ 2 € 0D „ !0 € 0D • 0D „ ! „ 4 • content pane4 • M „ !+ „ =2!b • bM € • 4 • 2 € 0D „ !0 € 0 € !… ‚ • ! € • 4 • 2 € 0D „ !0 € ^0D … • )@ ƒ 0 „ 2 „ ‚ 4/ € ! „ pane contains+ 0 „ !M € %R „ ! € M € %!0 € b € ! ‚ ! € ! • %b • )@ ƒ M ‚ „ FG•M2 € D € top-level container … • ! € menu bar+menu bar)@ ƒ 0 € 2 „ • R „ !M „ R • • content pane ZM ‚ M2 „ • %b • • 2 € 0D „ !0 € +! € M ‚ P • M • ! € != € ! ! ‚ %0D0 € !add()e0D0 € !add() ! € … € b € 2 € )2 € $ @* Z „ ƒ )b/)@ ƒ 0 „ !M „ M „ !M2 „ button • 2 „ label • panel& r @†@#? @$*‡ †@#J$*‡ 4@4†@#<@4$*‡ %@†@#e@4$*‡ %@PP$*‡ %@PP$4@4*‡ r @@^@e@$*PP$%@+J P@ </^ˆˆ•*‡ k </H@@ ^ € !2 € 0D „ !0 € )0 ‚ P „ layout managersM ‚ X € !4b „ %=… € !0D € ! • „ … € ! ‚ ! € ! • %b • !0 € € J P@ ))@ ƒ ‚ 0D ‚ M € 4/! ‚ FG)R • ! € !4 • !! € ! • %b • 4D € 4M Layout management4 • € … • X € ! „ =… € !0D € ! • „ … € ! ‚ ! € ! • %b • HR „ ! „ +2ƒ2 € 0D „ !0 € )@ ƒ ! € 2 „ layout manager # %4r 2ƒ D „ )0 ‚ P „ l layout managers 2 0D • b € & BorderLayout, BoxLayout, FlowLayout, GridBagLayout, • GridLayout.0 ƒ layout managers0D „ !M € =M € M ‚ M ‚ „ • %b • ! • 2 „ D • M ‚ v • 4D € %0 € \+CardLayout+4 • 2 „ 0D • D „ %R „ !M „ € 0D „ !)0 ‚ P „ M ‚ =M € D „ %! € !layout managersD € J „ ! € M ‚ PM ‚ P • /2 ‚ 2 „ layout managers D ‚ • 2 „ containerM ‚ )0 ‚ P „ ZD ‚ 4 • !… ‚ !b • „ %0D0 € !)@</Z „ ƒ )b/)0 ‚ P „ J P@ </& #e@4%@†@#e@4$*‡ %@)@</$@J P@ </$**‡ ! € M ‚ )0 ‚ P „ ! € !%0D0 € !)M ‚ • /M € =… € !0D € ! • „ … € ! ‚ ! € ! • %b • &)@H‰@+)@e @r@ @P‰@+ • )@HX‰@+ R „ !! € M ‚ Xb/P0 „ ! € !4D € %!! ‚ ! € ! • %b • M ‚ = € !! € !%0D 0 € !0&@H‰@+@e @r@ @P‰@+ • @HX‰@ JM! „ M „ !!!b € %! € ! • /M € M • =… € !0D € !+! ƒ ! • ! € M ‚ !!b € %M! € ! • /M € M • M „ !!!… ‚ +2 • ! € !%0D0 € !)& )@d4@Š • )@d4@‹+@d4@Š • @d4@‹@P) h ˆ@wP4 Event handlingM ‚ M „ M „ !!0D … • % ‚ 2 • ! € !/M!b • 0 • %… € M • +… € P „ 0M „ !0D • P • b € %… € !2 „ ^0D … • )@ ƒ 0 „ !M „ b € ! ‚ ! € ! € ! • R € R € ! € !)0 „ =M „ $@@P4*R • ! € ! 0 „ !M „ M € … • ! ‚ )0 „ =M „ H2ƒ=0D • P • b € %… € /=… € !!2 „ +… • 2 „ )0 „ =M „ X ‚ / Jb € =M ‚ 2 € 0D „ • ! • M • 0D „ ! € D ‚ 2 „ )0 „ =M „ ^ € ! • %b • ! € M ‚ „ M • =M ‚ )0 „ =M „ = € !J ‚ )b/4M „ =M2 „ • =M ‚ )0 „ =M „ & Ha ̀ nh đô ̣ ng Kiê ̉ u Listener G)@ =… € ! • € 4M „ + b € %… € %!@ =4 • M „ ! @Xr@4P+ R „ !=… € !! „ • @@ d!<)@@ G)@ € 2 „ r @$P* sP<)@ @ G)@ b € 2 „ € !2 „ = M!2 „ M2 „ • %b • H)@<)@@ G)@ P !/M ‚ !2 „ M 2 „ • %b • H)@H <)@@ • %b • M ‚ „ ^%@<) @@ • %b • 4b € / „ € ! ‚ =@/ P ?!)<)@@ vM „ !! „ 40 „ 4@R „ !4)! € /2 ‚ <)@4@!< )@@ H2ƒ)0 „ =M „ M • 0D „ ! „ PM „ D ‚ 2 „ 2 € 0D „ • 2 € 0D „ € ! !b € %2M • )0 „ =M „ ! ƒ 0b „ P „ 0D „ !D% )0 „ =M „ 2 • ! ‚ )0 „ =M „ 20D • 4 • ! € ! • %b • +00 ƒ =M ‚ 2 € 0D „ = € ! ! ƒ ! € M ‚ 4 • 2 • ! ‚ )0 „ =M „ w•)b/ „ !b € M • • / H2ƒ@@P4@ • ‚ ! € h0D € !0)& • %b • = € !4D € %@@P4@ +X € ! „ ƒ 2ƒ4D € %)@ ƒ 0 „ !2 „ 4)@@ @ r!@R „ !=M € 0 • 2 „ 4D € % • 4D € % € 0 „ !2 „ 4)@@ @ r!@v… € P „ & %4!!4))H/^4))%4@@)d!<)@@ Œ • ZR=/ € )0 „ M „ PM „ ! ‚ 4D € %@@P4@ 04 • 2 „ 4)@@ M 2 „ R „ !M • • %b • v… € P „ & )@^%@PPd!<)@@ $)!@•rH/^4))*‡ • 0 „ !0 ƒ %0D0 € ! 4)@@ @ r!@v… € P „ & %4!P!e@ r @P$d!ˆ@@*Œ .//code that reacts to the action . Ž w ƒ /X@X@ € ! € !0 € !2 „ € 4M „ $#J*R € R € )0 „ =M „ =… € !!2 „ ZM ‚ X € ! „ = • … • 0D • P • =… € !!2 „ 4M € 4M „ $R „ !P • ! € !%… € € *… • 2 „ !0D … • % ‚ ! € 2 € 0D „ 0 „ !PM „ ActionListener ^0D … • % ‚ R=/ € 2 € 0D „ € 04 • 2 „ !4)@@ M € 4M „ $2 • ! ‚ )0 „ =M „ *R • ! € !)0 ‚ P „ %0D0 € ! addActionListener )@ =… € !4M € 4M „ + € 4M „ )@ ƒ % € 2 „ • ! ‚ )0 „ =M „ Zb/4 • /M !b • ! ‚ %0D0 € !actionPerformed. %0D0 € ! • /+)2 € )@ ƒ 4 • 2 „ 2 € 0D „ ActionEvent • )2 € • /)@ ƒ !!b € %2M • )0 „ =M „ • 2 • ! ‚ )0 „ =M „ )@ • € 4M „ +!4)@@ )! ‚ € 4M „ 0D „ !% € m e Painting… ƒ 4 • @ ƒ ! € ! • %b • M • … • HR „ !Pb • M „ ! • / ! „ ! € ! • %b • 0D „ !0 „ !M „ 2 „ ! € !PMƒP • +0b • M € ! € ! !0D … • M • „ 4 • %0 € ! „ %4MR • ! € ! • /! „ 0D • M • !! € ! • %b • 2 „ FG!b • @ ƒ 4 „ PM „ ! ‚ !… € € +R „ !=!b • 4 • 0D0 ƒ M • !… ‚ M • „ € ! ‚ !0D … • + € )@ ƒ =D ‚ 2 „ • %b • D ‚ 0 € !!b € $%q4@@4!%@*!b • 0D „ !@ ƒ 4 „ • 4 • M „ !Pb • X2 € @42 • %b!b € %• € … • X0 ƒ 4/ € • /0D „ !0 „ !M „ D ‚ M „ 2 € ds • 04 • !!0D … • ! € @ ƒ M „ ‚ • … € !0 € D ^ € ! • %b • ! € M ‚ @ ƒ 4 „ !… € € b € =M ‚ = • !b • M € „ %0D0 € !setText M2 „ • %b • + • %b • € )@ ƒ 0 „ 2 „ @ ƒ 4 „ !… € € +/2 ‚ =… € !0D € !+• ^ ƒ 2 € 0@@qP4+%! ƒ 0D „ !0 „ !M „ 2 „ M € … • D =2 „ )0 „ =M „ X ‚ / … • € … • @ ƒ 4 „ =2 0D „ !0 „ !M „ • € … • @ ƒ 4 „ ! € ! • %b • )@ ƒ =2 „ R € ‚ D ‚ ! € !)0 „ =M „ = € ! l d!) vD € 2 € 0D „ Action+de!!b € %0 ƒ 2ƒ D „ R „ !M „ ! M „ !!X@ ƒ P0 ƒ 4M „ • „ € 0 ƒ R „ !M • • %b • % € ! € !)0 „ =M „ • 2 „ v… € P „ +=! € 2 „ • 2 „ @@! • 2 „ !0 € ! R+4 € !)!b • !bR € !M „ !)0 ‚ P „ 2 € 0D „ ActionM ‚ X € ! „ R ‚ + ! • „ € ! ‚ • %b • b/4 • … € P „ ! ‚ M „ !)0 ‚ P „ Action M ‚ „ 2 „ M !2! „ • 2 „ @@! • 0 „ !M „ 2 „ !0 € !R& d!4@rd!†@<a class that implements Action>$*‡ #J†4J PP$4@rd!*‡ #H@@@@†H@PP$4@rd!*‡ Z2 € D € /@@+M ‚ ! € 0D „ !0 ƒ 0 ƒ … € !0 „ !)0 „ ! ‚ M „ ! )0 ‚ P „ Action,% ‚ „ • %b • )0 ‚ P „ %0D0 € !add(Action) ! ‚ #4J +#H@+R „ !#e%%H@HR „ ! „ +=2! € • de • 2 • „ D ‚ M M addActionListener(ActionListener) M ‚ =M € 2 € 2 „ Action D € 2 „ • %b • = € !2 • „ 0 „ !)0 „ ZM ‚ „ 2 „ 2 € 0D „ Action, € !4 • % ‚ „ 2 „ 4D € %!! ‚ 4D € % AbstractAction • 0 „ ! € 4D € %! • /+!0 „ !M „ %0D0 € ! actionPerformedM ‚ € !2 „ 0D „ ! D ‚ 4 „ 2 „ ! € ! ‚ € = • )0 „ =M „ X ‚ / b/ 4 • … € P „ ! ‚ M „ ! „ • 0 „ !M „ 4D € %!! ‚ 4D € % AbstractAction& 4@rd!†@d) !d!$‘F4@r‘+ @@!$‘@)'4@rr‘**Œ %4!P!e@ r @P$d!ˆ@@*Œ P)%4/•@)4$‘d!r r )'@@‘+@*‡ Ž Ž‡ w… • P0D € b/4 • P@0 € P „ ! ‚ M „ !)0 ‚ P „ d!M ‚ 0 „ !M „ … € R Zb/4 • 0 ƒ … • … • b € /=@‘F4@r‘ D ‚ MP)4@P& Z „ ƒ ! ‚ ‘F4@r‘!& 4@)@4@!@P†''true if the action should be enabled; ''false, otherwise 4@rd!)@ˆ4@P$)@4@!@P*‡ = „ • %b • )0 ‚ P „ Action+! € M ‚ • /M € ! € @/ € … € !! ‚ … • v… € P „ 0=2 € M • P • 4%! ‚ 2 „ +R „ ! • /M € M „ !Xb € M „ /M € b € ! ‚ ! € • %b • R • ! € !M • + X € ! € !!+P • R ‚ & †4J PP$4@rd!*‡ )@@X$‘‘*‡''!q4/ )@4%@X$‘))@4@r‘*‡ @@†H@PP$4@rd!*‡ @@)@!$44*‡'' 4/!)@)@!@ J ‚ )b/4M „ =M0 ƒ %0D0 € ! • ! ! )0D • P • ! € ! Action. ^ € ! • de)0 ‚ P „ 2 € 0D „ d!0D „ !! • 4 „ 0 )& • „ • )0 ‚ P „ 2 „ Action • „ 2 „ • %b • M • =M ‚ Action $d!q^ 44@P ^%@* ^ @PG)d! Constructor or Method Purpose d) !d!$* d) !d!$ * „ 2 „ 2 € 0D „ Action2 ! € ! )2 € ! ‚ %0D 0 € ! / d) !d!$ + !* ^ ! )+! € M ‚ X € !4b „ %R ‚ /! • %b • b € / P )@ˆ4@P$4@* 4@)ˆ4@P$* Š € !4b „ %/b „ M € ! € • %b • ! € b „ 0D „ ! € ! 2 „ / =2 2 %0D0 € ! setEnabled(false), 2M „ b € ! ‚ ! € ! € !2 „ 4M! € ! • %b • 0D0 „ 0 b „ /+)0 ‚ P „ %0D0 € !setEnabled(true) M ‚ € !2 „ 4 „ • ! ‚ ! € ! • %b • ^ @d!q^ 44@P^%@ Method Purpose #H@@ PP$d!* #H@@ )@ $d!+ * (in JMenu and JPopupMenu) „ 2 „ 2 € 0D „ JMenuItem • R „ ! € • @/%%%@ #J PP$d!* (in JToolBar) „ 2 „ 2 € 0D „ Jbutton • R „ ! € 4M!2! „ \ !) M • • %b • ! € M ‚ M ‚ „ !)$#<@4 • #J* 0D • … • !)4 • 0D • D „ %! € M „ ! ‚ @!!4)) H2 „ • • %b • 0JLabel • JButton+! € M ‚ 0D „ ! … € D ‚ 2 „ icon!4 • 2 „ 2 € 0D „ R € =M € !R „ !@ ƒ D € PM „ ! !!b € %!PM „ Icon ! € !0 „ !M „ b € R „ M „ • M „ ‚ @ ‚ @ ƒ 2 „ Icon 02 „ b „ % ‚ ! € P „ 0 € !F?R „ !#eˆF w… • P0D € b/ „ 2 „ 0 € P „ )0 ‚ P „ 2 „ !M ‚ … € ! 4@4& %b • ƒ ! ‚ !0D … • +!b4M „ $*P • M ‚ „ !)0 ‚ P „ 2 „ !+!b4M „ $k* • $h* € !b € / • 4@4&& $*@!!†@@!$‘@)'PP4@r‘+ ‘% @/@4@)))%4‘*‡ $k*4@4†@#<@4$‘@P@X‘+!+#<@4^ˆˆ•*‡