-------------------------------------------------

±¾½Ì³ÌÓÉyyc,spiritÕûÀí

-------------------------------------------------


µÚÊ®ÈýÕ ´´½¨´°¿ÚºÍ³ÌÐòƬ

ÔÚJava 1.0ÖУ¬Í¼ÐÎÓû§½Ó¿Ú£¨GUI£©¿â×î³õµÄÉè¼ÆÄ¿±êÊÇÈóÌÐòÔ±¹¹½¨Ò»¸öͨÓõÄGUI£¬Ê¹ÆäÔÚËùÓÐÆ½Ì¨É϶¼ÄÜÕý³£ÏÔʾ¡£
µ«Òź¶µÄÊÇ£¬Õâ¸öÄ¿±ê²¢Î´´ïµ½¡£ÊÂʵÉÏ£¬Java 1.0°æµÄ¡°³éÏóWindows¹¤¾ß°ü¡±£¨AWT£©²úÉúµÄÊÇÔÚ¸÷ϵͳ¿´À´¶¼Í¬ÑùÇ·¼ÑµÄͼÐÎÓû§½Ó¿Ú¡£³ý´ËÖ®Í⣬Ëü»¹ÏÞÖÆÎÒÃÇÖ»ÄÜʹÓÃËÄÖÖ×ÖÌ壬²¢ÇÒ²»ÄÜ·ÃÎʲÙ×÷ϵͳÖÐÏÖÓеĸ߼¶GUIÔªËØ¡£Í¬Ê±£¬Jave1.0°æµÄAWT±à³ÌÄ£ÐÍÒ²²»ÊÇÃæÏò¶ÔÏóµÄ£¬¼«²»³ÉÊì¡£ÕâÀàÇé¿öÔÚJava1.1°æµÄAWTʼþÄ£ÐÍÖеõ½Á˺ܺõĸĽø£¬ÀýÈ磺¸ü¼ÓÇåÎú¡¢ÃæÏò¶ÔÏóµÄ±à³Ì¡¢×ñÑ­Java BeansµÄ·¶Àý£¬ÒÔ¼°Ò»¸ö¿ÉÇáËÉ´´½¨¿ÉÊÓ±à³Ì»·¾³µÄ±à³Ì×é¼þÄ£ÐÍ¡£Java1.2ΪÀϵÄJava 1.0 AWTÌí¼ÓÁËJava»ù´¡ÀࣨAWT£©£¬ÕâÊÇÒ»¸ö±»³ÆÎª¡°Swing¡±µÄGUIµÄÒ»²¿·Ö¡£·á¸»µÄ¡¢Ò×ÓÚʹÓúÍÀí½âµÄJava BeansÄܾ­¹ýÍϷŲÙ×÷£¨ÏñÊÖ¹¤±à³ÌÒ»ÑùµÄºÃ£©£¬´´½¨³öÄÜʹ³ÌÐòÔ±ÂúÒâµÄGUI¡£Èí¼þÒµµÄ¡°3´ÎÐÞ¶©°æ¡±¹æÔò¿´À´¶ÔÓÚ³ÌÐòÉè¼ÆÓïÑÔÒ²ÊdzÉÁ¢µÄ£¨Ò»¸ö²úÆ·³ý·Ç¾­¹ýµÚ3´ÎÐÞ¶©£¬·ñÔò²»»á¾¡ÈçÈËÒ⣩¡£
JavaµÄÖ÷ÒªÉè¼ÆÄ¿µÄÖ®Ò»Êǽ¨Á¢³ÌÐòƬ£¬Ò²¾ÍÊǽ¨Á¢ÔËÐÐÔÚWEB ä¯ÀÀÆ÷ÉϵÄСӦÓóÌÐò¡£ÓÉÓÚËüÃDZØÐëÊǰ²È«µÄ£¬ËùÒÔ³ÌÐòƬÔÚÔËÐÐʱ±ØÐë¼ÓÒÔÏÞÖÆ¡£ÎÞÂÛÔõÑù£¬ËüÃǶ¼ÊÇÖ§³Ö¿Í»§¶Ë±à³ÌµÄÇ¿ÓÐÁ¦µÄ¹¤¾ß£¬Ò»¸öÖØÒªµÄÓ¦ÓñãÊÇÔÚWebÉÏ¡£
ÔÚÒ»¸ö³ÌÐòƬÖбà³Ì»áÊܵ½ºÜ¶àµÄÏÞÖÆ£¬ÎÒÃÇÒ»°ã˵Ëü¡°ÔÚɳÏäÄÚ¡±£¬ÕâÊÇÓÉÓÚJavaÔËÐÐʱһֱ»áÓÐij¸ö¶«Î÷¡ª¡ª¼´JavaÔËÐÐÆÚ°²È«ÏµÍ³¡ª¡ªÔÚ¼àÊÓ×ÅÎÒÃÇ¡£Jave 1.1Ϊ³ÌÐòƬÌṩÁËÊý×ÖÇ©Ãû£¬ËùÒÔ¿ÉÑ¡³öÄÜÐÅÀµµÄ³ÌÐòƬȥ·ÃÎÊÖ÷»ú¡£²»¹ý£¬ÎÒÃÇÒ²ÄÜÌø³öɳÏäµÄÏÞÖÆÐ´³ö¿É¿¿µÄ³ÌÐò¡£ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃǿɷÃÎʲÙ×÷ϵͳÖÐµÄÆäËû¹¦ÄÜ¡£ÔÚÕâ±¾ÊéÖÐÎÒÃÇ×ÔʼÖÁÖÕ±àдµÄ¶¼Êǿɿ¿µÄ³ÌÐò£¬µ«ËüÃdzÉΪÁËûÓÐͼÐÎ×é¼þµÄ¿ØÖÆÌ¨³ÌÐò¡£AWTÒ²ÄÜÓÃÀ´Îª¿É¿¿µÄ³ÌÐò½¨Á¢GUI½Ó¿Ú¡£
ÔÚÕâÒ»ÕÂÖÐÎÒÃǽ«ÏÈѧϰʹÓÃÀϵÄAWT¹¤¾ß£¬ÎÒÃÇ»áÓëÐí¶àÖ§³ÖºÍʹÓÃAWTµÄ´úÂë³ÌÐòÑù±¾ÏàÓö¡£¾¡¹ÜÕâÓÐһЩÀ§ÄÑ£¬µ«È´ÊDZØÐëµÄ£¬ÒòΪÎÒÃDZØÐëÓÃÀϵÄAWTÀ´Î¬»¤ºÍÔĶÁ´«Í³µÄJava´úÂë¡£ÓÐʱÉõÖÁÐèÒªÎÒÃDZàдAWT´úÂëÈ¥Ö§³Ö²»ÄÜ´ÓJava1.0Éý¼¶µÄ»·¾³¡£ÔÚ±¾Õµڶþ²¿·Ö£¬ÎÒÃǽ«Ñ§Ï°Java 1.1°æÖÐеÄAWT½á¹¹²¢»á¿´µ½ËüµÄʼþÄ£ÐÍÊÇÈç´ËµÄÓÅÐ㣨Èç¹ûÄÜÕÆÎյϰ£¬ÄÇôÔÚ±àÖÆÐµijÌÐòʱ¾Í¿ÉʹÓÃÕâ×îÐµĹ¤¾ß¡£×îºó£¬ÎÒÃǽ«Ñ§Ï°ÐµÄÄÜÏñÀà¿âÒ»Ñù¼ÓÈëµ½Java 1.1°æÖеÄJFC/Swing×é¼þ£¬ÕâÒâζ×Ų»ÐèÒªÉý¼¶µ½Java 1.2±ãÄÜʹÓÃÕâÒ»Àà¿â¡£
´ó¶àÊýµÄÀý³Ì¶¼½«Õ¹Ê¾³ÌÐòƬµÄ½¨Á¢£¬Õâ²¢²»½ö½öÊÇÒòΪÕâ·Ç³£µÄÈÝÒ×£¬¸üÒòΪÕâÊÇAWTµÄÖ÷Òª×÷Óá£ÁíÍ⣬µ±ÓÃAWT´´½¨Ò»¸ö¿É¿¿µÄ³ÌÐòʱ£¬ÎÒÃǽ«¿´µ½´¦Àí³ÌÐòµÄ²»Í¬Ö®´¦£¬ÒÔ¼°ÔõÑù´´½¨ÄÜÔÚÃüÁîÐкÍä¯ÀÀÆ÷ÖÐÔËÐеijÌÐò¡£
Çë×¢ÒâµÄÊÇÕâ²»ÊÇΪÁËÃèÊöÀàµÄËùÓгÌÐòµÄ×ۺϽâÊÍ¡£ÕâÒ»Õ½«´øÁìÎÒÃÇ´ÓÕªÒª¿ªÊ¼¡£µ±ÎÒÃDzéÕÒ¸ü¸´ÔÓµÄÄÚÈÝʱ£¬ÇëÈ·¶¨ÎÒÃǵÄÐÅÏ¢ä¯ÀÀÆ÷ͨ¹ý²éÕÒÀàºÍ·½·¨À´½â¾ö±à³ÌÖеÄÎÊÌ⣨Èç¹ûÎÒÃÇÕýÔÚʹÓÃÒ»¸ö¿ª·¢»·¾³£¬ÐÅÏ¢ä¯ÀÀÆ÷Ò²ÐíÊÇÄÚ½¨µÄ£»Èç¹ûÎÒÃÇʹÓõÄÊÇSUN¹«Ë¾µÄJDKÔòÕâʱÎÒÃÇҪʹÓÃWEBä¯ÀÀÆ÷²¢ÔÚJava¸ùĿ¼ÏÂÃæ¿ªÊ¼£©¡£¸½Â¼FÁгöÁËÓÃÓÚÉîÈëѧϰ¿â֪ʶµÄÆäËûһЩ²Î¿¼×ÊÁÏ¡£

13.1 ΪºÎÒªÓÃAWT£¿
¶ÔÓÚ±¾ÕÂҪѧϰµÄ¡°ÀÏʽ¡±AWT£¬Ëü×îÑÏÖØµÄȱµã¾ÍÊÇËüÎÞÂÛÔÚÃæÏò¶ÔÏóÉè¼Æ·½Ã棬»¹ÊÇÔÚGUI¿ª·¢°üÉè¼Æ·½Ã棬¶¼Óв»¾¡ÈçÈËÒâµÄ±íÏÖ¡£ËüʹÎÒÃǻص½Á˳ÌÐòÉè¼ÆµÄºÚ°µÄê´ú£¨»»³ÉÆäËû»°¾ÍÊÇ¡°×¾Áӵġ±¡¢¡°¿Éŵġ±¡¢¡°¶ñÁӵġ±µÈµÈ£©¡£±ØÐëΪִÐÐÿһ¸öʼþ±àд´úÂ룬°üÀ¨ÔÚÆäËû»·¾³ÖÐÀûÓá°×ÊÔ´¡±¼´¿ÉÇáËÉÍê³ÉµÄһЩÈÎÎñ¡£
Ðí¶àÏóÕâÑùµÄÎÊÌâÔÚJava 1.1Àï¶¼µÃµ½ÁË»º½â»òÅųý£¬ÒòΪ£º
(1)Java 1.1µÄÐÂÐÍAWTÊÇÒ»¸ö¸üºÃµÄ±à³ÌÄ£ÐÍ£¬²¢Ïò¸üºÃµÄ¿âÉè¼ÆÂõ³öÁË¿ÉϲµÄÒ»²½¡£¶øJava BeansÔòÊÇÄǸö¿âµÄ¿ò¼Ü¡£
(2)¡°GUI¹¹½¨Æ÷¡±£¨¿ÉÊÓ±à³Ì»·¾³£©½«ÊÊÓÃÓÚËùÓпª·¢ÏµÍ³¡£ÔÚÎÒÃÇÓÃͼÐλ¯¹¤¾ß½«×é¼þÖÃÈë´°ÌåµÄʱºò£¬Java BeansºÍеÄAWTʹGUI¹¹½¨Æ÷ÄܰïÎÒÃÇ×Ô¶¯Íê³É´úÂë¡£ÆäËü×é¼þ¼¼ÊõÈçActiveXµÈÒ²½«ÒÔÏàͬµÄÐÎʽ֧³Ö¡£

¼ÈÈ»Èç´Ë£¬ÎªÊ²Ã´»¹ÒªÑ§Ï°Ê¹ÓÃÀϵÄAWTÄØ£¿Ô­ÒòºÜ¼òµ¥£¬ÒòΪËüµÄ´æÔÚÊǸöÊÂʵ¡£¾ÍĿǰÀ´Ëµ£¬Õâ¸öÊÂʵ¶ÔÎÒÃÇÀ´ËµÏÔµÃÓÐЩ²»Àû£¬ËüÉæ¼°µ½ÃæÏò¶ÔÏó¿âÉè¼ÆµÄÒ»¸ö×ÚÖ¼£ºÒ»µ©ÎÒÃÇÔÚ¿âÖй«²¼Ò»¸ö×é¼þ£¬¾ÍÔÙ²»ÄÜÈ¥µôËü¡£ÈçÈ¥µôËü£¬¾Í»áË𺦱ðÈËÒÑ´æÔڵĴúÂë¡£ÁíÍ⣬µ±ÎÒÃÇѧϰJavaºÍËùÓÐʹÓÃÀÏAWTµÄ³ÌÐòʱ£¬»á·¢ÏÖÓÐÐí¶àÔ­À´µÄ´úÂëʹÓõͼÊÇÀÏʽAWT¡£
AWT±ØÐëÄÜÓë¹ÌÓвÙ×÷ϵͳµÄGUI×é¼þ´ò½»Í¨£¬ÕâÒâζ×ÅËüÐèÒªÖ´ÐÐÒ»¸ö³ÌÐòƬ²»¿ÉÄÜ×öµ½µÄÈÎÎñ¡£Ò»¸ö²»±»ÐÅÈεijÌÐòƬÔÚ²Ù×÷ϵͳÖв»ÄÜ×÷³öÈκÎÖ±½Óµ÷Ó㬷ñÔòËü»á¶ÔÓû§µÄ»úÆ÷×ö³ö²»Ç¡µ±µÄÊÂÇé¡£Ò»¸ö²»±»ÐÅÈεijÌÐòƬ²»ÄÜ·ÃÎÊÖØÒªµÄ¹¦ÄÜ¡£ÀýÈ磬¡°ÔÚÆÁÄ»ÉÏ»­Ò»¸ö´°¿Ú¡±µÄΨһ·½·¨ÊÇͨ¹ýµ÷ÓÃÓµÓÐÌØÊâ½Ó¿ÚºÍ°²È«¼ì²éµÄ±ê×¼Java¿â¡£Sun¹«Ë¾µÄԭʼģÐÍ´´½¨µÄÐÅÈο⽫½ö½ö¹©¸øWebä¯ÀÀÆ÷ÖеÄJavaϵͳÐÅÈιØÏµ×Ô¶¯ÊÚȨÆ÷ʹÓã¬×Ô¶¯ÊÚȨÆ÷½«¿ØÖÆÔõÑù½øÈëµ½¿âÖÐÈ¥¡£
µ«µ±ÎÒÃÇÏëÔö¼Ó²Ù×÷ϵͳÖзÃÎÊÐÂ×é¼þµÄ¹¦ÄÜʱ¸ÃÔõô°ì£¿µÈ´ýSunÀ´¾ö¶¨ÎÒÃǵÄÀ©Õ¹±»ºÏ²¢µ½±ê×¼µÄJava¿âÖУ¬µ«Õâ²»Ò»¶¨»á½â¾öÎÒÃǵÄÎÊÌâ¡£Java 1.1°æÖеÄÐÂÄ£ÐÍÊÇ¡°ÐÅÈδúÂ롱»ò¡°Ç©Ãû´úÂ롱£¬Òò´ËÒ»¸öÌØÊâ·þÎñÆ÷½«Ð£ÑéÎÒÃÇÏÂÔØµÄ¡¢Óɹ涨µÄ¿ª·¢ÕßʹÓõĹ«¹²ÃÜÔ¿¼ÓÃÜϵͳµÄ´úÂë¡£ÕâÑùÎÒÃǾͿÉÖªµÀ´úÂë´ÓºÎ¶øÀ´£¬ÄÇÕæµÄÊÇBobµÄ´úÂ룬»¹ÊÇÓÉijÈËαװ³ÉBobµÄ´úÂë¡£Õâ²¢²»ÄÜ×èÖ¹Bob·¸´íÎó»ò×÷ijЩ¶ñÒâµÄÊ£¬µ«ÄÜ·ÀÖ¹BobÌÓ±ÜÄäÃûÖÆÔì¼ÆËã»ú²¡¶¾µÄÔðÈΡ£Ò»¸öÊý×ÖÇ©ÃûµÄ³ÌÐòƬ¡ª¡ª¡°±»ÐÅÈεijÌÐòƬ¡±¡ª¡ªÔÚJava 1.1°æÄܽøÈëÎÒÃǵĻúÆ÷²¢Ö±½Ó¿ØÖÆËü£¬ÕýÏñһЩÆäËüµÄÓ¦ÓóÌÐò´ÓÐÅÈιØÏµ×Ô¶¯ÊÚȨ»úÖеõ½¡°ÐÅÈΡ±²¢°²×°ÔÚÎÒÃǵĻúÆ÷ÉÏ¡£
ÕâÊÇÀÏAWTµÄËùÓÐÌØµã¡£ÀϵÄAWT´úÂ뽫һֱ´æÔÚ£¬ÐµÄJava±à³ÌÕßÔڴӾɵÄÊé±¾ÖÐѧϰʱ½«»áÓöµ½ÀϵÄAWT´úÂ롣ͬÑù£¬ÀϵÄAWTÒ²ÊÇÖµµÃȥѧϰµÄ£¬ÀýÈçÔÚÒ»¸öÖ»ÓÐÉÙÁ¿¿âµÄÀý³ÌÉè¼ÆÖС£ÀϵÄAWTËù°üÀ¨µÄ·¶Î§ÔÚ²»¿¼ÂÇÉî¶ÈºÍö¾Ùÿһ¸ö³ÌÐòºÍÀ࣬ȡ¶ø´úÖ®µÄÊǸøÁËÎÒÃÇÒ»¸öÀÏAWTÉè¼ÆµÄ¸Åò¡£

13.2 »ù±¾³ÌÐòƬ
¿âͨ³£°´ÕÕËüÃǵŦÄÜÀ´½øÐÐ×éºÏ¡£Ò»Ð©¿â£¬ÀýÈçʹÓùýµÄ£¬±ãÖжϸéÖÃÆðÀ´¡£±ê×¼µÄJava¿â×Ö·û´®ºÍʸÁ¿Àà¾ÍÊÇÕâÑùµÄÒ»¸öÀý×Ó¡£ÆäËûµÄ¿â±»ÌØÊâµØÉè¼Æ£¬ÀýÈç¹¹½¨¿éÈ¥½¨Á¢ÆäËüµÄ¿â¡£¿âÖеÄijЩÀàÊÇÓ¦ÓóÌÐòµÄ¿ò¼Ü£¬ÆäÄ¿µÄÊÇЭÖúÎÒÃǹ¹½¨Ó¦ÓóÌÐò£¬ÔÚÌṩÀà»òÀ༯µÄÇé¿öϲúÉúÿ¸öÌØ¶¨Ó¦ÓóÌÐòµÄ»ù±¾»î¶¯×´¿ö¡£È»ºó£¬ÎªÎÒÃǶ¨Öƻ״¿ö£¬±ØÐë¼Ì³ÐÓ¦ÓóÌÐòÀಢÇÒ·ÏÆú³ÌÐòµÄÈ¨Òæ¡£Ó¦ÓóÌÐò¿ò¼ÜµÄĬÈÏ¿ØÖƽṹ½«ÔÚÌØ¶¨µÄʱ¼äµ÷ÓÃÎÒÃÇ·ÏÆúµÄ³ÌÐò¡£Ó¦ÓóÌÐòµÄ¿ò¼ÜÊÇ¡°·ÖÀë¡¢¸Ä±äºÍÖÐֹʼþ¡±µÄºÃÀý×Ó£¬ÒòΪËü×ÜÊÇŬÁ¦È¥³¢ÊÔ¼¯ÖÐÔÚ±»·ÏÆúµÄËùÓÐÌØÊâ³ÌÐò¶Î¡£
³ÌÐòƬÀûÓÃÓ¦ÓóÌÐò¿ò¼ÜÀ´½¨Á¢¡£ÎÒÃÇ´ÓÀàÖм̳гÌÐòƬ£¬²¢ÇÒ·ÏÆúÌØ¶¨µÄ³ÌÐò¡£´ó¶àÊýʱ¼äÎÒÃDZØÐ뿼ÂÇһЩ²»µÃ²»ÔËÐеÄʹ³ÌÐòƬÔÚWEBÒ³ÃæÉϽ¨Á¢ºÍʹÓõÄÖØÒª·½·¨¡£ÕâЩ·½·¨ÊÇ£º

Method

Operation

init( )

Called when the applet is first created to perform first-time initialization of the applet

start( )

Called every time the applet moves into sight on the Web browser to allow the applet to start up its normal operations (especially those that are shut off by stop( )). Also called after init( ).

paint( )

Part of the base class Component (three levels of inheritance up). Called as part of an update( ) to perform special painting on the canvas of an applet.

stop( )

Called every time the applet moves out of sight on the Web browser to allow the applet to shut off expensive operations. Also called right before destroy( ).

destroy( )

Called when the applet is being unloaded from the page to perform final release of resources when the applet is no longer used


·½·¨ ×÷ÓÃ

init() ³ÌÐòƬµÚÒ»´Î±»´´½¨£¬³õ´ÎÔËÐгõʼ»¯³ÌÐòƬʱµ÷ÓÃ
start() ÿµ±³ÌÐòƬ½øÈëWebä¯ÀÀÆ÷ÖУ¬²¢ÇÒÔÊÐí³ÌÐòƬÆô¶¯ËüµÄ³£¹æ²Ù×÷ʱµ÷Óã¨ÌØÊâµÄ³ÌÐòƬ±»stop()¹Ø±Õ£©£»Í¬ÑùÔÚinit()ºóµ÷ÓÃ
paint() »ù´¡ÀàComponentµÄÒ»²¿·Ö£¨¼Ì³Ð½á¹¹ÖÐÉÏËÝÈý¼¶£©¡£×÷Ϊupdate()µÄÒ»²¿·Öµ÷Óã¬ÒÔ±ã¶Ô³ÌÐòƬµÄ»­²¼½øÐÐÌØÊâµÄÃè»æ
stop() ÿ´Î³ÌÐòƬ´ÓWebä¯ÀÀÆ÷µÄÊÓÏßÖÐÀ뿪ʱµ÷Óã¬Ê¹³ÌÐòƬÄܹرմú¼Û¸ß°ºµÄ²Ù×÷£»Í¬ÑùÔÚµ÷ÓÃdestroy()ǰµ÷ÓÃ
destroy() ³ÌÐòƬ²»ÔÙÐèÒª£¬½«Ëü´ÓÒ³ÃæÖÐÐ¶ÔØÊ±µ÷Óã¬ÒÔÖ´ÐÐ×ÊÔ´µÄ×îºóÇå³ý¹¤×÷

ÏÖÔÚÀ´¿´Ò»¿´paint()·½·¨¡£Ò»µ©Component£¨Ä¿Ç°ÊdzÌÐòƬ£©¾ö¶¨×Ô¼ºÐèÒª¸üУ¬¾Í»áµ÷ÓÃÕâ¸ö·½·¨¡ª¡ª¿ÉÄÜÊÇÓÉÓÚËüÔٴλØ×ªÆÁÄ»£¬Ê×´ÎÔÚÆÁÄ»ÉÏÏÔʾ£¬»òÕßÊÇÓÉÓÚÆäËû´°¿ÚÁÙʱ¸²¸ÇÁËÄãµÄWebä¯ÀÀÆ÷¡£´Ëʱ³ÌÐòƬ»áµ÷ÓÃËüµÄupdate()·½·¨£¨ÔÚ»ù´¡ÀàComponentÖж¨Ò壩£¬¸Ã·½·¨»á»Ö¸´Ò»Çиûָ´µÄ¶«Î÷£¬¶øµ÷ÓÃpaint()ÕýÊÇÕâ¸ö¹ý³ÌµÄÒ»²¿·Ö¡£Ã»±ØÒª¶Ôpaint()½øÐйýÔØ´¦Àí£¬µ«¹¹½¨Ò»¸ö¼òµ¥µÄ³ÌÐòƬÎÞÒÉÊÇ·½±ãµÄ·½·¨£¬ËùÒÔÎÒÃÇÊ×ÏÈ´Ópaint()·½·¨¿ªÊ¼¡£
update()µ÷ÓÃpaint()ʱ£¬»áÏòÆä´«µÝÖ¸ÏòGraphics¶ÔÏóµÄÒ»¸ö¾ä±ú£¬ÄǸö¶ÔÏó´ú±í×¼±¸ÔÚÉÏÃæÃè»æ£¨×÷ͼ£©µÄ±íÃæ¡£ÕâÊǷdz£ÖØÒªµÄ£¬ÒòΪÎÒÃÇÊܵ½ÏîÄ¿×é¼þµÄÍâ¹ÛµÄÏÞÖÆ£¬Òò´Ë²»ÄÜ»­µ½ÇøÓòÍ⣬Õâ¿ÉÊÇÒ»¼þºÃÊ£¬·ñÔòÎÒÃǾͻửµ½ÏßÍâÈ¥¡£ÔÚ³ÌÐòƬµÄÀý×ÓÖУ¬³ÌÐòƬµÄÍâ¹Û¾ÍÊÇÕâ½ç¶¨µÄÇøÓò¡£
ͼÐζÔÏóͬÑùÓÐһϵÁÐÎÒÃÇ¿É¶ÔÆä½øÐеIJÙ×÷¡£ÕâЩ²Ù×÷¶¼ÓëÔÚ»­²¼ÉÏ×÷ͼÓйء£ËùÒÔÆäÖеĴ󲿷ֶ¼ÒªÉ漰ͼÏñ¡¢¼¸ºÎ²Ë×´¡¢Ô²»¡µÈµÈµÄÃè»æ£¨×¢ÒâÈç¹ûÓÐÐËȤ£¬¿ÉÔÚJavaÎĵµÖÐÕÒµ½¸üÏêϸµÄ˵Ã÷£©¡£ÓÐЩ·½·¨ÔÊÐíÎÒÃÇ»­³ö×Ö·û£¬¶øÆäÖÐ×î³£ÓõľÍÊÇdrawString()¡£¶ÔÓÚËü£¬ÐèÖ¸³ö×Ô¼ºÏëÃè»æµÄString£¨×Ö´®£©£¬²¢Ö¸¶¨ËüÔÚ³ÌÐòƬ×÷Í¼ÇøÓòµÄÆðµã¡£Õâ¸öλÖÃÓÃÏñËØ±íʾ£¬ËùÒÔËüÔÚ²»Í¬µÄ»úÆ÷ÉÏ¿´ÆðÀ´ÊDz»Í¬µÄ£¬µ«ÖÁÉÙÊÇ¿ÉÒÔÒÆÖ²µÄ¡£
¸ù¾ÝÕâЩÐÅÏ¢¼´¿É´´½¨Ò»¸ö¼òµ¥µÄ³ÌÐòƬ£º

//: Applet1.java
// Very simple applet
package c13;
import java.awt.*;
import java.applet.*;

public class Applet1 extends Applet {
  public void paint(Graphics g) {
    g.drawString("First applet", 10, 10);
  }
} ///:~

×¢ÒâÕâ¸ö³ÌÐòƬ²»ÐèÒªÓÐÒ»¸ömain()¡£ËùÓÐÄÚÈݶ¼·â×°µ½Ó¦ÓóÌÐò¿ò¼ÜÖУ»ÎÒÃǽ«ËùÓÐÆô¶¯´úÂë¶¼·ÅÔÚinit()Àï¡£
±ØÐ뽫Õâ¸ö³ÌÐò·Åµ½Ò»¸öWebÒ³ÖвÅÄÜÔËÐУ¬¶øÖ»ÄÜÔÚÖ§³ÖJavaµÄWebä¯ÀÀÆ÷ÖвÅÄÜ¿´µ½´ËÒ³¡£ÎªÁ˽«Ò»¸ö³ÌÐòƬÖÃÈëWebÒ³£¬ÐèÒªÔÚÄǸöWebÒ³µÄ´úÂëÖÐÉèÖÃÒ»¸öÌØÊâµÄ±ê¼Ç£¨×¢ÊÍ¢Ù£©£¬ÒÔÖ¸Ê¾ÍøÒ³×°ÔØºÍÔËÐгÌÐòƬ¡£Õâ¾ÍÊÇapplet±ê¼Ç£¬ËüÔÚApplet1ÖеÄÑù×ÓÈçÏ£º
<applet
code=Applet1
width=200
height=200>
</applet>

¢Ù£º±¾Êé¼Ù¶¨¶ÁÕßÒÑÕÆÎÕÁËHTMLµÄ»ù±¾ÖªÊ¶¡£ÕâЩ֪ʶ²»ÄÑѧϰ£¬ÓÐÐí¶àÊé¼®ºÍÍøÉÏ×ÊÔ´¶¼¿ÉÒÔÌṩ°ïÖú¡£

ÆäÖУ¬codeÖµÖ¸¶¨ÁË.classÎļþµÄÃû×Ö£¬³ÌÐòƬ¾ÍפÁôÔÚÄǸöÎļþÖС£widthºÍheightÖ¸¶¨Õâ¸ö³ÌÐòƬµÄ³õʼ³ß´ç£¨ÈçǰËùÊö£¬ÒÔÏñËØÎªµ¥Î»£©¡£»¹¿É½«ÁíһЩ¶«Î÷·ÅÈëapplet±ê¼Ç£ºÓÃÓÚÔÚÒòÌØÍøÉÏѰÕÒÆäËû.classÎļþµÄλÖã¨codebase£©¡¢¶ÔÆëºÍÅÅÁÐÐÅÏ¢£¨align£©¡¢Ê¹³ÌÐòƬÏ໥¼äÄܹ»Í¨ÐŵÄÒ»¸öÌØÊâ±êʶ·û£¨name£©ÒÔ¼°ÓÃÓÚÌṩ³ÌÐòƬÄܽÓÊÕµÄÐÅÏ¢µÄ²ÎÊý¡£²ÎÊý²ÉÈ¡ÏÂÊöÐÎʽ£º
<Paramname=±êʶ·û value ="ÐÅÏ¢">
¿É¸ù¾ÝÐèÒªÉèÖÃÈÎÒâ¶à¸öÕâÑùµÄ²ÎÊý¡£
ÔÚ¼òµ¥µÄ³ÌÐòƬÖУ¬ÎÒÃÇÒª×öµÄΨһÊÂÇéÊǰ´ÉÏÊöÐÎʽÔÚWebÒ³ÖÐÉèÖÃÒ»¸ö³ÌÐòƬ±ê¼Ç£¨applet£©£¬ÁîÆä×°ÔØºÍÔËÐгÌÐòƬ¡£

13.2.1 ³ÌÐòƬµÄ²âÊÔ
ÎÒÃÇ¿ÉÔÚ²»±Ø½¨Á¢ÍøÂçÁ¬½ÓµÄǰÌáϽøÐÐÒ»´Î¼òµ¥µÄ²âÊÔ£¬·½·¨ÊÇÆô¶¯ÎÒÃǵÄWebä¯ÀÀÆ÷£¬È»ºó´ò¿ª°üº¬Á˳ÌÐòƬ±êÇ©µÄHTMLÎļþ£¨Sun¹«Ë¾µÄJDKͬÑù°üÀ¨Ò»¸ö³ÆÎª¡°³ÌÐòƬ¹Û²ìÆ÷¡±µÄ¹¤¾ß£¬ËüÄÜÌô³öhtmlÎļþµÄ<applet>±ê¼Ç£¬²¢ÔËÐÐÕâ¸ö³ÌÐòƬ£¬²»±ØÏÔʾÖÜΧµÄHTMLÎı¾¡ª¡ª×¢ÊÍ¢Ú£©¡£htmlÎļþÔØÈëºó£¬ä¯ÀÀÆ÷»á·¢ÏÖ³ÌÐòƬµÄ±êÇ©£¬²¢²éÕÒÓÉcodeÖµÖ¸¶¨µÄ.classÎļþ¡£µ±È»£¬Ëü»áÏÈÔÚCLASSPATH£¨Àà·¾¶£©ÖÐѰÕÒ£¬Èç¹ûÔÚCLASSPATHÏÂÕÒ²»µ½ÀàÎļþ£¬¾ÍÔÚWEBä¯ÀÀÆ÷״̬À¸¸ø³öÒ»¸ö´íÎóÐÅÏ¢£¬¸æÖª²»ÄÜÕÒµ½.classÎļþ¡£

¢Ú£»ÓÉÓÚ³ÌÐòƬ¹Û²ìÆ÷»áºöÂÔ³ýAPPLET±ê¼ÇÖ®ÍâµÄÈκζ«Î÷£¬ËùÒԿɽ«ÄÇЩ±ê¼Ç×÷ΪעÊÍÖÃÈëJavaÔ´Â룺
// <applet code=MyApplet.class width=200 height=100></applet>
ÕâÑù¾Í¿ÉÖ±½ÓÖ´ÐС°appletviewer MyApplet.java¡±£¬²»±ØÔÙ´´½¨Ð¡µÄHTMLÎļþÀ´Íê³É²âÊÔ¡£

ÈôÏëÔÚWebÕ¾µãÉÏÊÔÑ飬»¹»áÅöµ½ÁíһЩÂé·³¡£Ê×ÏÈ£¬ÎÒÃDZØÐëÓÐÒ»¸öWebÕ¾µã£¬Õâ¶Ô´ó¶àÊýÈËÀ´Ëµ¶¼Òâζ×ÅλÓÚÔ¶³ÌµØµãµÄÒ»¼Ò·þÎñÌṩÉÌ£¨ISP£©¡£È»ºó±ØÐëͨ¹ýijÖÖ;¾¶½«HTMLÎļþºÍ.classÎļþ´Ó×Ô¼ºµÄÕ¾µãÒÆÖÁISP»úÆ÷ÉÏÕýÈ·µÄĿ¼£¨WWWĿ¼£©¡£ÕâÒ»°ãÊÇͨ¹ý²ÉÓá°Îļþ´«ÊäЭÒ顱£¨FTP£©µÄ³ÌÐòÀ´×ö³ÉµÄ£¬ÍøÉÏ¿ÉÕÒµ½Ðí¶àÕâÑùµÄÃâ·Ñ³ÌÐò¡£ËùÒÔÎÒÃÇÒª×öµÄÈ«²¿ÊÂÇéËÆºõ¾ÍÊÇÓÃFTPЭÒ齫ÎļþÒÆÖÁISPµÄ»úÆ÷£¬È»ºóÓÃ×Ô¼ºµÄä¯ÀÀÆ÷Á¬½ÓÍøÕ¾ºÍHTMLÎļþ£»¼ÙÈç³ÌÐòƬÕýÈ·×°ÔØºÍÖ´ÐУ¬¾Í±íÃ÷´ó¹¦¸æ³É¡£µ«ÕæÊÇÕâÑùÂð£¿
µ«Õâ¶ùÎÒÃÇ¿ÉÄÜ»áÊܵ½ÓÞŪ¡£¼ÙÈçWebä¯ÀÀÆ÷ÔÚ·þÎñÆ÷ÉÏÕÒ²»µ½.classÎļþ£¬¾Í»áÔÚÄãµÄ±¾µØ»úÆ÷ÉÏËÑѰCLASSPATH¡£ËùÒÔ³ÌÐòƬ»òÐí¸ù±¾²»ÄÜ´Ó·þÎñÆ÷ÉÏÕýÈ·µØ×°ÔØ£¬µ«ÔÚÄã¿´À´È´ÊÇÒ»ÇÐÕý³£µÄ£¬ÒòΪä¯ÀÀÆ÷ÔÚÄãµÄ»úÆ÷ÉÏÕÒµ½ÁËËüÐèÒªµÄ¶«Î÷¡£µ«ÔÚÆäËûÈË·ÃÎÊʱ£¬ËûÃǵÄä¯ÀÀÆ÷¾ÍÎÞ·¨ÕÒµ½ÄÇЩÀàÎļþ¡£ËùÒÔÔÚ²âÊÔʱ£¬±ØÐëÈ·¶¨ÒÑ´Ó×Ô¼ºµÄ»úÆ÷ɾ³ýÁËÏà¹ØµÄ.classÎļþ£¬ÒÔÈ·±£²âÊÔ½á¹ûµÄÕæÊµ¡£
ÎÒ×Ô¼º¾ÍÓöµ½¹ýÕâÑùµÄÒ»¸öÎÊÌâ¡£µ±Ê±Êǽ«³ÌÐòƬÖÃÈëÒ»¸öpackage£¨°ü£©ÖС£ÉÏÔØÁËHTMLÎļþºÍ³ÌÐòƬºó£¬ÓÉÓÚ°üÃûµÄÎÊÌ⣬³ÌÐòƬµÄ·þÎñÆ÷·¾¶ËƺõÏÝÈëÁË»ìÂÒ¡£µ«ÊÇ£¬ÎÒµÄä¯ÀÀÆ÷ÔÚ±¾µØÀà·¾¶£¨CLASSPATH£©ÖÐÕÒµ½ÁËËü¡£ÕâÑùÒ»À´£¬ÎҾͳÉÁËÄܹ»³É¹¦×°ÔسÌÐòƬµÄΨһһ¸öÈË¡£ºóÀ´ÎÒ»¨ÁËһЩʱ¼ä²Å·¢ÏÖÔ­À´ÊÇpackageÓï¾äÓÐÎó¡£Ò»°ãµØ£¬Ó¦¸Ã½«packageÓï¾äÖÃÓÚ³ÌÐòƬµÄÍⲿ¡£

13.2.2 Ò»¸ö¸üͼÐλ¯µÄÀý×Ó
Õâ¸ö³ÌÐò²»»áÌ«ÁîÈ˽ôÕÅ£¬ËùÒÔÈÃÎÒÃÇÊÔ×ÅÔö¼ÓһЩÓÐȤµÄͼÐÎ×é¼þ¡£
//: Applet2.java
// Easy graphics
import java.awt.*;
import java.applet.*;

public class Applet2 extends Applet {
  public void paint(Graphics g) {
    g.drawString("Second applet", 10, 15);
    g.draw3DRect(0, 0, 100, 20, true);
  }
} ///:~

Õâ¸ö³ÌÐòÓÃÒ»¸ö·½¿ò½«×Ö·û´®°üΧÆðÀ´¡£µ±È»£¬ËùÓÐÊý×Ö¶¼ÊÇ¡°Ó²±àÂ롱µÄ£¨Ö¸Êý×̶ֹ¨ÓÚ³ÌÐòÄÚ²¿£©£¬²¢ÒÔÏñËØÎª»ù´¡¡£ËùÒÔÔÚһЩ»úÆ÷ÉÏ£¬¿ò»áÕýºÃ½«×Ö´®Î§×¡£»¶øÔÚÁíһЩ»úÆ÷ÉÏ£¬Ò²Ðí¸ù±¾¿´²»¼ûÕâ¸ö¿ò£¬ÒòΪ²»Í¬»úÆ÷°²×°µÄ×ÖÌåÒ²»áÓÐËùÇø±ð¡£
¶ÔGraphicÀà¶øÑÔ£¬¿ÉÔÚ°ïÖúÎĵµÖÐÕÒµ½ÁíһЩÓÐȤµÄÄÚÈÝ¡£´ó¶àÊýÉæ¼°Í¼ÐεĻ¶¼ÊǺÜÓÐȤµÄ£¬ËùÓÐÎÒ½«¸ü¶àµÄÊÔÑéÁô¸ø¶ÁÕß×Ô¼ºÈ¥½øÐС£

13.2.3 ¿ò¼Ü·½·¨µÄÑÝʾ
¹Û¿´¿ò¼Ü·½·¨µÄʵ¼ÊÔË×÷ÊÇÏ൱ÓÐȤµÄ£¨Õâ¸öÀý×ÓֻʹÓÃinit()£¬start()ºÍstop()£¬ÒòΪpaint()ºÍdestroy()·Ç³£¼òµ¥£¬ºÜÈÝÒ×¾ÍÄÜÕÆÎÕ£©¡£ÏÂÃæµÄ³ÌÐòƬ½«¸ú×ÙÕâЩ·½·¨µ÷ÓõĴÎÊý£¬²¢ÓÃpaint()½«ÆäÏÔʾ³öÀ´£º
//: Applet3.java
// Shows init(), start() and stop() activities
import java.awt.*;
import java.applet.*;

public class Applet3 extends Applet {
  String s;
  int inits = 0;
  int starts = 0;
  int stops = 0;
  public void init() { inits++; }
  public void start() { starts++; }
  public void stop() { stops++; }
  public void paint(Graphics g) {
    s = "inits: " + inits + 
      ", starts: " + starts +
      ", stops: " + stops;
    g.drawString(s, 10, 10);
  }
} ///:~

Õý³£Çé¿öÏ£¬µ±ÎÒÃǹýÔØÒ»¸ö·½·¨Ê±£¬Ðè¼ì²é×Ô¼ºÊÇ·ñÐèÒªµ÷Ó÷½·¨µÄ»ù´¡Àà°æ±¾£¬ÕâÊÇÊ®·ÖÖØÒªµÄ¡£ÀýÈ磬ʹÓÃinit()ʱ¿ÉÄÜÐèÒªµ÷ÓÃsuper.init()¡£È»¶ø£¬AppletÎĵµÌرðÖ¸³öinit()¡¢start()ºÍstop()ÔÚAppletÖÐûÓÐÓô¦£¬ËùÒÔÕâÀï²»ÐèÒªµ÷ÓÃËüÃÇ¡£
ÊÔÑéÕâ¸ö³ÌÐòƬʱ£¬»á·¢ÏÖ¼ÙÈç×îС»¯WEBä¯ÀÀÆ÷£¬»òÕßÓÃÁíÒ»¸ö´°¿Ú½«Æä¸²¸Ç£¬ÄÇô¾Í²»ÄÜÔÙµ÷ÓÃstop()ºÍstart()£¨ÕâÒ»ÐÐΪ»áËæ×Ų»Í¬µÄʵÏÖ·½°¸±ä»¯£»¿É¿¼Âǽ«Webä¯ÀÀÆ÷µÄÐÐΪͬ³ÌÐòƬ¹Û²ìÆ÷µÄÐÐΪ¶ÔÕÕһϣ©¡£µ÷ÓÃΨһ·¢ÉúµÄ³¡ºÏÊÇÔÚÎÒÃÇ×ªÒÆµ½Ò»¸ö²»Í¬µÄWebÒ³£¬È»ºó·µ»Ø°üº¬Á˳ÌÐòƬµÄÄǸöҳʱ¡£

13.3 ÖÆ×÷°´Å¥
ÖÆ×÷Ò»¸ö°´Å¥·Ç³£¼òµ¥£ºÖ»ÐèÒªµ÷ÓÃButton¹¹½¨Æ÷£¬²¢Ö¸¶¨ÏëÔÚ°´Å¥ÉϳöÏֵıêÇ©¾ÍÐÐÁË£¨Èç¹û²»ÏëÒª±êÇ©£¬Òà¿ÉʹÓÃĬÈϹ¹½¨Æ÷£¬µ«ÄÇÖÖÇé¿ö¼«ÉÙ³öÏÖ£©¡£¿É²ÎÕÕºóÃæµÄ³ÌÐòΪ°´Å¥´´½¨Ò»¸ö¾ä±ú£¬ÒÔ±ãÒÔºóÄܹ»ÒýÓÃËü¡£
ButtonÊÇÒ»¸ö×é¼þ£¬ÏóËü×Ô¼ºµÄС´°¿ÚÒ»Ñù£¬»áÔÚ¸üÐÂʱµÃÒÔÖØ»æ¡£ÕâÒâζ×ÅÎÒÃDz»±ØÃ÷È·Ãè»æÒ»¸ö°´Å¥»òÕ߯äËûÈÎÒâÖÖÀàµÄ¿Ø¼þ£»Ö»Ð轫ËüÃÇÄÉÈë´°Ì壬ÒÔºóµÄÃè»æ¹¤×÷»áÓÉËüÃÇ×ÔÐиºÔð¡£ËùÒÔΪÁ˽«Ò»¸ö°´Å¥ÖÃÈë´°Ì壬ÐèÒª¹ýÔØinit()·½·¨£¬¶ø²»ÊǹýÔØpaint()£º
//: Button1.java
// Putting buttons on an applet
import java.awt.*;
import java.applet.*;

public class Button1 extends Applet {
  Button 
    b1 = new Button("Button 1"), 
    b2 = new Button("Button 2");
  public void init() {
    add(b1);
    add(b2);
  }
} ///:~

µ«Õ⻹²»×ãÒÔ´´½¨Button£¨»òÆäËûÈκοؼþ£©¡£±ØÐëͬʱµ÷ÓÃApplet add()·½·¨£¬Áî°´Å¥·ÅÖÃÔÚ³ÌÐòƬµÄ´°ÌåÖС£Õâ¿´ÆðÀ´Ëƺõ±Èʵ¼Ê¼òµ¥µÃ¶à£¬ÒòΪ¶Ôadd()µÄµ÷ÓÃʵ¼Ê»á£¨¼ä½ÓµØ£©¾ö¶¨½«¿Ø¼þ·ÅÔÚ´°ÌåµÄʲôµØ·½¡£¶Ô´°Ìå²¼¾ÖµÄ¿Ø¼þÂíÉϾÍÒª½²µ½¡£

13.4 ²¶»ñʼþ
´ó¼Ò¿É×¢Òâµ½¼ÙÈç±àÒëºÍÔËÐÐÉÏÃæµÄ³ÌÐòƬ£¬°´Ï°´Å¥ºó²»»á·¢ÉúÈκÎÊÂÇé¡£±ØÐë½øÈë³ÌÐòƬÄÚ²¿£¬±àдÓÃÓÚ¾ö¶¨Òª·¢ÉúʲôÊÂÇéµÄ´úÂë¡£¶ÔÓÚÓÉʼþÇý¶¯µÄ³ÌÐòÉè¼Æ£¬ËüµÄ»ù±¾Ä¿±ê¾ÍÊÇÓôúÂë²¶»ñ·¢ÉúµÄʼþ£¬²¢ÓÉ´úÂë¶ÔÄÇЩʼþ×÷³öÏìÓ¦¡£ÊÂʵÉÏ£¬GUIµÄ´ó²¿·ÖÄÚÈݶ¼ÊÇÎ§ÈÆÕâÖÖʼþÇý¶¯µÄ³ÌÐòÉè¼ÆÕ¹¿ªµÄ¡£
¾­¹ý±¾ÊéÇ°ÃæµÄѧϰ£¬´ó¼ÒÓ¦¸ÃÓÐÁËÃæÏò¶ÔÏó³ÌÐòÉè¼ÆµÄһЩ»ù´¡£¬´Ëʱ¿ÉÄÜ»áÏëµ½Ó¦µ±ÓÐÒ»Ð©ÃæÏò¶ÔÏóµÄ·½·¨À´×¨ÃÅ¿ØÖÆÊ¼þ¡£ÀýÈ磬ҲÐí²»µÃ²»¼Ì³Ðÿ¸ö°´Å¥£¬²¢¹ýÔØÒ»Ð©¡°°´Å¥°´Ï¡±·½·¨£¨¾¡¹ÜÕâÏԵ÷dz£Âé·³ÓÐÓÐÏÞ£©¡£´ó¼ÒÒ²¿ÉÄÜÈÏΪ´æÔÚһЩÖ÷¿Ø¡°Ê¼þ¡±À࣬ÆäÖÐΪϣÍûÏìÓ¦µÄÿ¸öʼþ¶¼°üº¬ÁËÒ»¸ö·½·¨¡£
ÔÚ¶ÔÏóÒÔǰ£¬Ê¼þ¿ØÖƵĵäÐÍ·½Ê½ÊÇswitchÓï¾ä¡£Ã¿¸öʼþ¶¼¶ÔÓ¦Ò»¸ö¶ÀÒ»ÎÞ¶þµÄÕûÊý±àºÅ£»¶øÇÒÔÚÖ÷ʼþ¿ØÖÆ·½·¨ÖУ¬ÐèҪרÃÅΪÄǸöֵдһ¸öswitch¡£
Java 1.0µÄAWTûÓвÉÓÃÈκÎÃæÏò¶ÔÏóµÄÊֶΡ£´ËÍ⣬ËüҲûÓÐʹÓÃswitchÓï¾ä£¬Ã»ÓдòËãÒÀ¿¿ÄÇЩ·ÖÅ䏸ʼþµÄÊý×Ö¡£Ïà·´£¬ÎÒÃDZØÐë´´½¨ifÓï¾äµÄÒ»¸öǶÌ×ϵÁС£Í¨¹ýifÓï¾ä£¬ÎÒÃÇÐèÒª³¢ÊÔ×öµÄÊÂÇéÊÇÕì²âµ½×÷Ϊʼþ¡°Ä¿±ê¡±µÄ¶ÔÏó¡£»»ÑÔÖ®£¬ÄÇÊÇÎÒÃǹØÐĵÄÈ«²¿ÄÚÈÝ¡ª¡ª¼ÙÈçij¸ö°´Å¥ÊÇÒ»¸öʼþµÄÄ¿±ê£¬ÄÇôËü¿Ï¶¨ÊÇÒ»´ÎÊó±êµã»÷£¬²¢Òª»ùÓÚÄǸö¼ÙÉè¼ÌÐøÏÂÈ¥¡£µ«ÊÇ£¬Ê¼þÀïÒ²¿ÉÄܰüº¬ÁËÆäËûÐÅÏ¢¡£ÀýÈ磬¼ÙÈçÏëµ÷²éÒ»´ÎÊó±êµã»÷µÄÏñËØÎ»Öã¬ÒԱ㻭һÌõÒýÏòÄǸöλÖõÄÏߣ¬ÄÇôEvent¶ÔÏóÀï¾Í»á°üº¬ÄǸöλÖõÄÐÅÏ¢£¨Ò²Òª×¢ÒâJava 1.0µÄ×é¼þÖ»ÄܲúÉúÓÐÏÞÖÖÀàµÄʼþ£¬¶øJava 1.1ºÍSwing/JFC×é¼þÔò¿É²úÉúÍêÕûµÄһϵÁÐʼþ£©¡£
Java 1.0°æµÄAWT·½·¨´®ÁªµÄÌõ¼þÓï¾äÖдæÔÚaction()·½·¨µÄµ÷Óá£ËäÈ»Õû¸öJava 1.0°æµÄʼþÄ£ÐͲ»¼æÈÝJava 1.1°æ£¬µ«ËüÔÚ»¹²»Ö§³ÖJava1.1°æµÄ»úÆ÷ºÍÔËÐмòµ¥µÄ³ÌÐòƬµÄϵͳÖиü¹ã·ºµØÊ¹Óã¬ÖÒ¸æÄúʹÓÃËü»á±äµÃ·Ç³£µÄÊæÊÊ£¬°üÀ¨¶ÔÏÂÃæÊ¹ÓõÄaction()³ÌÐò·½·¨¶øÑÔ¡£
action()ÓµÓÐÁ½¸ö×Ô±äÁ¿£ºµÚÒ»¸öÊÇʼþµÄÀàÐÍ£¬°üÀ¨ËùÓеĴ¥·¢µ÷ÓÃaction()µÄʼþµÄÓйØÐÅÏ¢¡£ÀýÈçÊó±êµ¥»÷¡¢ÆÕͨ°´¼ü°´Ï»òÊÍ·Å¡¢ÌØÊâ°´¼ü°´Ï»òÊÍ·Å¡¢Êó±êÒÆ¶¯»òÕßÍ϶¯¡¢Ê¼þ×é¼þµÃµ½»ò¶ªÊ§½¹µã£¬µÈµÈ¡£µÚ¶þ¸ö×Ô±äÁ¿Í¨³£ÊÇÎÒÃǺöÂÔµÄʼþÄ¿±ê¡£µÚ¶þ¸ö×Ô±äÁ¿·â×°ÔÚʼþÄ¿±êÖУ¬ËùÒÔËüÏñÒ»¸ö×Ô±äÁ¿Ò»ÑùµÄÈß³¤¡£
Ðèµ÷ÓÃaction()ʱÇé¿ö·Ç³£ÓÐÏÞ£º½«¿Ø¼þÖÃÈë´°Ìåʱ£¬Ò»Ð©ÀàÐ͵Ŀؼþ£¨°´Å¥¡¢¸´Ñ¡¿ò¡¢ÏÂÀ­ÁÐ±íµ¥¡¢²Ëµ¥£©»á·¢ÉúÒ»ÖÖ¡°±ê×¼Ðж¯¡±£¬´Ó¶øËæÏàÓ¦µÄEvent¶ÔÏ󷢯ð¶Ôaction()µÄµ÷ÓᣱÈÈç¶Ô°´Å¥À´Ëµ£¬Ò»µ©°´Å¥±»°´Ï£¬¶øÇÒûÓÐÔÙ¶à°´Ò»´Î£¬¾Í»áµ÷ÓÃËüµÄaction()·½·¨¡£ÕâÖÖÐÐΪͨ³£ÕýÊÇÎÒÃÇËùÏ£ÍûµÄ£¬ÒòΪÕâÕýÊÇÎÒÃǶÔÒ»¸ö°´Å¥Õý³£¹Û¸Ð¡£µ«ÕýÈç±¾ÕºóÃæÒª½²µ½µÄÄÇÑù£¬»¹¿Éͨ¹ýhandleEvent()·½·¨À´´¦ÀíÆäËûÐí¶àÀàÐ͵Äʼþ¡£
Ç°ÃæµÄÀý³Ì¿É½øÐÐһЩÀ©Õ¹£¬ÒÔ±ãÏóÏÂÃæÕâÑù¿ØÖư´Å¥µÄµã»÷£º
//: Button2.java
// Capturing button presses
import java.awt.*;
import java.applet.*;

public class Button2 extends Applet {
  Button 
    b1 = new Button("Button 1"), 
    b2 = new Button("Button 2");
  public void init() {
    add(b1);
    add(b2);
  }
  public boolean action(Event evt, Object arg) {
    if(evt.target.equals(b1))
      getAppletContext().showStatus("Button 1");
    else if(evt.target.equals(b2))
      getAppletContext().showStatus("Button 2");
    // Let the base class handle it:
    else 
      return super.action(evt, arg);
    return true; // We've handled it here
  }
} ///:~

ΪÁ˽âÄ¿±êÊÇʲô£¬ÐèÒªÏòEvent¶ÔÏóѯÎÊËüµÄtarget£¨Ä¿±ê£©³ÉÔ±ÊÇʲô£¬È»ºóÓÃequals()·½·¨¼ì²éËüÊÇ·ñÓë×Ô¼º¸ÐÐËȤµÄÄ¿±ê¶ÔÏó¾ä±úÏà·û¡£ÎªËùÓиÐÐËȤµÄ¶ÔÏóдºÃ¾ä±úºó£¬±ØÐëÔÚĩβµÄelseÓï¾äÖе÷ÓÃsuper.action(evt, arg)·½·¨¡£ÎÒÃÇÔÚµÚ7ÕÂÒѾ­Ëµ¹ý£¨ÓйضàÐÎÐÔµÄÄÇÒ»Õ£©£¬´Ëʱµ÷ÓõÄÊÇÎÒÃǹýÔØ¹ýµÄ·½·¨£¬¶ø·ÇËüµÄ»ù´¡Àà°æ±¾¡£È»¶ø£¬»ù´¡Àà°æ±¾Ò²Õë¶ÔÎÒÃDz»¸ÐÐËȤµÄËùÓÐÇé¿öÌṩÁËÏàÓ¦µÄ¿ØÖÆ´úÂë¡£³ý·ÇÃ÷È·½øÐУ¬·ñÔòËüÃÇÊDz»»áµÃµ½µ÷Óõġ£·µ»ØÖµÖ¸³öÎÒÃÇÊÇ·ñÒѾ­´¦ÀíÁËËü£¬ËùÒÔ¼ÙÈçȷʵÓëÒ»¸öʼþÏà·û£¬¾ÍÓ¦·µ»Øtrue£»·ñÔò¾Í·µ»ØÓÉ»ù´¡Ààevent()·µ»ØµÄ¶«Î÷¡£
¶ÔÕâ¸öÀý×ÓÀ´Ëµ£¬×î¼òµ¥µÄÐж¯¾ÍÊÇ´òÓ¡³öµ½µ×ÊÇʲô°´Å¥±»°´Ï¡£Ò»Ð©ÏµÍ³ÔÊÐíÄ㵯³öÒ»¸öСÏûÏ¢´°¿Ú£¬µ«Java³ÌÐòƬȴ·À°­´°¿ÚµÄµ¯³ö¡£²»¹ýÎÒÃÇ¿ÉÒÔÓõ÷ÓÃApplet·½·¨µÄgetAppletContext()À´·ÃÎÊä¯ÀÀÆ÷£¬È»ºóÓÃshowStatus()ÔÚä¯ÀÀÆ÷´°¿Úµ×²¿µÄ״̬À¸ÉÏÏÔʾһÌõÐÅÏ¢£¨×¢ÊÍ¢Û£©¡£»¹¿ÉÓÃͬÑùµÄ·½·¨´òÓ¡³ö¶ÔʼþµÄÒ»¶ÎÍêÕû˵Ã÷ÎÄ×Ö£¬·½·¨Êǵ÷ÓÃgetAppletConext().showStatus(evt + "")¡£¿Õ×Ö´®»áÇ¿ÖÆ±àÒëÆ÷½«evtת»»³ÉÒ»¸ö×Ö·û´®¡£ÕâЩ±¨¸æ¶ÔÓÚ²âÊԺ͵÷ÊÔÌØ±ðÓÐÓã¬ÒòΪä¯ÀÀÆ÷¿ÉÄܻḲ¸ÇÎÒÃǵÄÏûÏ¢¡£

¢Û£ºShowStatus()Ò²ÊôÓÚAppletµÄÒ»¸ö·½·¨£¬ËùÒÔ¿ÉÖ±½Óµ÷ÓÃËü£¬²»±Øµ÷ÓÃgetAppletContext()¡£

¾¡¹Ü¿´ÆðÀ´ËƺõºÜÆæ¹Ö£¬µ«ÎÒÃÇȷʵҲÄÜͨ¹ýevent()Öеĵڶþ¸ö²ÎÊý½«Ò»¸öʼþÓë°´Å¥ÉϵÄÎÄ×ÖÏàÅä¡£²ÉÓÃÕâÖÖ·½·¨£¬ÉÏÃæµÄÀý×Ӿͱä³ÉÁË£º
//: Button3.java
// Matching events on button text
import java.awt.*;
import java.applet.*;

public class Button3 extends Applet {
  Button 
    b1 = new Button("Button 1"), 
    b2 = new Button("Button 2");
  public void init() {
    add(b1);
    add(b2);
  }
  public boolean action (Event evt, Object arg) {
    if(arg.equals("Button 1"))
      getAppletContext().showStatus("Button 1");
    else if(arg.equals("Button 2"))
      getAppletContext().showStatus("Button 2");
    // Let the base class handle it:
    else 
      return super.action(evt, arg);
    return true; // We've handled it here
  }
} ///:~

ºÜÄÑÈ·ÇÐÖªµÀequals()·½·¨ÔÚÕâ¶ùÒª×öʲô¡£ÕâÖÖ·½·¨ÓÐÒ»¸öºÜ´óµÄÎÊÌ⣬¾ÍÊÇ¿ªÊ¼Ê¹ÓÃÕâ¸öм¼ÊõµÄJava³ÌÐòÔ±ÖÁÉÙÐèÒª»¨·ÑÒ»¸öÊÜ´ìÕÛµÄʱÆÚÀ´ÔڱȽϰ´Å¥ÉϵÄÎÄ×Öʱ·¢ÏÖËûÃÇҪô´óдÁËҪôд´íÁË£¨ÎÒ¾ÍÓÐÕâÖÖ¾­Ñ飩¡£Í¬Ñù£¬Èç¹ûÎÒÃǸıäÁ˰´Å¥ÉϵÄÎÄ×Ö£¬³ÌÐò´úÂ뽫²»ÔÙ¹¤×÷£¨µ«ÎÒÃDz»»áµÃµ½ÈκαàÒëʱºÍÔËÐÐʱµÄÐÅÏ¢£©¡£ËùÒÔÈç¹û¿ÉÄÜ£¬ÎÒÃǾ͵ñÜÃâʹÓÃÕâÖÖ·½·¨¡£

13.5 Îı¾×Ö¶Î
¡°Îı¾×ֶΡ±ÊÇÔÊÐíÓû§ÊäÈëºÍ±à¼­ÎÄ×ÖµÄÒ»ÖÖÏßÐÔÇøÓò¡£Îı¾×ֶδÓÎı¾×é¼þÄÇÀï¼Ì³ÐÁËÈÃÎÒÃÇÑ¡ÔñÎÄ×Ö¡¢ÈÃÎÒÃÇÏñµÃµ½×Ö·û´®Ò»ÑùµÃµ½Ñ¡ÔñµÄÎÄ×Ö£¬µÃµ½»òÉèÖÃÎÄ×Ö£¬ÉèÖÃÎı¾×Ö¶ÎÊÇ·ñ¿É±à¼­ÒÔ¼°Á¬Í¬ÎÒÃÇ´ÓÔÚÏ߲ο¼ÊéÖÐÕÒµ½µÄÏà¹Ø·½·¨¡£ÏÂÃæµÄÀý×Ó½«Ö¤Ã÷Îı¾×Ö¶ÎµÄÆäËü¹¦ÄÜ£»ÎÒÃÇÄÜ×¢Òâµ½·½·¨ÃûÊÇÏÔ¶øÒ×¼ûµÄ£º
//: TextField1.java
// Using the text field control
import java.awt.*;
import java.applet.*;

public class TextField1 extends Applet {
  Button
    b1 = new Button("Get Text"),
    b2 = new Button("Set Text");
  TextField 
    t = new TextField("Starting text", 30);
  String s = new String();
  public void init() {
    add(b1);
    add(b2);
    add(t);
  }
  public boolean action (Event evt, Object arg) {
    if(evt.target.equals(b1)) {
      getAppletContext().showStatus(t.getText());
      s = t.getSelectedText();
      if(s.length() == 0) s = t.getText();
      t.setEditable(true);
    }
    else if(evt.target.equals(b2)) {
      t.setText("Inserted by Button 2: " + s);
      t.setEditable(false);
    }
    // Let the base class handle it:
    else 
      return super.action(evt, arg);
    return true; // We've handled it here
  }
} ///:~

Óм¸ÖÖ·½·¨¾ù¿É¹¹½¨Ò»¸öÎı¾×ֶΣ»ÆäÖÐÖ®Ò»ÊÇÌṩһ¸ö³õʼ×Ö·û´®£¬²¢ÉèÖÃ×Ö·ûÓòµÄ´óС¡£
°´Ï°´Å¥1 Êǵõ½ÎÒÃÇÓÃÊó±êÑ¡ÔñµÄÎÄ×Ö¾ÍÊǵõ½×Ö¶ÎÄÚËùÓеÄÎÄ×Ö²¢×ª»»³É×Ö·û´®S¡£ËüÒ²ÔÊÐí×ֶα»±à¼­¡£°´Ï°´Å¥2 ·ÅÒ»ÌõÐÅÏ¢ºÍ×Ö·û´®sµ½Text fields£¬²¢ÇÒ×èÖ¹×ֶα»±à¼­£¨¾¡¹ÜÎÒÃÇÄܹ»Ò»Ö±Ñ¡ÔñÎÄ×Ö£©¡£ÎÄ×ֵĿɱ༭ÐÔÊÇͨ¹ýsetEditable()µÄÕæ¼ÙÖµÀ´¿ØÖƵġ£

13.6 Îı¾ÇøÓò
¡°Îı¾ÇøÓò¡±ºÜÏñÎÄ×Ö×ֶΣ¬Ö»ÊÇËüÓµÓиü¶àµÄÐÐÒÔ¼°Ò»Ð©ÒýÈËעĿµÄ¸ü¶àµÄ¹¦ÄÜ¡£ÁíÍâÄãÄÜÔÚ¸ø¶¨Î»ÖöÔÒ»¸öÎı¾×Ö¶Î×·¼Ó¡¢²åÈë»òÕßÐÞ¸ÄÎÄ×Ö¡£Õâ¿´ÆðÀ´¶ÔÎı¾×Ö¶ÎÓÐÓõŦÄÜÏ൱²»´í£¬ËùÒÔÉè·¨·¢ÏÖËüÉè¼ÆµÄÌØÐÔ»á²úÉúһЩÀ§»ó¡£ÎÒÃÇ¿ÉÒÔÈÏΪÈç¹ûÎÒÃÇ´¦´¦ÐèÒª¡°Îı¾ÇøÓò¡±µÄ¹¦ÄÜ£¬ÄÇô¿ÉÒÔ¼òµ¥µØÊ¹ÓÃÒ»¸öÏßÐÍÎÄ×ÖÇøÓòÔÚÎÒÃǽ«ÁíÍâʹÓÃÎı¾×ֶεĵط½¡£ÔÚJava 1.0°æÖУ¬µ±ËüÃDz»Êǹ̶¨µÄʱºòÎÒÃÇÒ²µÃµ½ÁËÒ»¸öÎı¾ÇøÓòµÄ´¹Ö±ºÍˮƽ·½ÏòµÄ¹ö¶¯Ìõ¡£ÔÚJava 1.1°æÖУ¬¶Ô¸ß¼¶¹¹½¨Æ÷µÄÐÞ¸ÄÔÊÐíÎÒÃÇÑ¡ÔñÄĸö¹ö¶¯ÌõÊǵ±Ç°µÄ¡£ÏÂÃæµÄÀý×ÓÑÝʾµÄ½ö½öÊÇÔÚJava1.0°æµÄ×´¿öϹö¶¯ÌõÒ»Ö±´ò¿ª¡£ÔÚÏÂÒ»ÕÂÀïÎÒÃǽ«¿´µ½Ò»¸öÖ¤Ã÷Java 1.1°æÖеÄÎÄ×ÖÇøÓòµÄÀý³Ì¡£
//: TextArea1.java
// Using the text area control
import java.awt.*;
import java.applet.*;

public class TextArea1 extends Applet {
  Button b1 = new Button("Text Area 1");
  Button b2 = new Button("Text Area 2");
  Button b3 = new Button("Replace Text");
  Button b4 = new Button("Insert Text");
  TextArea t1 = new TextArea("t1", 1, 30);
  TextArea t2 = new TextArea("t2", 4, 30);
  public void init() {
    add(b1);
    add(t1);
    add(b2);
    add(t2);
    add(b3);
    add(b4);
  }
  public boolean action (Event evt, Object arg) {
    if(evt.target.equals(b1))
      getAppletContext().showStatus(t1.getText());
    else if(evt.target.equals(b2)) {
      t2.setText("Inserted by Button 2");
      t2.appendText(": " + t1.getText());
      getAppletContext().showStatus(t2.getText());
    }
    else if(evt.target.equals(b3)) {
      String s = " Replacement ";
      t2.replaceText(s, 3, 3 + s.length());
    }
    else if(evt.target.equals(b4))
      t2.insertText(" Inserted ", 10);
    // Let the base class handle it:
    else 
      return super.action(evt, arg);
    return true; // We've handled it here
  }
} ///:~

³ÌÐòÖÐÓм¸¸ö²»Í¬µÄ¡°Îı¾ÇøÓò¡±¹¹½¨Æ÷£¬ÕâÆäÖеÄÒ»¸öÔÚ´Ë´¦ÏÔʾÁËÒ»¸ö³õʼ×Ö·û´®ºÍÐкźÍÁкš£²»Í¬µÄ°´Å¥ÏÔʾµÃµ½¡¢×·¼Ó¡¢Ð޸ĺͲåÈëÎÄ×Ö¡£

13.7 ±êÇ©
±êǩ׼ȷµØÔË×÷£º°²·ÅÒ»¸ö±êÇ©µ½´°ÌåÉÏ¡£Õâ¶ÔûÓбêÇ©µÄTextFieldsºÍText areas À´Ëµ·Ç³£µÄÖØÒª£¬Èç¹ûÎÒÃǼòµ¥µØÏë°²·ÅÎÄ×ÖµÄÐÅÏ¢ÔÚ´°ÌåÉÏÒ²ÄÜͬÑùµÄʹÓá£ÎÒÃÇÄÜÏñ±¾ÕÂÖеÚÒ»¸öÀý³ÌÖÐÑÝʾµÄÄÇÑù£¬Ê¹ÓÃdrawString()Àï±ßµÄpaint()ÔÚÈ·¶¨µÄλÖÃÈ¥°²ÖÃÒ»¸öÎÄ×Ö¡£µ±ÎÒÃÇʹÓõıêÇ©ÔÊÐíÎÒÃÇͨ¹ý²¼¾Ö¹ÜÀí¼ÓÈëÆäËüµÄÎÄ×Ö×é¼þ¡££¨ÔÚÕâÕµĺóÃæÎÒÃǽ«½øÈëÌÖÂÛ¡££©
ʹÓù¹½¨Æ÷ÎÒÃÇÄÜ´´½¨Ò»Ìõ°üÀ¨³õʼ»¯ÎÄ×ֵıêÇ©£¨ÕâÊÇÎÒÃǵäÐ͵Ä×÷·¨£©£¬Ò»¸ö±êÇ©°üÀ¨Ò»ÐÐCENTER£¨Öм䣩¡¢LEFT£¨×󣩺ÍRIGHT(ÓÒ£©£¨¾²Ì¬µÄ½á¹ûÈ¡Õû¶¨ÒåÔÚÀà±êÇ©À¡£Èç¹ûÎÒÃÇÍü¼ÇÁË¿ÉÒÔÓÃgetText()ºÍgetalignment()¶Áȡֵ£¬ÎÒÃÇͬÑù¿ÉÒÔÓÃsetText()ºÍsetAlignment()À´¸Ä±äºÍµ÷Õû¡£ÏÂÃæµÄÀý×Ó½«ÑÝʾ±êÇ©µÄÌØµã£º
//: Label1.java
// Using labels
import java.awt.*;
import java.applet.*;

public class Label1 extends Applet {
  TextField t1 = new TextField("t1", 10);
  Label labl1 = new Label("TextField t1");
  Label labl2 = new Label("                   ");
  Label labl3 = new Label("                    ",
    Label.RIGHT);
  Button b1 = new Button("Test 1");
  Button b2 = new Button("Test 2");
  public void init() {
    add(labl1); add(t1);
    add(b1); add(labl2);
    add(b2); add(labl3);
  }
  public boolean action (Event evt, Object arg) {
    if(evt.target.equals(b1))
      labl2.setText("Text set into Label");
    else if(evt.target.equals(b2)) {
      if(labl3.getText().trim().length() == 0)
        labl3.setText("labl3");
      if(labl3.getAlignment() == Label.LEFT)
        labl3.setAlignment(Label.CENTER);
      else if(labl3.getAlignment()==Label.CENTER)
        labl3.setAlignment(Label.RIGHT);
      else if(labl3.getAlignment() == Label.RIGHT)
        labl3.setAlignment(Label.LEFT);
    }
    else 
      return super.action(evt, arg);
    return true;
  }
} ///:~

Ê×ÏÈÊDZêÇ©µÄ×îµäÐ͵ÄÓÃ;£º±ê¼ÇÒ»¸öÎı¾×ֶλòÎı¾ÇøÓò¡£ÔÚÀý³ÌµÄµÚ¶þ²¿·Ö£¬µ±ÎÒÃǰ´Ï¡°test 1¡±°´Å¥Í¨¹ýsetText()½«Ò»´®¿ÕµÄ¿Õ¸ñ²åÈëµ½µÄ×Ö¶ÎÀï¡£ÒòΪ¿ÕµÄ¿Õ¸ñÊý²»µÈÓÚͬÑùµÄ×Ö·ûÊý£¨ÔÚÒ»¸öµÈ±ÈÀý¼ä¸ôµÄ×Ö¿âÀ£¬µ±²åÈëÎÄ×Öµ½±êÇ©ÀïʱÎÒÃǻῴµ½ÎÄ×Ö½«±»Ê¡ÂÔµô¡£ÔÚÀý×ӵĵÚÈý²¿·Ö±£ÁôµÄ¿ÕµÄ¿Õ¸ñÔÚÎÒÃǵÚÒ»´Î°´Ï¡°test 2¡±»á·¢ÏÖ±êÇ©Êǿյģ¨trim()ɾ³ýÁËÿ¸ö×Ö·û´®½áβ²¿·ÖµÄ¿Õ¸ñ£©²¢ÇÒÔÚ¿ªÍ·µÄ×óÁвåÈëÁËÒ»¸ö¶ÌµÄ±êÇ©¡£ÔÚ¹¤×÷µÄÆäÓàʱ¼äÖÐÎÒÃǰ´Ï°´Å¥½øÐе÷Õû£¬Òò´Ë¾ÍÄÜ¿´µ½Ð§¹û¡£
ÎÒÃÇ¿ÉÄÜ»áÈÏΪÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸ö¿ÕµÄ±êÇ©£¬È»ºóÓÃsetText()°²·ÅÎÄ×ÖÔÚÀïÃæ¡£È»¶øÎÒÃDz»ÄÜÔÚÒ»¸ö¿Õ±êÇ©ÄÚ¼ÓÈëÎÄ×Ö£­Õâ´ó¸ÅÊÇÒòΪ¿Õ±êǩûÓпí¶È£­ËùÒÔ´´½¨Ò»¸öûÓÐÎÄ×ֵĿձêÇ©ÊÇûÓÐÓô¦µÄ¡£ÔÚÉÏÃæµÄÀý×ÓÀ¡°blank¡±±êÇ©Àï³äÂú¿ÕµÄ¿Õ¸ñ£¬ËùÒÔËü×ã¹»ÈÝÄɺóÃæ¼ÓÈëµÄÎÄ×Ö¡£
ͬÑùµÄ£¬setAlignment()ÔÚÎÒÃÇÓù¹½¨Æ÷´´½¨µÄµäÐ͵ÄÎÄ×Ö±êÇ©ÉÏûÓÐ×÷Óá£Õâ¸ö±êÇ©µÄ¿í¶È¾ÍÊÇÎÄ×ֵĿí¶È£¬ËùÒÔ²»ÄܶÔËü½øÐÐÈκεĵ÷Õû¡£µ«ÊÇ£¬Èç¹ûÎÒÃÇÆô¶¯Ò»¸ö³¤±êÇ©£¬È»ºó°ÑËü±ä³É¶ÌµÄ£¬ÎÒÃǾͿÉÒÔ¿´µ½µ÷ÕûµÄЧ¹û¡£
ÕâЩµ¼ÖÂʼþÁ¬Í¬ËüÃÇ×îС»¯µÄ³ß´ç±»¼·Ñ¹µÄ×´¿ö±»³ÌÐòƬʹÓõÄĬÈϲ¼¾Ö¹ÜÀíÆ÷Ëù·¢ÏÖ¡£Óйز¼¾Ö¹ÜÀíÆ÷µÄ²¿·Ö°üº¬ÔÚ±¾ÕµĺóÃæ¡£

13.8 ¸´Ñ¡¿ò
¸´Ñ¡¿òÌṩһ¸öÖÆÔ쵥һѡÔñ¿ª¹ØµÄ·½·¨£»Ëü°üÀ¨Ò»¸öС¿òºÍÒ»¸ö±êÇ©¡£µäÐ͵ĸ´Ñ¡¿òÓÐÒ»¸öСµÄ¡°X¡±£¨»òÕßËüÉèÖÃµÄÆäËüÀàÐÍ£©»òÊǿյģ¬ÕâÒÀ¿¿ÏîÄ¿ÊÇ·ñ±»Ñ¡ÔñÀ´¾ö¶¨µÄ¡£
ÎÒÃÇ»áʹÓù¹½¨Æ÷Õý³£µØ´´½¨Ò»¸ö¸´Ñ¡¿ò£¬Ê¹ÓÃËüµÄ±êÇ©À´³äµ±ËüµÄ×Ô±äÁ¿¡£Èç¹ûÎÒÃÇÔÚ´´½¨¸´Ñ¡¿òºóÏë¶Á³ö»ò¸Ä±äËü£¬ÎÒÃÇÄܹ»»ñÈ¡ºÍÉèÖÃËüµÄ״̬£¬Í¬ÑùÒ²ÄÜ»ñÈ¡ºÍÉèÖÃËüµÄ±êÇ©¡£×¢Ò⣬¸´Ñ¡¿òµÄ´óдÊÇÓëÆäËüµÄ¿ØÖÆÏàì¶ÜµÄ¡£
ÎÞÂÛºÎʱһ¸ö¸´Ñ¡¿ò¶¼¿ÉÒÔÉèÖúÍÇå³ýÒ»¸öʼþÖ¸ÁÎÒÃÇ¿ÉÒÔ²¶×½Í¬ÑùµÄ·½·¨×öÒ»¸ö°´Å¥¡£ÔÚÏÂÃæµÄÀý×ÓÀïʹÓÃÒ»¸öÎÄ×ÖÇøÓòö¾ÙËùÓб»Ñ¡Öеĸ´Ñ¡¿ò£º
//: CheckBox1.java
// Using check boxes
import java.awt.*;
import java.applet.*;

public class CheckBox1 extends Applet {
  TextArea t = new TextArea(6, 20);
  Checkbox cb1 = new Checkbox("Check Box 1");
  Checkbox cb2 = new Checkbox("Check Box 2");
  Checkbox cb3 = new Checkbox("Check Box 3");
  public void init() {
    add(t); add(cb1); add(cb2); add(cb3);
  }
  public boolean action (Event evt, Object arg) {
    if(evt.target.equals(cb1))
      trace("1", cb1.getState());
    else if(evt.target.equals(cb2))
      trace("2", cb2.getState());
    else if(evt.target.equals(cb3))
      trace("3", cb3.getState());
    else 
      return super.action(evt, arg);
    return true;
  }
  void trace(String b, boolean state) {
    if(state)
      t.appendText("Box " + b + " Set\n");
    else
      t.appendText("Box " + b + " Cleared\n");
  }
} ///:~

trace()·½·¨½«Ñ¡Öеĸ´Ñ¡¿òÃûºÍµ±Ç°×´Ì¬ÓÃappendText()·¢Ë͵½ÎÄ×ÖÇøÓòÖÐÈ¥£¬ËùÒÔÎÒÃÇ¿´µ½Ò»¸öÀÛ»ýµÄ±»Ñ¡Öеĸ´Ñ¡¿òºÍËüÃǵÄ״̬µÄÁÐ±í¡£

13.9 µ¥Ñ¡Å¥
µ¥Ñ¡Å¥ÔÚGUI³ÌÐòÉè¼ÆÖеĸÅÄîÀ´×ÔÓÚÀÏʽµÄµç×ӹܯû³µÊÕÒô»úµÄ»úе°´Å¥£ºµ±ÎÒÃǰ´ÏÂÒ»¸ö°´Å¥Ê±£¬ÆäËüµÄ°´Å¥¾Í»áµ¯Æð¡£Òò´ËËüÔÊÐíÎÒÃÇÇ¿ÖÆ´ÓÖÚ¶àÑ¡ÔñÖÐ×÷³öµ¥Ò»Ñ¡Ôñ¡£
AWTûÓе¥¶ÀµÄÃèÊöµ¥Ñ¡Å¥µÄÀࣻȡ¶ø´úÖ®µÄÊǸ´Óø´Ñ¡¿ò¡£È»¶ø½«¸´Ñ¡¿ò·ÅÔÚµ¥Ñ¡Å¥×éÖУ¨²¢ÇÒÐÞ¸ÄËüµÄÍâÐÎʹËü¿´ÆðÀ´²»Í¬ÓÚÒ»°ãµÄ¸´Ñ¡¿ò£©ÎÒÃDZØÐëʹÓÃÒ»¸öÌØÊâµÄ¹¹½¨Æ÷ÏóÒ»¸ö×Ô±äÁ¿Ò»ÑùµÄ×÷ÓÃÔÚcheckboxGroup¶ÔÏóÉÏ¡££¨ÎÒÃÇͬÑùÄÜÔÚ´´½¨¸´Ñ¡¿òºóµ÷ÓÃsetCheckboxGroup()·½·¨¡££©
Ò»¸ö¸´Ñ¡¿ò×éûÓй¹½¨Æ÷µÄ×Ô±äÁ¿£»Ëü´æÔÚµÄΨһÀíÓɾÍÊǾۼ¯Ò»Ð©¸´Ñ¡¿òµ½µ¥Ñ¡Å¥×éÀï¡£Ò»¸ö¸´Ñ¡¿ò¶ÔÏó±ØÐëÔÚÎÒÃÇÊÔͼÏÔʾµ¥Ñ¡Å¥×é֮ǰ½«ËüµÄ״̬ÉèÖóÉtrue£¬·ñÔòÔÚÔËÐÐʱÎÒÃǾͻáµÃµ½Ò»¸öÒì³£¡£Èç¹ûÎÒÃÇÉèÖó¬¹ýÒ»¸öµÄµ¥Ñ¡Å¥Îªtrue£¬Ö»ÓÐ×îºóµÄÒ»¸öÄܱ»ÉèÖóÉÕæ¡£
ÕâÀïÓиö¼òµ¥µÄʹÓõ¥Ñ¡Å¥µÄÀý×Ó¡£×¢ÒâÎÒÃÇ¿ÉÒÔÏñÆäËüµÄ×é¼þÒ»Ñù²¶×½µ¥Ñ¡Å¥µÄʼþ£º
//: RadioButton1.java
// Using radio buttons
import java.awt.*;
import java.applet.*;

public class RadioButton1 extends Applet {
  TextField t = 
    new TextField("Radio button 2", 30);
  CheckboxGroup g = new CheckboxGroup();
  Checkbox 
    cb1 = new Checkbox("one", g, false),
    cb2 = new Checkbox("two", g, true),
    cb3 = new Checkbox("three", g, false);
  public void init() {
    t.setEditable(false);
    add(t); 
    add(cb1); add(cb2); add(cb3); 
  }
  public boolean action (Event evt, Object arg) {
    if(evt.target.equals(cb1))
      t.setText("Radio button 1");
    else if(evt.target.equals(cb2))
      t.setText("Radio button 2");
    else if(evt.target.equals(cb3))
      t.setText("Radio button 3");
    else 
      return super.action(evt, arg);
    return true;
  }
} ///:~

ÏÔʾµÄ״̬ÊÇÒ»¸öÎÄ×Ö×Ö¶ÎÔÚ±»Ê¹Óá£Õâ¸ö×ֶα»ÉèÖÃΪ²»¿É±à¼­µÄ£¬ÒòΪËüÖ»ÊÇÓÃÀ´ÏÔʾÊý¾Ý¶ø²»ÊÇÊÕ¼¯¡£ÕâÑÝʾÁËÒ»¸öʹÓñêÇ©µÄ¿Éȡ֮µÀ¡£×¢Òâ×Ö¶ÎÄÚµÄÎÄ×ÖÊÇÓÉ×îÔçÑ¡ÔñµÄµ¥Ñ¡Å¥¡°Radio button 2¡±³õʼ»¯µÄ¡£
ÎÒÃÇ¿ÉÒÔÔÚ´°ÌåÖÐÓµÓÐÏ൱¶àµÄ¸´Ñ¡¿ò×é¡£

13.10 ÏÂÀ­Áбí
ÏÂÀ­ÁбíÏñÒ»¸öµ¥Ñ¡Å¥×飬ËüÊÇÇ¿ÖÆÓû§´ÓÒ»×é¿ÉʵÏÖµÄÑ¡ÔñÖÐÑ¡ÔñÒ»¸ö¶ÔÏóµÄ·½·¨¡£¶øÇÒ£¬ËüÊÇÒ»¸öʵÏÖÕâµãµÄÏ൱¼ò½àµÄ·½·¨£¬Ò²×îÒ׸ıäÑ¡Ôñ¶ø²»ÖÁʹÓû§¸Ðµ½³ÔÁ¦£¨ÎÒÃÇ¿ÉÒÔ¶¯Ì¬µØ¸Ä±äµ¥Ñ¡Å¥£¬µ«ÄÇÖÖ·½·¨ÏÔÈ»²»·½±ã£©¡£JavaµÄÑ¡Ôñ¿ò²»ÏñWindowsÖеÄ×éºÏ¿ò¿ÉÒÔÈÃÎÒ´ÓÁбíÖÐÑ¡Ôñ»òÊäÈë×Ô¼ºµÄÑ¡Ôñ¡£ÔÚÒ»¸öÑ¡Ôñ¿òÖÐÄãÖ»ÄÜ´ÓÁбíÖÐÑ¡Ôñ½ö½öÒ»¸öÏîÄ¿¡£ÔÚÏÂÃæµÄÀý×ÓÀѡÔñ¿ò´ÓÒ»¸öÈ·¶¨ÊäÈëµÄÊý×Ö¿ªÊ¼£¬È»ºóµ±°´ÏÂÒ»¸ö°´Å¥Ê±£¬ÐÂÊäÈëµÄÊý×ÖÔö¼Óµ½¿òÀï¡£Ä㽫¿ÉÒÔ¿´µ½Ñ¡Ôñ¿òµÄһЩÓÐȤµÄ״̬£º
//: Choice1.java
// Using drop-down lists
import java.awt.*;
import java.applet.*;

public class Choice1 extends Applet {
  String[] description = { "Ebullient", "Obtuse",
    "Recalcitrant", "Brilliant", "Somnescent",
    "Timorous", "Florid", "Putrescent" };
  TextField t = new TextField(30);
  Choice c = new Choice();
  Button b = new Button("Add items");
  int count = 0;
  public void init() {
    t.setEditable(false);
    for(int i = 0; i < 4; i++)
      c.addItem(description[count++]);
    add(t);
    add(c);
    add(b);
  }
  public boolean action (Event evt, Object arg) {
    if(evt.target.equals(c))
      t.setText("index: " +  c.getSelectedIndex()
        + "   " + (String)arg);
    else if(evt.target.equals(b)) {
      if(count < description.length)
        c.addItem(description[count++]);
    } 
    else 
      return super.action(evt, arg);
    return true;
  }
} ///:~

Îı¾×Ö×Ö¶ÎÖÐÏÔʾµÄ¡°selected index,"Ò²¾ÍÊǵ±Ç°Ñ¡ÔñµÄÏîÄ¿µÄÐòÁкţ¬ÔÚʼþÖÐÑ¡ÔñµÄ×Ö·û´®¾ÍÏñaction()µÄµÚ¶þ¸ö×Ô±äÁ¿µÄ×Ö´®·ûÃèÊöµÄÒ»ÑùºÃ¡£
ÔËÐÐÕâ¸ö³ÌÐòƬʱ£¬Çë×¢Òâ¶ÔChoice¿ò´óСµÄÅжϣºÔÚwindowsÀÕâ¸ö´óСÊÇÔÚÎÒÃÇÀ­ÏÂÁбíʱȷ¶¨µÄ¡£ÕâÒâζ×ÅÈç¹ûÎÒÃÇÀ­ÏÂÁÐ±í£¬È»ºóÔö¼Ó¸ü¶àµÄÏîÄ¿µ½ÁбíÖУ¬ÕâÏîÄ¿½«ÔÚÄÇ£¬µ«Õâ¸öÏÂÀ­ÁÐ±í²»ÔÙ½ÓÊÜ£¨ÎÒÃÇ¿ÉÒÔͨ¹ýÏîÄ¿À´¹ö¶¯¹Û²ì¡ª¡ª×¢Ê͢ܣ©¡£È»¶ø£¬Èç¹ûÎÒÃÇÔÚµÚÒ»´ÎÀ­ÏÂÏÂÀ­Áбíǰ½«ËùµÄÏîĿװÈëÏÂÀ­ÁÐ±í£¬ËüµÄ´óС¾Í»áºÏÊÊ¡£µ±È»£¬Óû§ÔÚʹÓÃʱϣÍû¿´µ½Õû¸öµÄÁÐ±í£¬ËùÒÔ»áÔÚÏÂÀ­ÁбíµÄ״̬Àï¶ÔÔö¼ÓÏîÄ¿µ½Ñ¡Ôñ¿òÀï¼ÓÒÔÌØÊâµÄÏÞ¶¨¡£

¢Ü£ºÕâÒ»ÐÐΪÏÔÈ»ÊÇÒ»ÖÖ´íÎ󣬻áJavaÒÔºóµÄ°æ±¾Àï½â¾ö¡£

13.11 Áбí¿ò
Áбí¿òÓëÑ¡Ôñ¿òÓÐÍêÈ«µÄ²»Í¬£¬¶ø²»½ö½öÊǵ±ÎÒÃÇÔÚ¼¤»îÑ¡Ôñ¿òʱµÄÏÔʾ²»Í¬£¬Áбí¿ò¹Ì¶¨ÔÚÆÁÄ»µÄÖ¸¶¨Î»Öò»»á¸Ä±ä¡£ÁíÍ⣬һ¸öÁбí¿òÔÊÐí¶à¸öÑ¡Ôñ£ºÈç¹ûÎÒÃǵ¥»÷ÔÚ³¬¹ýÒ»¸öµÄÏîÄ¿ÉÏ£¬Î´Ñ¡ÔñµÄÔò±íÏÖΪ¸ßÁÁ¶È£¬ÎÒÃÇ¿ÉÒÔÑ¡ÔñÏóÎÒÃÇÏëÒªµÄÒ»ÑùµÄ¶à¡£Èç¹ûÎÒÃÇÏë²ì¿´ÏîÄ¿ÁÐ±í£¬ÎÒÃÇ¿ÉÒÔµ÷ÓÃgetSelectedItem()À´²úÉúÒ»¸ö±»Ñ¡ÔñµÄÏîÄ¿ÁÐ±í¡£ÒªÏë´ÓÒ»¸ö×éÀïɾ³ýÒ»¸öÏîÄ¿£¬ÎÒÃDZØÐëÔÙÒ»´ÎµÄµ¥»÷Ëü¡£Áбí¿ò£¬µ±È»ÕâÀïÓÐÒ»¸öÎÊÌâ¾ÍÊÇËüĬÈϵ͝×÷ÊÇË«»÷¶ø²»Êǵ¥»÷¡£µ¥»÷´Ó×éÖÐÔö¼Ó»òɾ³ýÏîÄ¿£¬Ë«»÷µ÷ÓÃaction()¡£½â¾öÕâ¸öÎÊÌâµÄ·½·¨ÊÇÏóÏÂÃæµÄ³ÌÐò¼ÙÉèµÄÒ»ÑùÖØÐÂÅàѵÎÒÃǵÄÓû§¡£
//: List1.java
// Using lists with action()
import java.awt.*;
import java.applet.*;

public class List1 extends Applet {
  String[] flavors = { "Chocolate", "Strawberry",
    "Vanilla Fudge Swirl", "Mint Chip", 
    "Mocha Almond Fudge", "Rum Raisin", 
    "Praline Cream", "Mud Pie" };
  // Show 6 items, allow multiple selection:
  List lst = new List(6, true);
  TextArea t = new TextArea(flavors.length, 30);
  Button b = new Button("test");
  int count = 0;
  public void init() {
    t.setEditable(false);
    for(int i = 0; i < 4; i++)
      lst.addItem(flavors[count++]);
    add(t);
    add(lst);
    add(b);
  }
  public boolean action (Event evt, Object arg) {
    if(evt.target.equals(lst)) {
      t.setText("");
      String[] items = lst.getSelectedItems();
      for(int i = 0; i < items.length; i++)
        t.appendText(items[i] + "\n");
    }
    else if(evt.target.equals(b)) {
      if(count < flavors.length)
        lst.addItem(flavors[count++], 0);
    }
    else 
      return super.action(evt, arg);
    return true;
  }
} ///:~

°´Ï°´Å¥Ê±£¬°´Å¥Ôö¼ÓÏîÄ¿µ½ÁбíµÄ¶¥²¿£¨ÒòΪaddItem()µÄµÚ¶þ¸ö×Ô±äÁ¿ÎªÁ㣩¡£Ôö¼ÓÏîÄ¿µ½Áбí¿ò±Èµ½Ñ¡Ôñ¿ò¸ü¼ÓµÄºÏÀí£¬ÒòΪÓû§ÆÚÍûÈ¥¹ö¶¯Ò»¸öÁбí¿ò£¨ÒòΪÕâ¸öÔ­Òò£¬ËüÓÐÄÚ½¨µÄ¹ö¶¯Ìõ£©µ«Óû§²¢²»Ô¸ÒâÏñÔÚÇ°ÃæµÄÀý×ÓÀï²»µÃ²»È¥¼ÆËãÔõÑù²ÅÄܹö¶¯µ½ÒªÒªµÄÄǸöÏîÄ¿¡£
È»¶ø£¬µ÷ÓÃaction()µÄΨһ·½·¨¾ÍÊÇͨ¹ýË«»÷¡£Èç¹ûÎÒÃÇÏë¼àÊÓÓû§ÔÚÎÒÃǵÄÁбíÖеÄËù×÷ËùΪ£¨ÓÈÆäÊǵ¥»÷£©£¬ÎÒÃDZØÐëÌṩһ¸ö¿É¹©Ñ¡ÔñµÄ·½·¨¡£

13.11.1 handleEvent()
µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÃÇÒÑʹÓÃÁËaction()£¬ÏÖÓÐÁíÒ»ÖÖ·½·¨handleEvent()¿É¶Ôÿһʼþ½øÐг¢ÊÔ¡£µ±Ò»¸öʼþ·¢Éúʱ£¬Ëü×ÜÊÇÕë¶Ôµ¥¶Àʼþ»ò·¢ÉúÔÚµ¥¶ÀµÄʼþ¶ÔÏóÉÏ¡£¸Ã¶ÔÏóµÄhandleEvent()·½·¨ÊÇ×Ô¶¯µ÷Óõ쬲¢ÇÒÊDZ»handleEvent()´´½¨²¢´«µÝµ½handleEvent()ÀĬÈϵÄhandleEvent()£¨handleEvent()¶¨ÒåÔÚ×é¼þÀ»ù´¡ÀàµÄËùÓпؼþ¶¼ÔÚAWTÀ½«ÏñÎÒÃÇÒÔǰһÑùµ÷ÓÃaction()»òÆäËüͬÑùµÄ·½·¨È¥Ö¸Ã÷Êó±êµÄ»î¶¯¡¢¼üÅ̻»òÕßÖ¸Ã÷ÒÆ¶¯µÄ½¹µã¡£ÎÒÃǽ«»áÔÚ±¾ÕµĺóÃæ²¿·Ö¿´µ½¡£
Èç¹ûÆäËüµÄ·½·¨£­ÌرðÊÇaction()£­²»ÄÜÂú×ãÎÒÃǵÄÐèÒªÔõô°ìÄØ£¿ÖÁÓÚÁбí¿ò£¬ÀýÈ磬Èç¹ûÎÒÏë²¶×½Êó±êµ¥»÷£¬µ«action()Ö»ÏìӦ˫»÷Ôõô°ìÄØ£¿Õâ¸ö½â´ðÊǹýÔØhandleEvent()£¬±Ï¾¹ËüÊÇ´Ó³ÌÐòƬÖеõ½µÄ£¬Òò´Ë¿ÉÒÔ¹ýÔØÈκηÇÈ·¶¨µÄ·½·¨¡£µ±ÎÒÃÇΪ³ÌÐòƬ¹ýÔØhandleEvent()ʱ£¬ÎÒÃÇ»áµÃµ½ËùÓеÄʼþÔÚËüÃÇ·¢Ëͳöȥ֮ǰ£¬ËùÒÔÎÒÃDz»ÄܼÙÉè¡°ÕâÀïÓÐÎҵİ´Å¥¿É×öµÄʼþ£¬ËùÒÔÎÒÃÇ¿ÉÒÔ¼ÙÉè°´Å¥±»°´ÏÂÁË¡±´ÓËü±»action()ÉèÎªÕæÖµ¡£ÔÚhandleEvent()Öа´Å¥ÓµÓн¹µãÇÒijÈ˶ÔËü½øÐзÖÅä¶¼ÊÇ¿ÉÄܵġ£²»ÂÛËüºÏÀíÓë·ñ£¬ÎÒÃǿɲâÊÔÕâЩʼþ²¢×ñÕÕhandleEvent()À´½øÐвÙ×÷¡£
ΪÁËÐÞ¸ÄÁбíÑù±¾£¬Ê¹Ëü»áÏìÓ¦Êó±êµÄµ¥»÷£¬ÔÚaction()Öа´Å¥²âÊÔ½«±»¹ýÔØ£¬µ«´úÂë»á´¦ÀíµÄÁÐ±í½«ÏñÏÂÃæµÄÀý×Ó±»ÒƽøhandleEvent()ÖÐÈ¥£º
//: List2.java
// Using lists with handleEvent()
import java.awt.*;
import java.applet.*;

public class List2 extends Applet {
  String[] flavors = { "Chocolate", "Strawberry",
    "Vanilla Fudge Swirl", "Mint Chip", 
    "Mocha Almond Fudge", "Rum Raisin", 
    "Praline Cream", "Mud Pie" };
  // Show 6 items, allow multiple selection:
  List lst = new List(6, true);
  TextArea t = new TextArea(flavors.length, 30);
  Button b = new Button("test");
  int count = 0;
  public void init() {
    t.setEditable(false);
    for(int i = 0; i < 4; i++)
      lst.addItem(flavors[count++]);
    add(t);
    add(lst);
    add(b);
  }
  public boolean handleEvent(Event evt) {
    if(evt.id == Event.LIST_SELECT ||
       evt.id == Event.LIST_DESELECT) {
      if(evt.target.equals(lst)) {
        t.setText("");
        String[] items = lst.getSelectedItems();
        for(int i = 0; i < items.length; i++)
          t.appendText(items[i] + "\n");
      }
      else 
        return super.handleEvent(evt);
    } 
    else 
      return super.handleEvent(evt);
    return true;
  }
  public boolean action(Event evt, Object arg) {
    if(evt.target.equals(b)) {
      if(count < flavors.length)
        lst.addItem(flavors[count++], 0);
    }
    else 
      return super.action(evt, arg);
    return true;
  }
} ///:~

Õâ¸öÀý×ÓÍ¬Ç°ÃæµÄÀý×ÓÏàͬ³ýÁËÔö¼ÓÁËhandleEvent()Íâ¼òֱһģһÑù¡£ÔÚ³ÌÐòÖÐ×öÁËÊÔÑéÀ´ÑéÖ¤ÊÇ·ñÁбí¿òµÄÑ¡ÔñºÍ·ÇÑ¡Ôñ´æÔÚ¡£ÏÖÔÚÇë¼Çס£¬handleEvent()±»³ÌÐòƬËù¹ýÔØ£¬ËùÒÔËüÄÜÔÚ´°ÌåÖÐÈκδæÔÚ£¬²¢ÇÒ±»ÆäËüµÄÁÐ±íµ±³ÉʼþÀ´´¦Àí¡£Òò´ËÎÒÃÇͬÑù±ØÐëͨ¹ýÊÔÑéÀ´¹Û²ìÄ¿±ê¡££¨ËäÈ»ÔÚÕâ¸öÀý×ÓÖУ¬³ÌÐòƬÖÐÖ»ÓÐÒ»¸öÁбí¿òËùÒÔÎÒÃÇÄܼÙÉèËùÓеÄÁбí¿òʼþ±ØÐë·þÎñÓÚÁбí¿ò¡£ÕâÊÇÒ»¸ö²»ºÃµÄϰ¹ß£¬Ò»µ©ÆäËüµÄÁбí¿ò¼ÓÈ룬Ëü¾Í»á±ä³É³ÌÐòÖеÄÒ»¸öȱÏÝ¡££©Èç¹ûÁбí¿òÆ¥ÅäÒ»¸öÎÒÃǸÐÐËȤµÄÁбí¿ò£¬ÏñÇ°ÃæµÄÒ»ÑùµÄ´úÂ뽫°´ÉÏÃæµÄ²ßÂÔÀ´ÔËÐС£×¢ÒâhandleEvent()µÄ´°ÌåÓëaction()µÄÏàͬ£ºÈç¹ûÎÒÃÇ´¦ÀíÒ»¸öµ¥¶ÀµÄʼþ£¬½«·µ»ØÕæÖµ£¬µ«Èç¹ûÎÒÃÇ¶ÔÆäËüµÄһЩʼþ²»¸ÐÐËȤ£¬Í¨¹ýhandleEvent()ÎÒÃDZØÐë·µ»Øsuper.handleEvent()Öµ¡£Õâ±ãÊdzÌÐòµÄºËÐÄ£¬Èç¹ûÎÒÃDz»ÄÇÑù×ö£¬ÆäËüµÄÈκÎÒ»¸öʼþ´¦Àí´úÂëÒ²²»»á±»µ÷Óá£ÀýÈ磬ÊÔ×¢½âÔÚÉÏÃæµÄ´úÂëÖзµ»Øsuper.handleEvent(evt)µÄÖµ¡£ÎÒÃǽ«·¢ÏÖaction()ûÓб»µ÷Ó㬵±È»ÄDz»ÊÇÎÒÃÇÏëµÃµ½µÄ¡£¶Ôaction()ºÍhandlEvent()¶øÑÔ£¬×îÖØÒªµÄÊǸú×ÅÉÏÃæÀý×ÓÖеĸñʽ£¬²¢ÇÒµ±ÎÒÃÇ×Ô¼º²»´¦Àíʼþʱһֱ·µ»Ø»ù´¡ÀàµÄ·½·¨°æ±¾ÐÅÏ¢¡££¨ÔÚÀý×ÓÖÐÎÒÃǽ«·µ»ØÕæÖµ£©¡££¨ÐÒÔ˵ÄÊÇ£¬ÕâЩÀàÐ͵ĴíÎóµÄ½öÊôÓÚJava 1.0°æ£¬ÔÚ±¾ÕºóÃæ½«¿´µ½µÄÐÂÉè¼ÆµÄJava 1.1Ïû³ýÁËÕâЩÀàÐ͵ĴíÎó¡££©
ÔÚwindowsÀÈç¹ûÎÒÃǰ´ÏÂshift¼ü£¬Áбí¿ò×Ô¶¯ÔÊÐíÎÒÃÇ×ö¶à¸öÑ¡Ôñ¡£Õâ·Ç³£µÄ°ô£¬ÒòΪËüÔÊÐíÓû§×öµ¥¸ö»ò¶à¸öµÄÑ¡Ôñ¶ø²»ÊDZà³ÌÆÚ¼ä¹Ì¶¨µÄ¡£ÎÒÃÇ¿ÉÄÜ»áÈÏΪÎÒÃDZäµÃ¸ü¼ÓµÄ¾«Ã÷£¬²¢ÇÒµ±Ò»¸öÊó±êµ¥»÷±»evt.shiftdown()²úÉúʱÈç¹ûshift¼üÊǰ´ÏµĽ«Ö´ÐÐÎÒÃÇ×Ô¼ºµÄÊÔÑé³ÌÐò¡£AWTµÄÉè¼Æ·Á°­ÁËÎÒÃÇ£­ÎÒÃDz»µÃ²»È¥Á˽âÄĸöÏîÄ¿±»Êó±êµã»÷ʱÊÇ·ñ°´ÏÂÁËshift¼ü£¬ËùÒÔÎÒÃÇÄÜÈ¡ÏûÆäÓಿ·ÖËùÓеÄÑ¡Ôñ²¢ÇÒֻѡÔñÄÇÒ»¸ö¡£²»¹ÜÔõÑù£¬ÎÒÃÇÊDz»¿ÉÄÜÔÚJava 1.0°æÖÐ×ö³öÀ´µÄ¡££¨Java 1.1½«ËùÓеÄÊó±ê¡¢¼üÅÌ¡¢½¹µãʼþ´«Ë͵½ÁбíÖУ¬ËùÒÔÎÒÃÇÄܹ»Íê³ÉËü¡££©

13.12 ²¼¾ÖµÄ¿ØÖÆ
ÔÚJavaÀï¸Ã·½·¨Êǰ²Ò»¸ö×é¼þµ½Ò»¸ö´°ÌåÖÐÈ¥£¬Ëü²»Í¬ÎÒÃÇʹÓùýµÄÆäËüGUIϵͳ¡£Ê×ÏÈ£¬ËüÊÇÈ«´úÂëµÄ£»Ã»ÓпØÖư²·Å×é¼þµÄ¡°×ÊÔ´¡±¡£Æä´Î£¬¸Ã·½·¨µÄ×é¼þ±»°²·Åµ½Ò»¸ö±»¡°²¼¾Ö¹ÜÀíÆ÷¡±¿ØÖƵĴ°ÌåÖУ¬ÓÉ¡°²¼¾Ö¹ÜÀíÆ÷¡±¸ù¾ÝÎÒÃÇadd()ËüÃǵľö¶¨À´°²·Å×é¼þ¡£´óС£¬ÐÎ×´£¬×é¼þλÖÃÓëÆäËüϵͳµÄ²¼¾Ö¹ÜÀíÆ÷ÏÔÖøµÄ²»Í¬¡£ÁíÍ⣬²¼¾Ö¹ÜÀíÆ÷ʹÎÒÃǵijÌÐòƬ»òÓ¦ÓóÌÐòÊʺϴ°¿ÚµÄ´óС£¬ËùÒÔ£¬Èç¹û´°¿ÚµÄ³ß´ç¸Ä±ä£¨ÀýÈ磬ÔÚHTMLÒ³ÃæµÄ³ÌÐòƬָ¶¨µÄ¹æ¸ñ£©£¬×é¼þµÄ´óС£¬ÐÎ×´ºÍλÖö¼»á¸Ä±ä¡£
³ÌÐòƬºÍÖ¡Àà¶¼ÊÇÀ´Ô´ÓÚ°üº¬ºÍÏÔʾ×é¼þµÄÈÝÆ÷¡££¨Õâ¸öÈÝÆ÷Ò²ÊÇÒ»¸ö×é¼þ£¬ËùÒÔËüÒ²ÄÜÏìӦʼþ¡££©ÔÚÈÝÆ÷ÖУ¬µ÷ÓÃsetLayout()·½·¨ÔÊÐíÎÒÑ¡Ôñ²»Í¬µÄ²¼¾Ö¹ÜÀíÆ÷¡£
ÔÚÕâ½ÚÀïÎÒÃǽ«Ì½Ë÷²»Í¬µÄ²¼¾Ö¹ÜÀíÆ÷£¬²¢°²·Å°´Å¥ÔÚËüÃÇÖ®ÉÏ¡£ÕâÀïûÓв¶×½°´Å¥µÄʼþ£¬ÕýºÃ¿ÉÒÔÑÝʾÈçºÎ²¼ÖÃÕâЩ°´Å¥¡£

13.12.1 FlowLayout
µ½Ä¿Ç°ÎªÖ¹£¬ËùÓеijÌÐòƬ¶¼±»½¨Á¢£¬¿´ÆðÀ´Ê¹ÓÃһЩ²»¿É˼ÒéµÄÄÚ²¿Âß¼­À´²¼ÖÃËüÃǵÄ×é¼þ¡£ÄÇÊÇÒòΪ³ÌÐòʹÓÃÒ»¸öĬÈϵķ½Ê½£ºFlowLayout¡£Õâ¸ö¼òµ¥µÄ¡°Flow¡±µÄ×é¼þ°²×°ÔÚ´°ÌåÖУ¬´Ó×óµ½ÓÒ£¬Ö±µ½¶¥²¿µÄ¿Õ¸ñÈ«²¿ÔÙÒÆÈ¥Ò»ÐУ¬²¢¼ÌÐøÑ­»·ÕâЩ×é¼þ¡£
ÕâÀïÓÐÒ»¸öÀý×ÓÃ÷È·µØ£¨µ±È»Ò²ÊǶàÓàµØ£©ÉèÖÃÒ»¸ö³ÌÐòƬµÄ²¼¾Ö¹ÜÀíÆ÷È¥FlowLayout£¬È»ºóÔÚ´°ÌåÖа²·Å°´Å¥¡£ÎÒÃǽ«×¢Òâµ½FlowLayout×é¼þʹÓÃËüÃDZ¾À´µÄ´óС¡£ÀýÈçÒ»¸ö°´Å¥½«»á±äµÃºÍËüµÄ×Ö´®·ûÒ»ÑùµÄ´óС¡£
//: FlowLayout1.java
// Demonstrating the FlowLayout
import java.awt.*;
import java.applet.*;

public class FlowLayout1 extends Applet {
  public void init() {
    setLayout(new FlowLayout());
    for(int i = 0; i < 20; i++)
      add(new Button("Button " + i));
  }
} ///:~

ËùÓÐ×é¼þ½«ÔÚFlowLayoutÖб»Ñ¹ËõΪËüÃǵÄ×îС³ß´ç£¬ËùÒÔÎÒÃÇ¿ÉÄÜ»áµÃµ½Ò»Ð©Ææ¹ÖµÄ״̬¡£ÀýÈ磬һ¸ö±êÇ©»áºÏÊÊËü×ÔÒѵÄ×Ö·û´®µÄ³ß´ç£¬ËùÒÔËü»áÓÒ¶ÔÆë²úÉúÒ»¸ö²»±äµÄÏÔʾ¡£

13.12.2 BorderLayout
²¼¾Ö¹ÜÀíÆ÷ÓÐËıߺÍÖмäÇøÓòµÄ¸ÅÄî¡£µ±ÎÒÃÇÔö¼ÓһЩÊÂÎﵽʹÓÃBorderLayoutµÄÃæ°åÉÏʱÎÒÃDZØÐëʹÓÃadd()·½·¨½«Ò»¸ö×Ö·û´®¶ÔÏó×÷ΪËüµÄµÚÒ»¸ö×Ô±äÁ¿£¬²¢ÇÒ×Ö·û´®±ØÐëÖ¸¶¨£¨ÕýÈ·µÄ´óд£©¡°North¡±£¨ÉÏ£©£¬¡°South¡±£¨Ï£©£¬¡°west¡±£¨×󣩣¬¡°East¡±£¨ÓÒ£©»òÕß¡°Center¡±¡£Èç¹ûÎÒÃÇÆ´Ð´´íÎó»òûÓдóд£¬¾Í»áµÃµ½Ò»¸ö±àÒëʱµÄ´íÎ󣬲¢ÇÒ³ÌÐòƬ²»»áÏñÄãËùÆÚÍûµÄÄÇÑùÔËÐС£ÐÒÔ˵ÄÊÇ£¬ÎÒÃÇ»áºÜ¿ì·¢ÏÖÔÚJava 1.1ÖÐÓÐÁ˸ü¶à¸Ä½ø¡£
ÕâÊÇÒ»¸ö¼òµ¥µÄ³ÌÐòÀý×Ó£º
//: BorderLayout1.java
// Demonstrating the BorderLayout
import java.awt.*;
import java.applet.*;

public class BorderLayout1 extends Applet {
  public void init() {
    int i = 0;
    setLayout(new BorderLayout());
    add("North", new Button("Button " + i++));
    add("South", new Button("Button " + i++));
    add("East", new Button("Button " + i++));
    add("West", new Button("Button " + i++));
    add("Center", new Button("Button " + i++));
  }
} ///:~

³ýÁË¡°Center¡±µÄÿһ¸öλÖ㬵±ÔªËØÔÚÆäËü¿Õ¼äÄÚÀ©´óµ½×î´óʱ£¬ÎÒÃÇ»á°ÑËüѹËõµ½ÊʺϿռäµÄ×îС³ß´ç¡£µ«ÊÇ£¬¡°Center¡±À©´óºóÖ»»áÕ¼¾ÝÖÐÐÄλÖá£
BorderLayoutÊÇÓ¦ÓóÌÐòºÍ¶Ô»°¿òµÄĬÈϲ¼¾Ö¹ÜÀíÆ÷¡£

13.12.3 GridLayout
GridLayoutÔÊÐíÎÒÃǽ¨Á¢Ò»¸ö×é¼þ±í¡£Ìí¼ÓÄÇЩ×é¼þʱ£¬ËüÃǻᰴ´Ó×óµ½ÓÒ¡¢´ÓÉϵ½ÏµÄ˳ÐòÔÚÍø¸ñÖÐÅÅÁС£ÔÚ¹¹½¨Æ÷ÀÐèÒªÖ¸¶¨×Ô¼ºÏ£ÍûµÄÐС¢ÁÐÊý£¬ËüÃǽ«°´Õý±ÈÀýÕ¹¿ª¡£
//: GridLayout1.java
// Demonstrating the GridLayout
import java.awt.*;
import java.applet.*;

public class GridLayout1 extends Applet {
  public void init() {
    setLayout(new GridLayout(7,3));
    for(int i = 0; i < 20; i++)
      add(new Button("Button " + i));
  }
} ///:~

ÔÚÕâ¸öÀý×ÓÀï¹²ÓÐ21¸ö¿Õ룬µ«È´Ö»ÓÐ20¸ö°´Å¥£¬×îºóµÄÒ»¸öλÖÃ×÷Áô¿Õ´¦Àí£»×¢Òâ¶ÔGridLayoutÀ´Ëµ£¬²¢²»´æÔÚʲô¡°¾ùºâ¡±´¦Àí¡£

13.12.4 CardLayout
CardLayoutÔÊÐíÎÒÃÇÔÚ¸ü¸´ÔÓµÄÓµÓÐÕæÕýµÄÎļþ¼Ð¿¨Æ¬ÓëÒ»Ìõ±ßÏàÓöµÄ»·¾³Àï´´½¨´óÖÂÏàͬÓÚ¡°¿¨Æ¬Ê½¶Ô»°¿ò¡±µÄ²¼¾Ö£¬ÎÒÃDZØÐëѹÏÂÒ»¸ö¿¨Æ¬Ê¹²»Í¬µÄ¶Ô»°¿ò´øµ½Ç°ÃæÀ´¡£ÔÚAWTÀï²»ÊÇÕâÑùµÄ£ºCardLayoutÊǼòµ¥µÄ¿ÕµÄ¿Õ¸ñ£¬ÎÒÃÇ¿ÉÒÔ×ÔÓɵذÑп¨Æ¬´øµ½Ç°ÃæÀ´¡££¨JFC/Swing¿â°üÀ¨¿¨Æ¬Ê½µÄ´°¸ñ¿´ÆðÀ´·Ç³£µÄ°ô£¬ÇÒ¿ÉÒÔÎÒÃÇ´¦ÀíËùÓеÄϸ½Ú¡££©

1. ÁªºÏ²¼¾Ö£¨Combining layouts)
ÏÂÃæµÄÀý×ÓÁªºÏÁ˸ü¶àµÄ²¼¾ÖÀàÐÍ£¬ÔÚ×î³õÖ»ÓÐÒ»¸ö²¼¾Ö¹ÜÀíÆ÷±»³ÌÐòƬ»òÓ¦ÓóÌÐò²Ù×÷¿´ÆðÀ´Ï൱µÄÀ§ÄÑ¡£ÕâÊÇÊÂʵ£¬µ«Èç¹ûÎÒÃÇ´´½¨¸ü¶àµÄÃæ°å¶ÔÏó£¬Ã¿¸öÃæ°å¶¼ÄÜÓµÓÐÒ»¸ö²¼¾Ö¹ÜÀíÆ÷£¬²¢ÇÒÏñ±»¼¯³Éµ½³ÌÐòƬ»òÓ¦ÓóÌÐòÖÐÒ»ÑùʹÓóÌÐòƬ»òÓ¦ÓóÌÐòµÄ²¼¾Ö¹ÜÀíÆ÷¡£Õâ¾ÍÏóÏÂÃæ³ÌÐòÖеÄÒ»Ñù¸øÁËÎÒÃǸü¶àµÄÁé»îÐÔ£º
//: CardLayout1.java
// Demonstrating the CardLayout
import java.awt.*;
import java.applet.Applet;

class ButtonPanel extends Panel {
  ButtonPanel(String id) {
    setLayout(new BorderLayout());
    add("Center", new Button(id));
  }
}

public class CardLayout1 extends Applet {
  Button
    first = new Button("First"),
    second = new Button("Second"),
    third = new Button("Third");
  Panel cards = new Panel();
  CardLayout cl = new CardLayout();
  public void init() {
    setLayout(new BorderLayout());
    Panel p = new Panel();
    p.setLayout(new FlowLayout());
    p.add(first);
    p.add(second);
    p.add(third);
    add("North", p);
    cards.setLayout(cl);
    cards.add("First card", 
      new ButtonPanel("The first one"));
    cards.add("Second card", 
      new ButtonPanel("The second one"));
    cards.add("Third card", 
      new ButtonPanel("The third one"));
    add("Center", cards);
  }
  public boolean action(Event evt, Object arg) {
    if (evt.target.equals(first)) {
      cl.first(cards);
    } 
    else if (evt.target.equals(second)) {
      cl.first(cards);
      cl.next(cards);
    } 
    else if (evt.target.equals(third)) {
      cl.last(cards);
    } 
    else 
      return super.action(evt, arg);
    return true;
  }
} ///:~

Õâ¸öÀý×ÓÊ×ÏȻᴴ½¨Ò»ÖÖÐÂÀàÐ͵ÄÃæ°å£ºBottonPanel£¨°´Å¥Ãæ°å£©¡£Ëü°üÀ¨Ò»¸öµ¥¶ÀµÄ°´Å¥£¬°²·ÅÔÚBorderLayoutµÄÖÐÑ룬ÄÇÒâζ×ÅËü½«³äÂúÕû¸öµÄÃæ°å¡£°´Å¥ÉϵıêÇ©½«ÈÃÎÒÃÇÖªµÀÎÒÃÇÔÚCardLayoutÉϵÄÄǸöÃæ°åÉÏ¡£
ÔÚ³ÌÐòƬÀï£¬Ãæ°å¿¨Æ¬ÉϽ«´æ·Å¿¨Æ¬ºÍ²¼¾Ö¹ÜÀíÆ÷CLÒòΪCardLayout±ØÐë×é³ÉÀ࣬ÒòΪµ±ÎÒÃÇÐèÒª´¦Àí¿¨Æ¬Ê±ÎÒÃÇÐèÒª·ÃÎÊÕâЩ¾ä±ú¡£
Õâ¸ö³ÌÐòƬ±ä³ÉʹÓÃBorderLayoutÀ´È¡´úËüµÄĬÈÏFlowLayout£¬´´½¨Ãæ°åÀ´ÈÝÄÉÈý¸ö°´Å¥£¨Ê¹ÓÃFlowLayout£©£¬²¢ÇÒÕâ¸öÃæ°å°²ÖÃÔÚ³ÌÐòƬĩβµÄ¡°North¡±¡£¿¨Æ¬Ãæ°åÔö¼Óµ½³ÌÐòƬµÄ¡°Center¡±ÀÓÐЧµØÕ¼¾ÝÃæ°åµÄÆäÓàµØ·½¡£
µ±ÎÒÃÇÔö¼ÓBottonPanels(»òÕßÈÎºÎÆäËüÎÒÃÇÏëÒªµÄ×é¼þ£©µ½¿¨Æ¬Ãæ°åʱ£¬add()·½·¨µÄµÚÒ»¸ö×Ô±äÁ¿²»ÊÇ¡°North¡±£¬¡°South¡±µÈµÈ¡£Ïà·´µÄÊÇ£¬ËüÊÇÒ»¸öÃèÊö¿¨Æ¬µÄ×Ö·û´®¡£Èç¹ûÎÒÃÇÏëÇá»÷ÄÇÕÅ¿¨Æ¬Ê¹ÓÃ×Ö·û´®£¬ÎÒÃǾͿÉÒÔʹÓã¬ËäÈ»Õâ×Ö·û´®²»»áÏÔʾÔÚ¿¨Æ¬µÄÈκεط½¡£Ê¹Óõķ½·¨²»ÊÇʹÓÃaction()£»´ú֮ʹÓÃfirst()¡¢next()ºÍlast()µÈ·½·¨¡£Çë²é¿´ÎÒÃÇÓÐ¹ØÆäËü·½·¨µÄÎļþ¡£
ÔÚJavaÖУ¬Ê¹ÓõÄһЩ¿¨Æ¬Ê½Ãæ°å½á¹¹Ê®·ÖµÄÖØÒª£¬ÒòΪ£¨ÎÒÃǽ«ÔÚºóÃæ¿´µ½£©ÔÚ³ÌÐòƬ±à³ÌÖÐʹÓõĵ¯³öʽ¶Ô»°¿òÊÇÊ®·ÖÁîÈ˾ÚÉ¥µÄ¡£¶ÔÓÚJava 1.0°æµÄ³ÌÐòƬ¶øÑÔ£¬CardLayoutÊÇΨһÓÐЧµÄÈ¡µÃºÜ¶à²»Í¬µÄ¡°µ¯³öʽ¡±µÄ´°Ìå¡£

13.12.5 GridBagLayout
ºÜÔçÒÔǰ£¬ÈËÃÇÏàÐÅËùÓеĺãÐÇ¡¢ÐÐÐÇ¡¢Ì«Ñô¼°ÔÂÁÁ¶¼Î§ÈƵØÇò¹«×ª¡£ÕâÊÇÖ±¹ÛµÄ¹Û²ì¡£µ«ºóÀ´ÌìÎÄѧ¼Ò±äµÃ¸ü¼ÓµÄ¾«Ã÷£¬ËûÃÇ¿ªÊ¼¸ú×Ù¸ö±ðÐÇÌåµÄÒÆ¶¯£¬ËüÃÇÖеÄÒ»Ð©ËÆºõÓÐʱÔÚ¹ìµÀÉÏ»ºÂýÔËÐС£ÒòΪÌìÎÄѧ¼ÒÖªµÀËùÓеÄÌìÌå¶¼Î§ÈÆµØÇò¹«×ª£¬ÌìÎÄѧ¼Ò»¨·ÑÁË´óÁ¿µÄʱ¼äÀ´ÌÖÂÛÏà¹ØµÄ·½³ÌʽºÍÀíÂÛÈ¥½âÊÍÌìÌå¶ÔÏóµÄÔËÐС£µ±ÎÒÃÇÊÔͼÓÃGridBagLayoutÀ´¹¤×÷ʱ£¬ÎÒÃÇ¿ÉÒÔÏëÏñ×Ô¼ºÎªÒ»¸öÔçÆÚµÄÌìÎÄѧ¼Ò¡£»ù´¡µÄÌõÀýÊÇ£¨¹«¸æ£ºÓÐȤµÄÊÇÉè¼ÆÕß¾ÓÈ»ÔÚÌ«ÑôÉÏ(Õâ¿ÉÄÜÊÇÔÚÌìÌåͼÖбê´íÁËλÖÃËùÖ£¬ÒëÕß×¢)£©ËùÓеÄÌìÌå¶¼½«×ñÊØ¹æÔòÀ´ÔËÐС£¸ç°×ÄáÈÕÐÂ˵£¨ÓÖÒ»´Î²»¹Ë³°·í£¬·¢ÏÖÌ«ÑôϵÄÚµÄËùÓеÄÐÐÐÇÎ§ÈÆÌ«Ñô¹«×ª¡££©ÊÇʹÓÃÍøÂçͼÀ´Åжϲ¼¾Ö£¬ÕâÖÖ·½·¨Ê¹µÃ³ÌÐòÔ±µÄ¹¤×÷±äµÃ¼òµ¥¡£Ö±µ½ÕâЩÔö¼Óµ½JavaÀÎÒÃÇÈÌÄÍ£¨³ÖÐøµÄÀä³°ÈÈ·í£©Î÷°àÑÀµÄGridBagLayoutºÍGridBagConstraints¿ñÈÈ×ڽ̡£ÎÒÃǽ¨Òé·ÏÖ¹GridBagLayout¡£È¡´úËüµÄÊÇ£¬Ê¹ÓÃÆäËüµÄ²¼¾Ö¹ÜÀíÆ÷ºÍÌØÊâµÄÔÚµ¥¸ö³ÌÐòÀïÁªºÏ¼¸¸öÃæ°åʹÓò»Í¬µÄ²¼¾Ö¹ÜÀíÆ÷µÄ¼¼Êõ¡£ÎÒÃǵijÌÐòƬ¿´ÆðÀ´²»»áÓÐʲô²»Í¬£»ÖÁÉÙ²»×ãÒÔµ÷ÕûGridBagLayoutÏÞÖÆµÄÂé·³¡£¶ÔÎÒ¶øÑÔ£¬Í¨¹ýÒ»¸öÀý×ÓÀ´ÌÖÂÛËüʵÔÚÊÇÁîÈËÍ·Í´£¨²¢ÇÒÎÒ²»¹ÄÀøÕâÖÖ¿âÉè¼Æ£©¡£Ïà·´£¬ÎÒ½¨ÒéÄú´ÓÔĶÁCornellºÍHorstmann׫дµÄ¡¶ºËÐÄJava¡·£¨µÚ¶þ°æ£¬Prentice-Hall³ö°æÉ磬1997Ä꣩¿ªÊ¼¡£
ÔÚÕⷶΧÄÚ»¹ÓÐÆäËüµÄ£ºÔÚJFC/Swing¿âÀïÓÐÒ»¸öеÄʹÓÃSmalltalkµÄÊÜÈË»¶Ó­µÄ¡°Spring and Struts¡±²¼¾Ö¹ÜÀíÆ÷²¢ÇÒËüÄÜÏÔÖøµØ¼õÉÙGridBagLayoutµÄÐèÒª¡£

13.13 actionµÄÌæ´úÆ·
ÕýÈçÔçÏÈÖ¸³öµÄÄÇÑù£¬action()²¢²»ÊÇÎÒÃǶÔËùÓÐʽøÐзÖÀàºó×Ô¶¯ÎªhandleEvent()µ÷ÓõÄΨһ·½·¨¡£ÓÐÈý¸öÆäËüµÄ±»µ÷Óõķ½·¨¼¯£¬Èç¹ûÎÒÃÇÏ벶׽ijЩÀàÐ͵Äʼþ£¨¼üÅÌ¡¢Êó±êºÍ½¹µãʼþ£©£¬Òò´ËÎÒÃDz»µÃ²»¹ýÔØ¹æ¶¨µÄ·½·¨¡£ÕâЩ·½·¨ÊǶ¨ÒåÔÚ»ù´¡Àà×é¼þÀËùÒÔËûÃǼ¸ºõÔÚËùÓÐÎÒÃÇ¿ÉÄܰ²·ÅÔÚ´°ÌåÖеÄ×é¼þÖж¼ÊÇÓÐÓõġ£È»¶ø£¬ÎÒÃÇÒ²×¢Òâµ½ÕâÖÖ·½·¨ÔÚJava 1.1°æÖÐÊDz»±»Ö§³ÖµÄ£¬Í¬Ñù¾¡¹ÜÎÒÃÇ¿ÉÄÜ×¢Òâµ½¼Ì³Ð´úÂëÀûÓÃÁËÕâÖÖ·½·¨£¬ÎÒÃǽ«»áʹÓÃJava 1.1°æµÄ·½·¨À´´úÌæ£¨±¾ÕºóÃæÓÐÏêϸ½éÉÜ£©¡£

×é¼þ·½·¨ ºÎʱµ÷ÓÃ

action(Event evt, Object what) µ±µäÐ͵ÄʼþÕë¶Ô×é¼þ·¢Éú£¨ÀýÈ磬µ±°´ÏÂÒ»¸ö°´Å¥»òÏÂÀ­ÁбíÏîÄ¿±»Ñ¡ÖУ©Ê±µ÷ÓÃ
keyDown(Event evt, int key£© µ±°´¼ü±»°´Ï£¬×é¼þÓµÓн¹µãʱµ÷Óᣵڶþ¸ö×Ô±äÁ¿Êǰ´Ïµļü²¢ÇÒÊÇÈßÓàµÄÊÇ´Óevt.key´¦¸´ÖÆÀ´µÄ
keyup(Event evt, int key) µ±°´¼ü±»ÊÍ·Å£¬×é¼þÓµÓн¹µãʱµ÷ÓÃ
lostFocus(Event evt, Object what) ½¹µã´ÓÄ¿±ê´¦ÒÆ¿ªÊ±µ÷Óá£Í¨³££¬whatÊÇ´Óevt.argÀïÈßÓà¸´ÖÆµÄ
gotFocus(Event evt, Object what) ½¹µãÒÆ¶¯µ½Ä¿±êʱµ÷ÓÃ
mouseDown(Event evt, int x£¬int y) Ò»¸öÊó±ê°´Ï´æÔÚÓÚ×é¼þÖ®ÉÏ£¬ÔÚX£¬Y×ù±ê´¦Ê±µ÷ÓÃ
mouseUp(Event evt, int x, int y) Ò»¸öÊó±êÉýÆð´æÔÚÓÚ×é¼þÖ®ÉÏʱµ÷ÓÃ
mouseMove(Event evt, int x, int y) µ±Êó±êÔÚ×é¼þÉÏÒÆ¶¯Ê±µ÷ÓÃ
mouseDrag(Event evt, int x, int y£© Êó±êÔÚÒ»´ÎmouseDownʼþ·¢ÉúºóÍ϶¯¡£ËùÓÐÍ϶¯Ê¼þ¶¼»á±¨¸æ¸øÄÚ²¿·¢ÉúÁËmouseDownʼþµÄÄǸö×é¼þ£¬Ö±µ½Óöµ½Ò»´ÎmouseUpΪֹ
mouseEnter(Event evt, int x, int y) Êó±ê´Óǰ²»ÔÚ×é¼þÉÏ·½£¬µ«Ä¿Ç°ÔÚ
mouseExit(Event evt, int x, int y) Êó±êÔø¾­Î»ÓÚ×é¼þÉÏ·½£¬µ«Ä¿Ç°²»ÔÚ

µ±ÎÒÃÇ´¦ÀíÌØÊâÇé¿öʱ¡ª¡ªÒ»¸öÊó±êʼþ£¬ÀýÈ磬ËüÇ¡ºÃÊÇÎÒÃÇÏëµÃµ½µÄÊó±êʼþ´æÔÚµÄ×ù±ê£¬ÎÒÃǽ«¿´µ½Ã¿¸ö³ÌÐò½ÓÊÕÒ»¸öʼþÁ¬Í¬Ò»Ð©ÎÒÃÇËùÐèÒªµÄÐÅÏ¢¡£ÓÐȤµÄÊÇ£¬µ±×é¼þµÄhandleEvent()µ÷ÓÃÕâЩ·½·¨Ê±£¨µäÐ͵ÄÊÂÀý£©£¬¸½¼ÓµÄ×Ô±äÁ¿×ÜÊǶàÓàµÄÒòΪËüÃǰüº¬ÔÚʼþ¶ÔÏóÀï¡£ÊÂʵÉÏ£¬Èç¹ûÎÒÃǹ۲ìcomponent.handleEvent()µÄÔ´´úÂ룬ÎÒÃÇÄÜ·¢ÏÖËüÏÔÈ»½«Ôö¼ÓµÄ×Ô±äÁ¿³é³öʼþ¶ÔÏó£¨Õâ¿ÉÄÜÊÇ¿¼Âǵ½ÔÚһЩÓïÑÔÖÐÎÞЧÂʵıàÂ룬µ«Çë¼ÇסJavaµÄ½¹µãÊǰ²È«µÄ£¬²»±Øµ£ÐÄ¡££©ÊÔÑé¶ÔÎÒÃDZíÃ÷ÕâЩʼþÊÂʵÉÏÔÚ±»µ÷Óò¢ÇÒ×÷Ϊһ¸öÓÐȤµÄ³¢ÊÔÊÇÖµµÃ´´½¨Ò»¸ö¹ýÔØÃ¿¸ö·½·¨µÄ³ÌÐòƬ£¬£¨action()µÄ¹ýÔØÔÚ±¾ÕÂµÄÆäËüµØ·½£©µ±Ê¼þ·¢ÉúʱÏÔʾËüÃǵÄÏà¹ØÊý¾Ý¡£
Õâ¸öÀý×ÓͬÑùÏòÎÒÃÇչʾÁËÔõÑùÖÆÔì×Ô¼ºµÄ°´Å¥¶ÔÏó£¬ÒòΪËüÊÇ×÷ΪĿ±êµÄËùÓÐʼþÈ¨ÒæÀ´Ê¹Óá£ÎÒ¿ÉÄÜ»áÊ×ÏÈ£¨Ò²ÊDZØÐëµÄ£©¼ÙÉèÖÆÔìÒ»¸öÐµİ´Å¥£¬ÎÒÃÇ´Ó°´Å¥´¦¼Ì³Ð¡£µ«Ëü²¢²»ÄÜÔËÐС£È¡¶ø´úÖ®µÄÊÇ£¬ÎÒÃÇ´Ó»­²¼×é¼þ´¦£¨Ò»¸ö·Ç³£ÆÕͨ×é¼þ£©¼Ì³Ð£¬²¢ÔÚÆäÉϲ»Ê¹ÓÃpaint()·½·¨»­³öÒ»¸ö°´Å¥¡£ÕýÈçÎÒÃÇËù¿´µ½µÄ£¬×Ô´ÓһЩ´úÂë»ìÈëµ½»­°´Å¥ÖÐÈ¥£¬°´Å¥¸ù±¾¾Í²»ÔËÐУ¬ÕâʵÔÚÊÇÌ«Ôã¸âÁË¡££¨Èç¹ûÄú²»ÏàÐÅÎÒ£¬ÊÔͼÔÚÀý×ÓÖÐΪ»­²¼×é¼þ½»»»°´Å¥£¬Çë¼Çסµ÷ÓóÆÎªsuperµÄ»ù´¡À๹½¨Æ÷¡£ÎÒÃǻῴµ½°´Å¥²»»á±»»­³ö£¬Ê¼þÒ²²»»á±»´¦Àí¡££©
myButtonÀàÊÇÃ÷ȷ˵Ã÷µÄ£ºËüÖ»ºÍÒ»¸ö×Ô¶¯Ê¼þ£¨AutoEvent£©¡°¸¸´°¿Ú¡±Ò»ÆðÔËÐУ¨¸¸´°¿Ú²»ÊÇÒ»¸ö»ù´¡À࣬ËüÊǰ´Å¥´´½¨ºÍ´æÔڵĴ°¿Ú¡££©¡£Í¨¹ýÕâ¸ö֪ʶ£¬myButton¿ÉÄܽøÈëµ½¸¸´°¿Ú²¢ÇÒ´¦ÀíËüµÄÎÄ×Ö×ֶΣ¬±ØÈ»¾ÍÄܽ«×´Ì¬ÐÅϢдÈëµ½¸¸´°¿ÚµÄ×Ö¶ÎÀï¡£µ±È»ÕâÊÇÒ»Öַdz£ÓÐÏ޵Ľâ¾ö·½·¨£¬myButton½öÄÜÔÚÁ¬½áAutoEventʱ±»Ê¹Óá£ÕâÖÖ´úÂëÓÐʱ³ÆÎª¡°¸ß¶È½áºÏ¡±¡£µ«ÊÇ£¬ÖÆÔìmyButton¸üÐèÒªºÜ¶àµÄ²»ÊÇΪÀý×Ó£¨ºÍ¿ÉÄÜΪÎÒÃǽ«Ð´µÄһЩ³ÌÐòƬ£©µ£±£µÄŬÁ¦¡£ÔÙÕߣ¬Çë×¢ÒâÏÂÃæµÄ´úÂëʹÓÃÁËJava 1.1°æ²»Ö§³ÖµÄAPI¡£
//: AutoEvent.java
// Alternatives to action()
import java.awt.*;
import java.applet.*;
import java.util.*;

class MyButton extends Canvas {
  AutoEvent parent;
  Color color;
  String label;
  MyButton(AutoEvent parent, 
           Color color, String label) {
    this.label = label;
    this.parent = parent;
    this.color = color;
  }
  public void paint(Graphics  g) {
    g.setColor(color);
    int rnd = 30;
    g.fillRoundRect(0, 0, size().width, 
                    size().height, rnd, rnd);
    g.setColor(Color.black);
    g.drawRoundRect(0, 0, size().width, 
                    size().height, rnd, rnd);
    FontMetrics fm = g.getFontMetrics();
    int width = fm.stringWidth(label);
    int height = fm.getHeight();
    int ascent = fm.getAscent();
    int leading = fm.getLeading();
    int horizMargin = (size().width - width)/2;
    int verMargin = (size().height - height)/2;
    g.setColor(Color.white);
    g.drawString(label, horizMargin, 
                 verMargin + ascent + leading);
  }
  public boolean keyDown(Event evt, int key) {
    TextField t = 
      (TextField)parent.h.get("keyDown");
    t.setText(evt.toString());
    return true;
  }
  public boolean keyUp(Event evt, int key) {
    TextField t = 
      (TextField)parent.h.get("keyUp");
    t.setText(evt.toString());
    return true;
  }
  public boolean lostFocus(Event evt, Object w) {
    TextField t = 
      (TextField)parent.h.get("lostFocus");
    t.setText(evt.toString());
    return true;
  }
  public boolean gotFocus(Event evt, Object w) {
    TextField t = 
      (TextField)parent.h.get("gotFocus");
    t.setText(evt.toString());
    return true;
  }
  public boolean 
  mouseDown(Event evt,int x,int y) {
    TextField t = 
      (TextField)parent.h.get("mouseDown");
    t.setText(evt.toString());
    return true;
  }
  public boolean 
  mouseDrag(Event evt,int x,int y) {
    TextField t = 
      (TextField)parent.h.get("mouseDrag");
    t.setText(evt.toString());
    return true;
  }
  public boolean 
  mouseEnter(Event evt,int x,int y) {
    TextField t = 
      (TextField)parent.h.get("mouseEnter");
    t.setText(evt.toString());
    return true;
  }
  public boolean 
  mouseExit(Event evt,int x,int y) {
    TextField t = 
      (TextField)parent.h.get("mouseExit");
    t.setText(evt.toString());
    return true;
  }
  public boolean 
  mouseMove(Event evt,int x,int y) {
    TextField t = 
      (TextField)parent.h.get("mouseMove");
    t.setText(evt.toString());
    return true;
  }
  public boolean mouseUp(Event evt,int x,int y) {
    TextField t = 
      (TextField)parent.h.get("mouseUp");
    t.setText(evt.toString());
    return true;
  }
}

public class AutoEvent extends Applet {
  Hashtable h = new Hashtable();
  String[] event = {
    "keyDown", "keyUp", "lostFocus", 
    "gotFocus", "mouseDown", "mouseUp", 
    "mouseMove", "mouseDrag", "mouseEnter", 
    "mouseExit"
  };
  MyButton 
    b1 = new MyButton(this, Color.blue, "test1"),
    b2 = new MyButton(this, Color.red, "test2");
  public void init() {
    setLayout(new GridLayout(event.length+1,2));
    for(int i = 0; i < event.length; i++) {
      TextField t = new TextField();
      t.setEditable(false);
      add(new Label(event[i], Label.CENTER)); 
      add(t);
      h.put(event[i], t);
    }
    add(b1);
    add(b2);
  }
} ///:~

ÎÒÃÇ¿ÉÒÔ¿´µ½¹¹½¨Æ÷ʹÓÃÀûÓÃ×Ô±äÁ¿Í¬ÃûµÄ·½·¨£¬ËùÒÔ×Ô±äÁ¿±»¸³Öµ£¬²¢ÇÒʹÓÃthisÀ´Çø·Ö£º
this.label = label;
paint()·½·¨Óɼòµ¥µÄ¿ªÊ¼£ºËüÓð´Å¥µÄÑÕÉ«Ìî³äÁËÒ»¸ö¡°Ô²½Ç¾ØÐΡ±£¬È»ºó»­ÁËÒ»¸öºÚÏßÎ§ÈÆËü¡£Çë×¢Òâsize()µÄʹÓþö¶¨ÁË×é¼þµÄ¿í¶ÈºÍ³¤¶È£¨µ±È»£¬ÊÇÏñËØ£©¡£ÕâÖ®ºó£¬paint()¿´ÆðÀ´·Ç³£µÄ¸´ÔÓ£¬ÒòΪÓдóÁ¿µÄÔ¤²âÈ¥¼ÆËã³öÔõÑùÀûÓá°font metrics¡±¼¯Öа´Å¥µÄ±êÇ©µ½°´Å¥Àï¡£ÎÒÃÇÄܵõ½Ò»¸öÏ൱ºÃµÄ¹ØÓÚ¼ÌÐø¹Ø×¢·½·¨µ÷ÓõÄÖ÷Ò⣬Ëü½«³ÌÐòÖÐÄÇЩÏ൱ƽ·²µÄ´úÂëÌô³ö£¬µ±ÎÒÃÇÏ뼯ÖÐÒ»¸ö±êÇ©µ½Ò»Ð©×é¼þÀïʱ£¬ÎÒÃÇÕýºÃ¿ÉÒÔ¶ÔËü½øÐмôÇкÍÕ³Ìù¡£
ÄúÖ±µ½×¢Òâµ½AutoEventÀà²ÅÄÜÕýÈ·µØÀí½âkeyDown(),keyUp()¼°ÆäËü·½·¨µÄÔËÐС£Õâ°üº¬Ò»¸öHashtable£¨ÒëÕß×¢£ºÉ¢ÁÐ±í£©È¥¿ØÖÆ×Ö·û´®À´ÃèÊö¹ØÓÚʼþ´¦ÀíµÄʼþºÍTextFieldÀàÐÍ¡£µ±È»£¬ÕâЩÄܱ»¾²Ì¬µÄ´´½¨¶ø²»ÊÇ·ÅÈëHashtableµ«ÎÒÈÏΪÄú»áͬÒâËüÊǸüÈÝÒ×ʹÓú͸ıäµÄ¡£ÌرðÊÇ£¬Èç¹ûÎÒÃÇÐèÒªÔÚAutoEventÖÐÔö¼Ó»òɾ³ýÒ»¸öеÄʼþÀàÐÍ£¬ÎÒÃÇÖ»ÐèÒª¼òµ¥µØÔÚʼþÁжÓÖÐÔö¼Ó»òɾ³ýÒ»¸ö×Ö·û´®¡ª¡ªËùÓеŤ×÷¶¼×Ô¶¯µØÍê³ÉÁË¡£
ÎÒÃDzé³öÔÚkeyDown()£¬keyup()¼°ÆäËü·½·¨ÖеÄ×Ö·û´®µÄλÖûص½myButtonÖС£ÕâЩ·½·¨ÖеÄÈκÎÒ»¸ö¶¼Óø¸¾ä±úÊÔͼ»Øµ½¸¸´°¿Ú¡£¸¸ÀàÊÇÒ»¸öAutoEvent£¬Ëü°üº¬Hashtable hºÍget()·½·¨£¬µ±ÓµÓÐÌØ¶¨µÄ×Ö·û´®Ê±£¬½«¶ÔÒ»¸öÎÒÃÇÖªµÀµÄTextField¶ÔÏó²úÉúÒ»¸ö¾ä±ú£¨Òò´ËËü±»Ñ¡Åɵ½ÄÇ£©¡£È»ºóʼþ¶ÔÏóÐÞ¸ÄÏÔʾÔÚTextFieldÖеÄ×Ö·û´®³ÂÊö¡£´ÓÎÒÃÇ¿ÉÒÔÕæÕý×¢Òâµ½¾Ù³öµÄÀý×ÓÔÚÎÒÃǵijÌÐòÖÐÔËÐÐʼþʱÒÔÀ´£¬¿ÉÒÔ·¢ÏÖÕâ¸öÀý×ÓÔËÐÐÆðÀ´ÆÄΪÓÐȤµÄ¡£

13.14 ³ÌÐòƬµÄ¾ÖÏÞ
³öÓÚ°²È«Ôµ¹Ê£¬³ÌÐòƬʮ·ÖÊܵ½ÏÞÖÆ£¬²¢ÇÒÓкܶàµÄÊÂÎÒÃǶ¼²»ÄÜ×ö¡£ÄúÒ»°ã»áÎÊ£º³ÌÐòƬ¿´ÆðÀ´ÄÜ×öʲô£¬´«ÎÅËüÓÖÄÜ×öʲô£ºÀ©Õ¹ä¯ÀÀÆ÷ÖÐWEBÒ³µÄ¹¦ÄÜ¡£×Ô´Ó×÷Ϊһ¸öÍøÉϳåÀËÕߣ¬ÎÒÃÇ´ÓÎ´ÕæÕýÏëÁ˽âÊÇ·ñÒ»¸öWEBÒ³À´×ÔÓѺõĻòÕß²»ÓѺõÄÕ¾µã£¬ÎÒÃÇÏëҪһЩ¿ÉÒÔ°²È«µØÐж¯µÄ´úÂë¡£ËùÒÔÎÒÃÇ¿ÉÄÜ»á×¢Òâµ½´óÁ¿µÄÏÞÖÆ£º
(1) Ò»¸ö³ÌÐòƬ²»ÄܽӴ¥µ½±¾µØµÄ´ÅÅÌ¡£ÕâÒâζ×Ų»ÄÜÔÚ±¾µØ´ÅÅÌÉÏдºÍ¶Á£¬ÎÒÃDz»ÏëÒ»¸ö³ÌÐòƬͨ¹ýWEBÒ³ÃæÔĶÁºÍ´«ËÍÖØÒªµÄÐÅÏ¢¡£Ð´ÊDZ»½ûÖ¹µÄ£¬µ±È»£¬ÒòΪÄǽ«»áÒýÆð²¡¶¾µÄÇÖÈë¡£µ±Êý×ÖÇ©ÃûÉúЧʱ£¬ÕâЩÏÞÖÆ»á±»½â³ý¡£
(2) ³ÌÐòƬ²»ÄÜÓµÓв˵¥¡££¨×¢Ò⣺ÕâÊǹ涨ÔÚSwingÖеģ©Õâ¿ÉÄÜ»á¼õÉÙ¹ØÓÚ°²È«ºÍ¹ØÓÚ³ÌÐò¼ò»¯µÄÂé·³¡£ÎÒÃÇ¿ÉÄÜ»á½Óµ½ÓйسÌÐòƬЭµ÷ÀûÒæÒÔ×÷ΪWEBÒ³ÃæµÄÒ»²¿·ÖµÄ֪ͨ£»¶øÎÒÃÇͨ³£²»È¥×¢Òâ³ÌÐòƬµÄ·¶Î§¡£Õâ¶ùûÓÐÖ¡ºÍ±êÌâÌõ´Ó²Ëµ¥´¦µ¯³ö£¬³öÏÖµÄÖ¡ºÍ±êÌâÌõÊÇÊôÓÚWEBä¯ÀÀÆ÷µÄ¡£Ò²Ðí½«À´Éè¼ÆÄܱ»¸Ä±ä³ÉÔÊÐíÎÒÃǽ«ä¯ÀÀÆ÷²Ëµ¥ºÍ³ÌÐòƬ²Ëµ¥Ïà½áºÏÆðÀ´¡ª¡ª³ÌÐòƬ¿ÉÒÔÓ°ÏìËüµÄ»·¾³½«µ¼ÖÂ̫Σ¼°Õû¸öϵͳµÄ°²È«²¢Ê¹³ÌÐòƬ¹ýÓڵĸ´ÔÓ¡£
(3) ¶Ô»°¿òÊDz»±»ÐÅÈεġ£ÔÚJavaÖУ¬¶Ô»°¿ò´æÔÚһЩÁîÈËÄѽâµÄµØ·½¡£Ê×ÏÈ£¬ËüÃDz»ÄÜÕýÈ·µØ¾Ü¾ø³ÌÐòƬ£¬ÕâʵÔÚÊÇÁîÈ˾ÚÉ¥¡£Èç¹ûÎÒÃÇ´Ó³ÌÐòƬµ¯³öÒ»¸ö¶Ô»°¿ò£¬ÎÒÃÇ»áÔÚ¶Ô»°¿òÉÏ¿´µ½Ò»¸ö¸½ÉϵÄÏûÏ¢¿ò¡°²»±»ÐÅÈεijÌÐòƬ¡±¡£ÕâÊÇÒòΪÔÚÀíÂÛÉÏ£¬ËüÓпÉÄÜÆÛÆ­Óû§È¥¿¼ÂÇËûÃÇÔÚͨ¹ýWEBͬһ¸öÀϹ˿͵ı¾µØÓ¦ÓóÌÐò½»Òײ¢ÇÒÈÃËûÃÇÊäÈëËûÃǵÄÐÅÓÿ¨ºÅ¡£ÔÚ¿´µ½AWT¿ª·¢µÄÄÇÖÖGUIºó£¬ÎÒÃÇ¿ÉÄÜ»áÄѹýµØÏàÐÅÈκÎÈ˶¼»á±»ÄÇÖÖ·½·¨ËùÓÞŪ¡£µ«³ÌÐòƬÊÇÒ»Ö±¸½×ÅÔÚÒ»¸öWebÒ³ÃæÉϵ쬲¢¿ÉÒÔÔÚä¯ÀÀÆ÷Öп´µ½£¬¶ø¶Ô»°¿òûÓÐÕâÖÖÒÀ¸½¹ØÏµ£¬ËùÒÔÀíÂÛÉÏÊÇ¿ÉÄܵġ£Òò´Ë£¬ÎÒÃǺÜÉÙ»á¼ûµ½Ò»¸öʹÓöԻ°¿òµÄ³ÌÐòƬ¡£
ÔÚ½ÏеÄä¯ÀÀÆ÷ÖУ¬¶ÔÊܵ½ÐÅÈεijÌÐòƬÀ´Ëµ£¬Ðí¶àÏÞÖÆ¶¼±»·Å¿íÁË£¨ÊÜÐÅÈγÌÐòƬÓÉÒ»¸öÐÅÈÎÔ´ÈÏÖ¤£©¡£
Éæ¼°³ÌÐòƬµÄ¿ª·¢Ê±£¬»¹ÓÐÁíһЩÎÊÌâÐèÒª¿¼ÂÇ£º
¡ö³ÌÐòƬ²»Í£µØ´ÓÒ»¸öÊʺϲ»Í¬ÀàµÄµ¥¶ÀµÄ·þÎñÆ÷ÉÏÏÂÔØ¡£ÎÒÃǵÄä¯ÀÀÆ÷Äܹ»»º´æ³ÌÐòƬ£¬µ«ÕâûÓб£Ö¤¡£ÔÚJava 1.1°æÖеÄÒ»¸ö¸Ä½øÊÇJAR£¨Java ARchive£©Îļþ£¬ËüÔÊÐí½«ËùÓеijÌÐòƬ×é¼þ£¨°üÀ¨ÆäËüµÄÀàÎļþ¡¢Í¼Ïñ¡¢ÉùÒô£©Ò»Æð´ò°üµ½Ò»¸öµÄÄܱ»µ¥¸ö·þÎñÆ÷´¦ÀíÏÂÔØµÄѹËõÎļþ¡£¡°Êý×ÖÇ©×Ö¡±£¨ÄÜУÑéÀà´´½¨Æ÷£©¿ÉÓÐЧµØ¼ÓÈëÿ¸öµ¥¶ÀµÄJARÎļþ¡£
¡öÒòΪ°²È«·½ÃæµÄÔµ¹Ê£¬ÎÒÃÇ×öijЩ¹¤×÷¸ü¼ÓÀ§ÄÑ£¬ÀýÈç·ÃÎÊÊý¾Ý¿âºÍ·¢Ë͵ç×ÓÓʼþ¡£ÁíÍ⣬°²È«ÏÞÖÆ¹æÔòʹ·ÃÎʶà¸öÖ÷»ú±äµÃ·Ç³£µÄÀ§ÄÑ£¬ÒòΪÿһ¼þʶ¼±ØÐëͨ¹ýWEB·þÎñÆ÷·ÓÉ£¬ÐγÉÒ»¸öÐÔÄÜÆ¿¾±£¬²¢ÇÒµ¥Ò»»·½ÚµÄ³ö´í¶¼»áµ¼ÖÂÕû¸ö´¦ÀíµÄÍ£Ö¹¡£
¡öä¯ÀÀÆ÷ÀïµÄ³ÌÐòƬ²»»áÓµÓÐͬÑùµÄ±¾µØÓ¦ÓóÌÐòÔËÐеĿؼþÀàÐÍ¡£ÀýÈ磬×Ô´ÓÓû§¿ÉÒÔ¿ª¹ØÒ³ÃæÒÔÀ´£¬ÔÚ³ÌÐòƬÖв»»áÓµÓÐÒ»¸öÐÎʽÉϵĶԻ°¿ò¡£µ±Óû§¶ÔÒ»¸öWEBÒ³Ãæ½øÐиıä»òÍ˳öä¯ÀÀÆ÷ʱ£¬¶ÔÎÒÃǵijÌÐòƬ¶øÑÔ¼òÖ±ÊÇÒ»³¡ÔÖÄÑ¡ª¡ªÕâʱûÓа취±£´æ×´Ì¬£¬ËùÒÔÈç¹ûÎÒÃÇÔÚ´¦ÀíºÍ²Ù×÷ÖÐʱ£¬ÐÅÏ¢»á±»¶ªÊ§¡£ÁíÍ⣬µ±ÎÒÃÇÀ뿪һ¸öWEBÒ³ÃæÊ±£¬²»Í¬µÄä¯ÀÀÆ÷»á¶ÔÎÒÃǵijÌÐòƬ×ö²»Í¬µÄ²Ù×÷£¬Òò´Ë½á¹û±¾À´¾ÍÊDz»È·¶¨µÄ¡£

13.14.1 ³ÌÐòƬµÄÓŵã
Èç¹ûÄÜÈÝÈÌÄÇЩÏÞÖÆ£¬ÄÇô³ÌÐòƬµÄһЩÓŵãÒ²ÊǷdz£Í»³öµÄ£¬ÓÈÆäÊÇÔÚÎÒÃǹ¹½¨¿Í»§£¯·þÎñÆ÷Ó¦ÓûòÕ߯äËüÍøÂçÓ¦ÓÃʱ£º
¡öûÓа²×°·½ÃæµÄÕùÒé¡£³ÌÐòƬӵÓÐÕæÕýµÄƽ̨¶ÀÁ¢ÐÔ£¨°üÀ¨ÈÝÒ׵ز¥·ÅÉùÒôÎļþµÈÄÜÁ¦£©ËùÒÔÎÒÃDz»ÐèÒªÕë¶Ô²»Í¬µÄƽ̨Ð޸ĴúÂëÒ²²»ÐèÒªÈκÎÈ˸ù¾Ý°²×°ÔËÐÐÈκεġ°tweaking¡±¡£ÊÂʵÉÏ£¬°²×°Ã¿´Î×Ô¶¯µØ½«WEBÒ³Á¬Í¬³ÌÐòƬһÆð£¬Òò´Ë°²¾²¡¢×Ô¶¯µØ¸üС£ÔÚ´«Í³µÄ¿Í»§»ú/·þÎñÆ÷ϵͳÖУ¬½¨Á¢ºÍ°²×°Ò»¸öа汾µÄ¿Í»§¶ËÈí¼þ¼òÖ±¾ÍÊÇÒ»³¡¶ñÃΡ£
¡öÒòΪ°²È«µÄÔ­Òò´´½¨ÔÚºËÐÄJavaÓïÑԺͳÌÐòƬ½á¹¹ÖУ¬ÎÒÃDz»±Øµ£ÐÄ»µµÄ´úÂë¶øµ¼Ö»ٻµÄ³È˵Äϵͳ¡£ÕâÑù£¬Á¬Í¬Ç°ÃæµÄÓŵ㣬¿ÉʹÓÃJava£¨¿É´ÓJavaScriptºÍVBScriptÖÐÑ¡Ôñ¿Í»§¶ËµÄWEB±à³Ì¹¤¾ß£©ÎªËùνµÄIntrant£¨ÔÚ¹«Ë¾ÄÚ²¿Ê¹Óöø²»ÏòInternet×ªÒÆµÄÆóÒµÄÚ²¿ÍøÂ磩¿Í»§»ú/·þÎñÆ÷¿ª·¢Ó¦ÓóÌÐò¡£
¡öÓÉÓÚ³ÌÐòƬÊÇ×Ô¶¯Í¬HTML¼¯³ÉµÄ£¬ËùÒÔÎÒÃÇÓÐÒ»¸öÄÚ½¨µÄ¶ÀÁ¢Æ½Ì¨Îļþϵͳȥ֧³Ö³ÌÐòƬ¡£ÕâÊÇÒ»¸öºÜÓÐȤµÄ·½·¨£¬ÒòΪÎÒÃǹßÓÚÓµÓгÌÐòÎļþµÄÒ»²¿·Ö¶ø²»ÊÇÏà·´µÄÓµÓÐÎļþϵͳ¡£

13.15 ÊÓ´°»¯Ó¦ÓÃ
³öÓÚ°²È«µÄÔµ¹Ê£¬ÎÒÃǻῴµ½ÔÚ³ÌÐòƬÎÒÃǵÄÐÐΪ·Ç³£µÄÊܵ½ÏÞÖÆ¡£ÎÒÃÇÕæÊµµØ¸Ðµ½£¬³ÌÐòƬÊDZ»ÁÙʱµØ¼ÓÈëÔÚWEBä¯ÀÀÆ÷Öеģ¬Òò´Ë£¬ËüµÄ¹¦ÄÜÁ¬Í¬ËüµÄÏà¹ØÖªÊ¶£¬¿Ø¼þ¶¼±ØÐë¼ÓÒÔÏÞÖÆ¡£µ«ÊÇ£¬ÎÒÃÇÏ£ÍûJavaÄÜÖÆÔìÒ»¸ö¿ª´°¿ÚµÄ³ÌÐòÈ¥ÔËÐÐһЩÊÂÎ·ñÔòÄþÔ¸°²·ÅÔÚÒ»¸öWEBÒ³ÃæÉÏ£¬²¢ÇÒÒ²ÐíÎÒÃÇÏ£ÍûËü¿ÉÒÔÔËÐÐһЩ¿É¿¿µÄÓ¦ÓóÌÐò£¬ÒÔ¼°¿äÕŵÄʵʱ±ãЯÐÔ¡£ÔÚÕâ±¾ÊéÇ°ÃæµÄÕ½ÚÖÐÎÒÃÇÖÆÔìÁËһЩÃüÁîÐÐÓ¦ÓóÌÐò£¬µ«ÔÚһЩ²Ù×÷»·¾³ÖУ¨ÀýÈ磺Macintosh£©Ã»ÓÐÃüÁîÐС£ËùÒÔÎÒÃÇÓкܶàµÄÀíÓÉÈ¥ÀûÓÃJava´´½¨Ò»¸öÉèÖô°¿Ú£¬·Ç³ÌÐòƬµÄ³ÌÐò¡£Õ⵱ȻÊÇÒ»¸öÊ®·ÖºÏÀíµÄÒªÇó¡£
Ò»¸öJavaÉèÖô°¿ÚÓ¦ÓóÌÐò¿ÉÒÔÓµÓв˵¥ºÍ¶Ô»°¿ò£¨Õâ¶ÔÒ»¸ö³ÌÐòƬÀ´ËµÊDz»¿ÉÄܵĺͺÜÀ§Äѵģ©£¬¿ÉÊÇÈç¹ûÎÒÃÇʹÓÃÒ»¸öÀϰ汾µÄJava£¬ÎÒÃǽ«»áÎþÉü±¾µØ²Ù×÷ϵͳ»·¾³µÄÍâ¹ÛºÍ¸ÐÊÜ¡£JFC/Swing¿âÔÊÐíÎÒÃÇÖÆÔìÒ»¸ö±£³ÖÔ­À´²Ù×÷ϵͳ»·¾³µÄÍâ¹ÛºÍ¸ÐÊܵÄÓ¦ÓóÌÐò¡£Èç¹ûÎÒÃÇÏ뽨Á¢Ò»¸öÉèÖô°¿ÚÓ¦ÓóÌÐò£¬Ëü»áºÏÀíµØÔË×÷£¬Í¬Ñù£¬Èç¹ûÎÒÃÇ¿ÉÒÔʹÓÃ×îа汾µÄJava²¢ÇÒ¼¯ºÏËùÓеŤ¾ß£¬ÎÒÃǾͿÉÒÔ·¢²¼²»»áʹÓû§À§»óµÄÓ¦ÓóÌÐò¡£Èç¹ûÒòΪһЩԭÒò£¬ÎÒÃDZ»ÆÈʹÓÃÀϰ汾µÄJava£¬ÇëÔÚ»Ù»µÒÔ½¨Á¢ÖØÒªµÄÉèÖô°¿ÚµÄÓ¦ÓóÌÐòǰ×ÐϸµØ¿¼ÂÇ¡£

13.15.1 ²Ëµ¥
Ö±½ÓÔÚ³ÌÐòƬÖа²·ÅÒ»¸ö²Ëµ¥ÊDz»¿ÉÄܵģ¨Java 1.0,Java1.1ºÍSwing¿â²»ÔÊÐí£©£¬ÒòΪËüÃÇÊÇÕë¶ÔÓ¦ÓóÌÐòµÄ¡£¼ÌÐø£¬Èç¹ûÄú²»ÏàÐÅÎÒ²¢ÇÒÈ·¶¨ÔÚ³ÌÐòƬÖпÉÒÔºÏÀíµØÓµÓв˵¥£¬ÄÇôÄú¿ÉÒÔÈ¥ÊÔÑéһϡ£³ÌÐòƬÖÐûÓÐsetMenuBar()·½·¨£¬¶øÕâÖÖ·½·¨ÊǸ½Ôڲ˵¥Öеģ¨ÎÒÃǻῴµ½Ëü¿ÉÒÔºÏÀíµØÔÚ³ÌÐòƬ²úÉúÒ»¸öÖ¡£¬²¢ÇÒÖ¡°üº¬²Ëµ¥£©¡£
ÓÐËÄÖÖ²»Í¬ÀàÐ͵ÄMenuComponent£¨²Ëµ¥×é¼þ£©£¬ËùÓеIJ˵¥×é¼þÆðÔ´ÓÚ³éÏóÀࣺ²Ëµ¥Ìõ£¨ÎÒÃÇ¿ÉÒÔÔÚÒ»¸öʼþÖ¡ÀïÓµÓÐÒ»¸ö²Ëµ¥Ìõ£©£¬²Ëµ¥È¥Ö§ÅäÒ»¸öµ¥¶ÀµÄÏÂÀ­²Ëµ¥»òÕß×Ӳ˵¥¡¢²Ëµ¥ÏîÀ´ËµÃ÷²Ëµ¥ÀïÒ»¸öµ¥¸öµÄÔªËØ£¬ÒÔ¼°ÆðÔ´ÓÚMenuItem,²úÉú¼ì²é±êÖ¾£¨checkmark£©È¥ÏÔʾ²Ëµ¥ÏîÊÇ·ñ±»Ñ¡ÔñµÄCheckBoxMenuItem¡£
²»Í¬µÄϵͳʹÓò»Í¬µÄ×ÊÔ´£¬¶ÔJavaºÍAWT¶øÑÔ£¬ÎÒÃDZØÐëÔÚÔ´´úÂëÖÐÊÖ¹¤»ã±àËùÓеIJ˵¥¡£
//: Menu1.java
// Menus work only with Frames.
// Shows submenus, checkbox menu items
// and swapping menus.
import java.awt.*;

public class Menu1 extends Frame {
  String[] flavors = { "Chocolate", "Strawberry",
    "Vanilla Fudge Swirl", "Mint Chip", 
    "Mocha Almond Fudge", "Rum Raisin", 
    "Praline Cream", "Mud Pie" };
  TextField t = new TextField("No flavor", 30);
  MenuBar mb1 = new MenuBar();
  Menu f = new Menu("File");
  Menu m = new Menu("Flavors");
  Menu s = new Menu("Safety");
  // Alternative approach:
  CheckboxMenuItem[] safety = {
    new CheckboxMenuItem("Guard"),
    new CheckboxMenuItem("Hide")
  };
  MenuItem[] file = {
    new MenuItem("Open"),
    new MenuItem("Exit")
  };
  // A second menu bar to swap to:
  MenuBar mb2 = new MenuBar();
  Menu fooBar = new Menu("fooBar");
  MenuItem[] other = {
    new MenuItem("Foo"),
    new MenuItem("Bar"),
    new MenuItem("Baz"),
  };
  Button b = new Button("Swap Menus");
  public Menu1() {
    for(int i = 0; i < flavors.length; i++) {
      m.add(new MenuItem(flavors[i]));
      // Add separators at intervals:
      if((i+1) % 3 == 0) 
        m.addSeparator();
    }
    for(int i = 0; i < safety.length; i++)
      s.add(safety[i]);
    f.add(s);
    for(int i = 0; i < file.length; i++)
      f.add(file[i]);
    mb1.add(f);
    mb1.add(m);
    setMenuBar(mb1);
    t.setEditable(false);
    add("Center", t);
    // Set up the system for swapping menus:
    add("North", b);
    for(int i = 0; i < other.length; i++)
      fooBar.add(other[i]);
    mb2.add(fooBar);
  }
  public boolean handleEvent(Event evt) {
    if(evt.id == Event.WINDOW_DESTROY) 
      System.exit(0);
    else 
      return super.handleEvent(evt);
    return true;
  }
  public boolean action(Event evt, Object arg) {
    if(evt.target.equals(b)) {
      MenuBar m = getMenuBar();
      if(m == mb1) setMenuBar(mb2);
      else if (m == mb2) setMenuBar(mb1);
    } 
    else if(evt.target instanceof MenuItem) {
      if(arg.equals("Open")) {
        String s = t.getText();
        boolean chosen = false;
        for(int i = 0; i < flavors.length; i++)
          if(s.equals(flavors[i])) chosen = true;
        if(!chosen)
          t.setText("Choose a flavor first!");
        else
          t.setText("Opening "+ s +". Mmm, mm!");
      }
      else if(evt.target.equals(file[1]))
        System.exit(0);
      // CheckboxMenuItems cannot use String 
      // matching; you must match the target:
      else if(evt.target.equals(safety[0]))
        t.setText("Guard the Ice Cream! " +
          "Guarding is " + safety[0].getState());
      else if(evt.target.equals(safety[1]))
        t.setText("Hide the Ice Cream! " +
          "Is it cold? " + safety[1].getState());
      else 
        t.setText(arg.toString());
    } 
    else 
      return super.action(evt, arg);
    return true;
  }
  public static void main(String[] args) {
    Menu1 f = new Menu1();
    f.resize(300,200);
    f.show();
  }
} ///:~

ÔÚÕâ¸ö³ÌÐòÖУ¬ÎÒ±ÜÃâÁËΪÿ¸ö²Ëµ¥±àдµäÐ͵ÄÈß³¤µÄadd()Áбíµ÷Óã¬ÒòΪÄÇ¿´ÆðÀ´ÏñÐí¶àµÄÎÞÓõıêÖ¾¡£È¡¶ø´úÖ®µÄÊÇ£¬ÎÒ°²·Å²Ëµ¥Ïîµ½Êý×éÖУ¬È»ºóÔÚÒ»¸öforµÄÑ­»·ÖÐͨ¹ýÿ¸öÊý×éµ÷ÓÃadd()¼òµ¥µØÌø¹ý¡£ÕâÑùµÄ»°£¬Ôö¼ÓºÍ¼õÉٲ˵¥Ïî±äµÃûÄÇôÌÖÑáÁË¡£
×÷Ϊһ¸ö¿ÉÑ¡ÔñµÄ·½·¨£¨ÎÒ·¢ÏÖÕâºÜÄÑÁîÎÒÂúÒ⣬ÒòΪËüÐèÒª¸ü¶àµÄ·ÖÅ䣩CheckboxMenuItemsÔÚÊý×éµÄ¾ä±úÖб»´´½¨ÊDZ»³ÆÎª°²È«´´½¨£»Õâ¶ÔÊý×éÎļþºÍÆäËüµÄÎļþ¶øÑÔÊÇÕæÕýµÄ°²È«¡£
³ÌÐòÖд´½¨Á˲»ÊÇÒ»¸ö¶øÊǶþ¸öµÄ²Ëµ¥ÌõÀ´Ö¤Ã÷²Ëµ¥ÌõÔÚ³ÌÐòÔËÐÐʱÄܱ»½»»»¼¤»î¡£ÎÒÃÇ¿ÉÒÔ¿´µ½²Ëµ¥ÌõÔõÑù×é³É²Ëµ¥£¬Ã¿¸ö²Ëµ¥ÔõÑù×é³É²Ëµ¥ÏMenuItems£©£¬chenkboxMenuItems»òÕ߯äËüµÄ²Ëµ¥£¨²úÉú×Ӳ˵¥£©¡£µ±²Ëµ¥×éºÏºó£¬¿ÉÒÔÓÃsetMenuBar()·½·¨°²×°µ½ÏÖÔڵijÌÐòÖС£ÖµµÃ×¢ÒâµÄÊǵ±°´Å¥±»Ñ¹ÏÂʱ£¬Ëü½«¼ì²éµ±Ç°µÄ²Ëµ¥°²×°Ê¹ÓÃgetMenuBar()£¬È»ºó°²·ÅÆäËüµÄ²Ëµ¥ÌõÔÚËüµÄλÖÃÉÏ¡£
µ±²âÊÔÊÇ¡°open¡±£¨¼´¿ªÊ¼£©Ê±£¬×¢ÒâÆ´Ð´ºÍ´óд£¬Èç¹û¿ªÊ¼Ê±Ã»ÓжÔÏó£¬Java·¢³öno error£¨Ã»ÓдíÎ󣩵ÄÐźš£ÕâÖÖ×Ö·û´®±È½ÏÊÇÒ»¸öÃ÷ÏԵijÌÐòÉè¼Æ´íÎóÔ´¡£
УÑéºÍ·ÇУÑéµÄ²Ëµ¥Ïî×Ô¶¯µØÔËÐУ¬ÓëÖ®Ïà¹ØµÄCheckBoxMenuItems×ÅʵÁîÈ˳Ծª£¬ÕâÊÇÒòΪһЩԭÒòËüÃDz»ÔÊÐí×Ö·û´®Æ¥Åä¡££¨ÕâËÆºõÊÇ×ÔÏàì¶ÜµÄ£¬¾¡¹Ü×Ö·û´®Æ¥Åä²¢²»ÊÇÒ»Öֺܺõİ취¡££©Òò´Ë£¬ÎÒÃÇ¿ÉÒÔÆ¥ÅäÒ»¸öÄ¿±ê¶ÔÏó¶ø²»ÊÇËüÃǵıêÇ©¡£µ±ÑÝʾʱ£¬getState()·½·¨ÓÃÀ´ÏÔʾ״̬¡£ÎÒÃÇͬÑù¿ÉÒÔÓÃsetState()¸Ä±äCheckboxMenuItemµÄ״̬¡£
ÎÒÃÇ¿ÉÄÜ»áÈÏΪһ¸ö²Ëµ¥¿ÉÒÔºÏÀíµØÖÃÈ볬¹ýÒ»¸öµÄ²Ëµ¥ÌõÖС£Õâ¿´ËÆºÏÀí£¬ÒòΪËùÓÐÎÒÃǺöÂԵIJ˵¥ÌõµÄadd()·½·¨¶¼ÊÇÒ»¸ö¾ä±ú¡£È»¶ø£¬Èç¹ûÎÒÃÇÊÔͼÕâÑù×ö£¬Õâ¸ö½á¹û½«»á±äµÃ·Ç³£µÄ±ðŤ£¬¶øÔ¶·ÇÎÒÃÇËùÏ£ÍûµÃµ½µÄ½á¹û¡££¨ºÜÄÑÖªµÀÕâÊÇÒ»¸ö±à³ÌÖеĴíÎó»òÕß˵ÊÇËûÃÇÊÔͼʹËüÒÔÕâÖÖ·½·¨È¥ÔËÐÐËù²úÉúµÄ¡££©Õâ¸öÀý×ÓͬÑùÏòÎÒÃÇչʾÁËΪʲôÎÒÃÇÐèÒª½¨Á¢Ò»¸öÓ¦ÓóÌÐòÒÔÌæ´ú³ÌÐòƬ¡££¨ÕâÊÇÒòΪӦÓóÌÐòÄÜÖ§³Ö²Ëµ¥£¬¶ø³ÌÐòƬÊDz»ÄÜÖ±½ÓʹÓò˵¥µÄ¡££©ÎÒÃÇ´ÓÖ¡´¦¼Ì³Ð´úÌæ´Ó³ÌÐòƬ´¦¼Ì³Ð¡£ÁíÍ⣬ÎÒÃÇΪÀཨһ¸ö¹¹½¨Æ÷ÒÔÈ¡´úinit()°²×°Ê¼þ¡£×îºó£¬ÎÒÃÇ´´½¨Ò»¸ömain()·½·¨²¢ÇÒÔÚÎÒÃǽ¨µÄÐÂÐͶÔÏóÀµ÷ÕûËüµÄ´óС£¬È»ºóµ÷ÓÃshow()¡£ËüÓë³ÌÐòƬֻÔÚºÜСµÄµØ·½Óв»Í¬Ö®´¦£¬È»¶øÕâʱËüÒѾ­ÊÇÒ»¸ö¶ÀÁ¢µÄÉèÖô°¿ÚÓ¦ÓóÌÐò²¢ÇÒÎÒÃÇ¿ÉÒÔʹÓò˵¥¡£

13.15.2 ¶Ô»°¿ò
¶Ô»°¿òÊÇÒ»¸ö´ÓÆäËü´°¿Úµ¯³öµÄ´°¿Ú¡£ËüµÄÄ¿µÄÊÇ´¦ÀíÒ»Ð©ÌØÊâµÄÕùÒéºÍËüÃǵÄϸ½Ú¶ø²»Ê¹Ô­À´µÄ´°¿ÚÏÝÈë»ìÂÒÖ®ÖС£¶Ô»°¿ò´óÁ¿ÔÚÉèÖô°¿ÚµÄ±à³Ì»·¾³ÖÐʹÓ㬵«¾ÍÏñÇ°ÃæÌáµ½µÄÒ»Ñù£¬ÏÊÓÚÔÚ³ÌÐòƬÖÐʹÓá£
ÎÒÃÇÐèÒª´Ó¶Ô»°Àà´¦¼Ì³ÐÒÔ´´½¨ÆäËüÀàÐ͵Ĵ°¿Ú¡¢ÏñÖ¡Ò»ÑùµÄ¶Ô»°¿ò¡£ºÍ´°¿ò²»Í¬£¬¶Ô»°¿ò²»ÄÜÓµÓв˵¥ÌõÒ²²»Äܸıä¹â±ê£¬µ«³ý´ËÖ®ÍâËüÃÇÊ®·ÖµÄÏàËÆ¡£Ò»¸ö¶Ô»°¿òÓµÓв¼¾Ö¹ÜÀíÆ÷£¨Ä¬ÈϵÄÊÇBorderLayout²¼¾Ö¹ÜÀíÆ÷£©ºÍ¹ýÔØaction()µÈµÈ£¬»òÓÃhandleEvent()È¥´¦Àíʼþ¡£ÎÒÃÇ»á×¢Òâµ½handleEvent()µÄÒ»¸öÖØÒª²îÒ죺µ±WINDOW_DESTORYʼþ·¢Éúʱ£¬ÎÒÃDz¢²»Ï£Íû¹Ø±ÕÕýÔÚÔËÐеÄÓ¦ÓóÌÐò£¡
Ïà·´£¬ÎÒÃÇ¿ÉÒÔʹÓöԻ°´°¿Úͨ¹ýµ÷ÓÃdispace()ÊÍ·Å×ÊÔ´¡£ÔÚÏÂÃæµÄÀý×ÓÖУ¬¶Ô»°¿òÊÇÓɶ¨ÒåÔÚÄǶù×÷ΪÀàµÄToeButtonµÄÌØÊâ°´Å¥×é³ÉµÄÍø¸ñ¹¹³ÉµÄ£¨ÀûÓÃGridLayout²¼¾Ö¹ÜÀíÆ÷£©¡£ToeButton°´Å¥Î§ÈÆËü×ÔÒÑ»­ÁËÒ»¸öÖ¡£¬²¢ÇÒÒÀÀµËüµÄ״̬£ºÔÚ¿ÕµÄÖеġ°£Ø¡±»òÕß¡°£Ï¡±¡£Ëü´Ó¿Õ°×¿ªÊ¼£¬È»ºóÒÀ¿¿Ê¹ÓÃÕßµÄÑ¡Ôñ£¬×ª»»³É¡°£Ø¡±»ò¡°£Ï¡±¡£µ«ÊÇ£¬µ±ÎÒÃǵ¥»÷ÔÚ°´Å¥ÉÏʱ£¬Ëü»áÔÚ¡°£Ø¡±ºÍ¡°£Ï¡±Ö®¼äÀ´»Ø½»»»¡££¨Õâ²úÉúÁËÒ»ÖÖÀàËÆÌî×ÖÓÎÏ·µÄ¸Ð¾õ£¬µ±È»±ÈËü¸üÁîÈËÌÖÑá¡££©ÁíÍ⣬Õâ¸ö¶Ô»°¿ò¿ÉÒÔ±»ÉèÖÃΪÔÚÖ÷Ó¦ÓóÌÐò´°¿ÚÖÐΪºÜ¶àµÄÐкÍÁбä¸üºÅÂë¡£
//: ToeTest.java
// Demonstration of dialog boxes
// and creating your own components
import java.awt.*;

class ToeButton extends Canvas {
  int state = ToeDialog.BLANK;
  ToeDialog parent;
  ToeButton(ToeDialog parent) {
    this.parent = parent;
  }
  public void paint(Graphics  g) {
    int x1 = 0;
    int y1 = 0;
    int x2 = size().width - 1;
    int y2 = size().height - 1;
    g.drawRect(x1, y1, x2, y2);
    x1 = x2/4;
    y1 = y2/4;
    int wide = x2/2;
    int high = y2/2;
    if(state == ToeDialog.XX) {
      g.drawLine(x1, y1, x1 + wide, y1 + high);
      g.drawLine(x1, y1 + high, x1 + wide, y1);
    }
    if(state == ToeDialog.OO) {
      g.drawOval(x1, y1, x1+wide/2, y1+high/2);
    }
  }
  public boolean 
  mouseDown(Event evt, int x, int y) {
    if(state == ToeDialog.BLANK) {
      state = parent.turn;
      parent.turn= (parent.turn == ToeDialog.XX ?
        ToeDialog.OO : ToeDialog.XX);
    } 
    else
      state = (state == ToeDialog.XX ? 
        ToeDialog.OO : ToeDialog.XX);
    repaint();
    return true;
  }
}

class ToeDialog extends Dialog {
  // w = number of cells wide
  // h = number of cells high
  static final int BLANK = 0;
  static final int XX = 1;
  static final int OO = 2;
  int turn = XX; // Start with x's turn
  public ToeDialog(Frame parent, int w, int h) {
    super(parent, "The game itself", false);
    setLayout(new GridLayout(w, h));
    for(int i = 0; i < w * h; i++)
      add(new ToeButton(this));
    resize(w * 50, h * 50);
  }
  public boolean handleEvent(Event evt) {
    if(evt.id == Event.WINDOW_DESTROY) 
      dispose();
    else 
      return super.handleEvent(evt);
    return true;
  }
}

public class ToeTest extends Frame {
  TextField rows = new TextField("3");
  TextField cols = new TextField("3");
  public ToeTest() {
    setTitle("Toe Test");
    Panel p = new Panel();
    p.setLayout(new GridLayout(2,2));
    p.add(new Label("Rows", Label.CENTER));
    p.add(rows);
    p.add(new Label("Columns", Label.CENTER));
    p.add(cols);
    add("North", p);
    add("South", new Button("go"));
  }
  public boolean handleEvent(Event evt) {
    if(evt.id == Event.WINDOW_DESTROY) 
      System.exit(0);
    else 
      return super.handleEvent(evt);
    return true;
  }
  public boolean action(Event evt, Object arg) {
    if(arg.equals("go")) {
      Dialog d = new ToeDialog(
        this, 
        Integer.parseInt(rows.getText()),
        Integer.parseInt(cols.getText()));
      d.show();
    } 
    else 
      return super.action(evt, arg);
    return true;
  }
  public static void main(String[] args) {
    Frame f = new ToeTest();
    f.resize(200,100);
    f.show();
  }
} ///:~

ToeButtonÀà±£ÁôÁËÒ»¸ö¾ä±úµ½ËüToeDialogÐ͵ĸ¸ÀàÖС£ÕýÈçÇ°ÃæËùÊö£¬ToeButtonºÍToeDialog¸ß¶ÈµÄ½áºÏÒòΪһ¸öToeButtonÖ»Äܱ»Ò»¸öToeDialogËùʹÓ㬵«ËüÈ´½â¾öÁËһϵÁеÄÎÊÌ⣬ÊÂʵÉÏÕâʵÔÚ²»ÊÇÒ»¸öÔã¸âµÄ½â¾ö·½°¸ÒòΪûÓÐÁíÍâµÄ¿ÉÒԼǼÓû§Ñ¡ÔñµÄ¶Ô»°Àà¡£µ±È»ÎÒÃÇ¿ÉÒÔʹÓÃÆäËüµÄÖÆÔìToeDialog.turn£¨ToeButtonµÄ¾²Ì¬µÄÒ»²¿·Ö£©·½·¨¡£ÕâÖÖ·½·¨Ïû³ýÁËËüÃǵĽôÃÜÁªÏµ£¬µ«È´×èÖ¹ÁËÎÒÃÇÒ»´ÎÓµÓжà¸öToeDialog£¨ÎÞÂÛÈçºÎ£¬ÖÁÉÙÓÐÒ»¸öÕý³£µØÔËÐУ©¡£
paint()ÊÇÒ»ÖÖÓëͼÐÎÓйصķ½·¨£ºËüÎ§ÈÆ°´Å¥»­³ö¾ØÐβ¢»­³ö¡°£Ø¡±»ò¡°£Ï¡±¡£ÕâÍêÈ«ÊÇÈß³¤µÄ¼ÆË㣬µ«È´Ê®·ÖµÄÖ±¹Û¡£
Ò»¸öÊó±êµ¥»÷±»¹ýÔØµÄmouseDown()·½·¨Ëù·ý»ñ£¬×îÒª½ôµÄÊǼì²éÊÇ·ñÓÐʼþдÔÚ°´Å¥ÉÏ¡£Èç¹ûûÓУ¬¸¸´°¿Ú»á±»Ñ¯ÎÊÒÔÕÒ³öË­Ñ¡ÔñÁËËü²¢ÓÃÀ´È·¶¨°´Å¥µÄ״̬¡£ÖµµÃ×¢ÒâµÄÊǰ´Å¥Ëæºó½»»Øµ½¸¸ÀàÖв¢ÇҸıäËüµÄÑ¡Ôñ¡£Èç¹û°´Å¥ÒѾ­ÏÔʾÕâΪ¡°£Ø¡±ºÍ¡°£Ï¡±£¬ÄÇôËüÃǻᱻ¸Ä±ä״̬¡£ÎÒÃÇÄÜ×¢Òâµ½±¾ÊéµÚÈýÕÂÖÐÃèÊöµÄÔÚÕâЩ¼ÆËãÖз½±ãµÄʹÓõÄÈý¸öÒ»×éµÄIf-else¡£µ±Ò»¸ö°´Å¥µÄ״̬¸Ä±äºó£¬°´Å¥»á±»ÖØ»­¡£
ToeDialogµÄ¹¹½¨Æ÷Ê®·ÖµÄ¼òµ¥£ºËüÏñÎÒÃÇËùÐèÒªµÄÒ»ÑùÔö¼ÓһЩ°´Å¥µ½GridLayout²¼¾Ö¹ÜÀíÆ÷ÖУ¬È»ºóµ÷Õûÿ¸ö°´Å¥Ã¿±ß´óСΪ50¸öÏñËØ£¨Èç¹ûÎÒÃDz»µ÷Õû´°¿Ú£¬ÄÇôËü¾Í²»»áÏÔʾ³öÀ´£©¡£×¢ÒâhandleEvent()ÕýºÃΪWINDOW_DESTROYµ÷ÓÃdispose()£¬Òò´ËÕû¸öÓ¦ÓóÌÐò²»»á±»¹Ø±Õ¡£
ToeTestÉèÖÃÕû¸öÓ¦ÓóÌÐòÒÔ´´½¨TextField£¨ÎªÊäÈë°´Å¥Íø¸ñµÄÐкÍÁУ©ºÍ¡°go¡±°´Å¥¡£ÎÒÃÇ»áÁì»áaction()ÔÚÕâ¸ö³ÌÐòÖÐʹÓò»Ì«ÁîÈËÂúÒâµÄ¡°×Ö·û´®Æ¥Å䡱¼¼ÊõÀ´²âÊÔ°´Å¥µÄ°´Ï£¨ÇëÈ·¶¨ÎÒÃÇÆ´Ð´ºÍ´óд¶¼ÊÇÕýÈ·µÄ£¡£©¡£µ±°´Å¥°´ÏÂʱ£¬TextFieldÖеÄÊý¾Ý½«±»È¡³ö£¬²¢ÇÒ£¬ÒòΪËüÃÇÔÚ×Ö·û´®½á¹¹ÖУ¬ËùÒÔÐèÒªÀûÓþ²Ì¬µÄInteger.paresInt()·½·¨À´×ª±ä³ÉÖжϡ£Ò»µ©¶Ô»°Àà±»½¨Á¢£¬ÎÒÃǾͱØÐëµ÷ÓÃshow()·½·¨À´ÏÔʾºÍ¼¤»îËü¡£
ÎÒÃÇ»á×¢Òâµ½ToeDialog¶ÔÏó¸³Öµ¸øÒ»¸ö¶Ô»°¾ä±ú d¡£ÕâÊÇÒ»¸öÉÏËÝÔìÐ͵ÄÀý×Ó£¬¾¡¹ÜËüûÓÐÕæÕýµØ²úÉúÖØÒªµÄ²îÒ죬ÒòΪËùÓеÄʼþ¶¼ÊÇshow()µ÷Óõġ£µ«ÊÇ£¬Èç¹ûÎÒÃÇÏëµ÷ÓÃToeDialogÖÐÒѾ­´æÔÚµÄһЩ·½·¨£¬ÎÒÃÇÐèÒª¶ÔToeDialog¾ä±ú¸³Öµ£¬¾Í²»»áÔÚÒ»¸öÉÏËÝÖжªÊ§ÐÅÏ¢¡£

1. Îļþ¶Ô»°Àà
ÔÚһЩ²Ù×÷ϵͳÖÐÓµÓÐÐí¶àµÄÌØÊâÄÚ½¨¶Ô»°¿òÈ¥´¦ÀíÑ¡ÔñµÄʼþ£¬ÀýÈ磺×ֿ⣬ÑÕÉ«£¬´òÓ¡»úÒÔ¼°ÀàËÆµÄʼþ¡£¼¸ºõËùÓеIJÙ×÷ϵͳ¶¼Ö§³Ö´ò¿ªºÍ±£´æÎļþ£¬µ«ÊÇ£¬JavaµÄFileDialog°ü¸üÈÝÒ×ʹÓᣵ±È»Õâ»á²»ÔÙ¼ì²âËùÓÐʹÓõijÌÐòƬ£¬ÒòΪ³ÌÐòƬÔÚ±¾µØ´ÅÅÌÉϼȲ»ÄܶÁÒ²²»ÄÜдÎļþ¡££¨Õâ»áÔÚеÄä¯ÀÀÆ÷Öн»»»³ÌÐòƬµÄÐÅÈιØÏµ¡££©
ÏÂÃæµÄÓ¦ÓóÌÐòÔËÓÃÁËÁ½¸öÎļþ¶Ô»°ÀàµÄ´°Ì壬һ¸öÊÇ´ò¿ª£¬Ò»¸öÊDZ£´æ¡£´ó¶àÊýµÄ´úÂëµ½Èç½ñÒÑΪÎÒÃÇËùÊìϤ£¬¶øËùÓÐÕâЩÓÐȤµÄ»î¶¯·¢ÉúÔÚÁ½¸ö²»Í¬°´Å¥µ¥»÷ʼþµÄaction()·½·¨ÖС£
//: FileDialogTest.java
// Demonstration of File dialog boxes
import java.awt.*;

public class FileDialogTest extends Frame {
  TextField filename = new TextField();
  TextField directory = new TextField();
  Button open = new Button("Open");
  Button save = new Button("Save");
  public FileDialogTest() {
    setTitle("File Dialog Test");
    Panel p = new Panel();
    p.setLayout(new FlowLayout());
    p.add(open);
    p.add(save);
    add("South", p);
    directory.setEditable(false);
    filename.setEditable(false);
    p = new Panel();
    p.setLayout(new GridLayout(2,1));
    p.add(filename);
    p.add(directory);
    add("North", p);
  }
  public boolean handleEvent(Event evt) {
    if(evt.id == Event.WINDOW_DESTROY) 
      System.exit(0);
    else 
      return super.handleEvent(evt);
    return true;
  }
  public boolean action(Event evt, Object arg) {
    if(evt.target.equals(open)) {
      // Two arguments, defaults to open file:
      FileDialog d = new FileDialog(this,
        "What file do you want to open?");
      d.setFile("*.java"); // Filename filter
      d.setDirectory("."); // Current directory
      d.show();
      String openFile;
      if((openFile = d.getFile()) != null) {
        filename.setText(openFile);
        directory.setText(d.getDirectory());
      } else {
        filename.setText("You pressed cancel");
        directory.setText("");
      }
    } 
    else if(evt.target.equals(save)) {
      FileDialog d = new FileDialog(this,
        "What file do you want to save?",
        FileDialog.SAVE);
      d.setFile("*.java");
      d.setDirectory(".");
      d.show();
      String saveFile;
      if((saveFile = d.getFile()) != null) {
        filename.setText(saveFile);
        directory.setText(d.getDirectory());
      } else {
        filename.setText("You pressed cancel");
        directory.setText("");
      }
    } 
    else 
      return super.action(evt, arg);
    return true;
  }
  public static void main(String[] args) {
    Frame f = new FileDialogTest();
    f.resize(250,110);
    f.show();
  }
} ///:~

¶ÔÒ»¸ö¡°´ò¿ªÎļþ¡±¶Ô»°¿ò£¬ÎÒÃÇʹÓù¹½¨Æ÷ÉèÖÃÁ½¸ö×Ô±äÁ¿£»Ê×ÏÈÊǸ¸´°¿Ú¾ä±ú£¬Æä´ÎÊÇFileDialog±êÌâÌõµÄ±êÌâ¡£setFile()·½·¨Ìṩһ¸ö³õʼÎļþÃû£­£­Ò²Ðí±¾µØ²Ù×÷ϵͳ֧³ÖͨÅä·û£¬Òò´ËÔÚÕâ¸öÀý×ÓÖÐËùÓеÄ.javaÎļþ×ͷ»á±»ÏÔʾ³öÀ´¡£setDirectory()·½·¨Ñ¡ÔñÎļþ¾ö¶¨¿ªÊ¼µÄĿ¼£¨Ò»°ã¶øÑÔ£¬²Ù×÷ϵͳÔÊÐíÓû§¸Ä±äĿ¼£©¡£
show()ÃüÁîÖ±µ½¶Ô»°Àà¹Ø±Õ²Å·µ»Ø¡£FileDialog¶ÔÏóÒ»Ö±´æÔÚ£¬Òò´ËÎÒÃÇ¿ÉÒÔ´ÓËüÄÇÀï¶ÁÈ¡Êý¾Ý¡£Èç¹ûÎÒÃǵ÷ÓÃgetFile()²¢ÇÒËü·µ»Ø¿Õ£¬ÕâÒâζ×ÅÓû§Í˳öÁ˶Ի°Àà¡£ÎļþÃûºÍµ÷ÓÃgetDirectory()·½·¨µÄ½á¹û¶¼ÏÔʾÔÚTextFieldsÀï¡£
°´Å¥µÄ±£´æ¹¤×÷ʹÓÃͬÑùµÄ·½·¨£¬³ýÁËÒòΪFileDialog¶øÊ¹Óò»Í¬µÄ¹¹½¨Æ÷¡£Õâ¸ö¹¹½¨Æ÷ÉèÖÃÁËÈý¸ö×Ô±äÁ¿²¢ÇÒµÚÈýµÄÒ»¸ö×Ô±äÁ¿±ØÐëΪFileDialog.SAVE»òFileDialog.OPEN¡£

13.16 ÐÂÐÍAWT
ÔÚJava 1.1ÖÐÒ»¸öÏÔÖøµÄ¸Ä±ä¾ÍÊÇÍêÉÆÁËÐÂAWTµÄ´´Ð¡£´ó¶àÊýµÄ¸Ä±äÎ§ÈÆÔÚJava 1.1ÖÐʹÓõÄÐÂʼþÄ£ÐÍ£ºÀϵÄʼþÄ£ÐÍÊÇÔã¸âµÄ¡¢±¿×¾µÄ¡¢·ÇÃæÏò¶ÔÏóµÄ£¬¶øÐµÄʼþÄ£ÐÍ¿ÉÄÜÊÇÎÒËù¼û¹ýµÄ×îÓÅÐãµÄ¡£ÄÑÒÔÀí½âÒ»¸öÈç´ËÔã¸âµÄ£¨ÀϵÄAWT£©ºÍÒ»¸öÈç´ËÓÅÐãµÄ£¨ÐµÄʼþÄ£ÐÍ£©³ÌÐòÓïÑÔ¾ÓÈ»³ö×Ôͬһ¸ö¼¯ÍÅÖ®ÊÖ¡£ÐµĿ¼ÂÇʼþµÄ·½·¨¿´À´ÖÐÖ¹ÁË£¬Òò´ËÕùÒé²»ÔÙ±ä³ÉÕϰ­£¬´Ó¶øÇáÒ×½øÈëÎÒÃǵÄÒâʶÀÏà·´£¬ËüÊÇÒ»¸ö°ïÖúÎÒÃÇÉè¼ÆÏµÍ³µÄ¹¤¾ß¡£ËüͬÑùÊÇJava BeansµÄ¾«»ª£¬ÎÒÃÇ»áÔÚ±¾ÕºóÃæ²¿·Ö½øÈë½²Êö¡£
Ðµķ½·¨Éè¼Æ¶ÔÏó×öΪ¡°Ê¼þÔ´¡±ºÍ¡°Ê¼þ½ÓÊÕÆ÷¡±ÒÔ´úÌæÀÏAWTµÄ·ÇÃæÏò¶ÔÏó´®ÁªµÄÌõ¼þÓï¾ä¡£ÕýÏóÎÒÃǽ«¿´µ½µÄÄÚ²¿ÀàµÄÓÃ;ÊǼ¯³ÉÃæÏò¶ÔÏóµÄԭʼ״̬µÄÐÂʼþ¡£ÁíÍ⣬ʼþÏÖÔÚ±»Ãè»æÎªÔÚÒ»¸öÀàÌåϵÒÔÈ¡´úµ¥Ò»µÄÀಢÇÒÎÒÃÇ¿ÉÒÔ´´½¨×Ô¼ºµÄʼþÀàÐÍ¡£
ÎÒÃÇͬÑù»á·¢ÏÖ£¬Èç¹ûÎÒÃDzÉÓÃÀϵÄAWT±à³Ì£¬Java 1.1°æ»á²úÉúһЩ¿´ÆðÀ´²»ºÏÀíµÄÃû×Öת»»¡£ÀýÈ磬setsize()¸Ä³Éresize()¡£µ±ÎÒÃÇѧϰJava BeansʱÕâ»á±äµÃ¸ü¼ÓµÄºÏÀí£¬ÒòΪBeansʹÓÃÒ»¸ö¶ÀÌØµÄÃüÃûЭÒé¡£Ãû×Ö±ØÐë±»ÐÞ¸ÄÒÔÔÚBeansÖвúÉúеıê×¼AWT×é¼þ¡£
¼ôÌù°å²Ù×÷ÔÚJava 1.1°æÖÐÒ²µÃµ½Ö§³Ö£¬¾¡¹ÜÍϷŲÙ×÷¡°½«ÔÚа汾Öб»Ö§³Ö¡±¡£ÎÒÃÇ¿ÉÄÜ·ÃÎÊ×ÀÃæÉ«²Ê×éÖ¯£¬ËùÒÔÎÒÃǵÄJava¿ÉÒÔͬÆäÓà×ÀÃæ±£³ÖÒ»Ö¡£¿ÉÒÔÀûÓõ¯³öʽ²Ëµ¥£¬²¢ÇÒΪͼÏñºÍͼÐÎ×÷Á˸Ľø¡£Ò²Í¬ÑùÖ§³ÖÊó±ê²Ù×÷¡£»¹Óмòµ¥µÄΪ´òÓ¡µÄAPIÒÔ¼°¼òµ¥µØÖ§³Ö¹ö¶¯¡£

13.16.1 еÄʼþÄ£ÐÍ
ÔÚеÄʼþÄ£Ð͵Ä×é¼þ¿ÉÒÔ¿ªÊ¼Ò»¸öʼþ¡£Ã¿ÖÖÀàÐ͵Äʼþ±»Ò»¸ö¸ö±ðµÄÀàËùÃè»æ¡£µ±Ê¼þ¿ªÊ¼ºó£¬ËüÊÜÀíÒ»¸ö»ò¸ü¶àʼþÖ¸Ã÷¡°½ÓÊÕÆ÷¡±¡£Òò´Ë£¬Ê¼þÔ´ºÍ´¦ÀíʼþµÄµØÖ·¿ÉÒÔ±»·ÖÀë¡£
ÿ¸öʼþ½ÓÊÕÆ÷¶¼ÊÇÖ´ÐÐÌØ¶¨µÄ½ÓÊÕÆ÷ÀàÐͽӿڵÄÀà¶ÔÏó¡£Òò´Ë×÷Ϊһ¸ö³ÌÐò¿ª·¢Õߣ¬ÎÒÃÇËùÒª×öµÄÊÇ´´½¨½ÓÊÕÆ÷¶ÔÏó²¢ÇÒÔÚ±»¼¤»îʼþµÄ×é¼þÖнøÐÐ×¢²á¡£event-firing×é¼þµ÷ÓÃÒ»¸öaddXXXListener()·½·¨À´Íê³É×¢²á£¬ÒÔÃèÊöXXXʼþÀàÐͽÓÊÜ¡£ÎÒÃÇ¿ÉÒÔÈÝÒ×µØÁ˽⵽ÒÔaddListenedÃûµÄ·½·¨Í¨ÖªÎÒÃÇÈκεÄʼþÀàÐͶ¼¿ÉÒÔ±»´¦Àí£¬Èç¹ûÎÒÃÇÊÔͼ½ÓÊÕʼþÎÒÃǻᷢÏÖ±àÒëʱÎÒÃǵĴíÎó¡£Java BeansͬÑùʹÓÃÕâÖÖaddListenerÃûµÄ·½·¨È¥ÅжÏÄÇÒ»¸ö³ÌÐò¿ÉÒÔÔËÐС£
ÎÒÃÇËùÓеÄʼþÂß¼­½«×°Èëµ½Ò»¸ö½ÓÊÕÆ÷ÀàÖС£µ±ÎÒÃÇ´´½¨Ò»¸ö½ÓÊÕÆ÷ÀàʱΨһµÄÒ»µãÏÞÖÆÊDZØÐëÖ´ÐÐרÓõĽӿڡ£ÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸öÈ«¾Ö½ÓÊÕÆ÷À࣬ÕâÖÖÇé¿öÔÚÄÚ²¿ÀàÖÐÓÐÖúÓÚ±»ºÜºÃµØÊ¹Ó㬲»½ö½öÊÇÒòΪËüÃÇÌṩÁËÒ»¸öÀíÂÛÉϵĽÓÊÕÆ÷Àà×éµ½ËüÃÇ·þÎñµÄUI»òÒµÎñÂß¼­ÀàÖУ¬µ«ÒòΪ£¨ÕýÏñÎÒÃǽ«»áÔÚ±¾ÕºóÃæ¿´µ½µÄ£©ÊÂʵÊÇÒ»¸öÄÚ²¿Ààά³ÖÒ»¸ö¾ä±úµ½ËüµÄ¸¸¶ÔÏó£¬ÌṩÁËÒ»¸öºÜºÃµÄͨ¹ýÀàºÍ×Óϵͳ±ß½çµÄµ÷Ó÷½·¨¡£
Ò»¸ö¼òµ¥µÄÀý×Ó½«Ê¹ÕâÒ»ÇбäµÃÇåÎúÃ÷È·¡£Í¬Ê±Ë¼¿¼±¾ÕÂǰ²¿Button2.javaÀý×ÓÓëÕâ¸öÀý×ӵIJîÒì¡£
//: Button2New.java
// Capturing button presses
import java.awt.*;
import java.awt.event.*; // Must add this
import java.applet.*;

public class Button2New extends Applet {
  Button
    b1 = new Button("Button 1"),
    b2 = new Button("Button 2");
  public void init() {
    b1.addActionListener(new B1());
    b2.addActionListener(new B2());
    add(b1);
    add(b2);
  }
  class B1 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      getAppletContext().showStatus("Button 1");
    }
  }
  class B2 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      getAppletContext().showStatus("Button 2");
    }
  }
  /* The old way:
  public boolean action(Event evt, Object arg) {
    if(evt.target.equals(b1))
      getAppletContext().showStatus("Button 1");
    else if(evt.target.equals(b2))
      getAppletContext().showStatus("Button 2");
    // Let the base class handle it:
    else 
      return super.action(evt, arg);
    return true; // We've handled it here
  }
  */
} ///:~

ÎÒÃǿɱȽÏÁ½ÖÖ·½·¨£¬ÀϵĴúÂëÔÚ×óÃæ×÷Ϊע½â¡£ÔÚinit()·½·¨ÀֻÓÐÒ»¸ö¸Ä±ä¾ÍÊÇÔö¼ÓÁËÏÂÃæµÄÁ½ÐУº
b1.addActionListener(new B1());
b2.addActionListener(new B2());
°´Å¥°´ÏÂʱ£¬addActionListener()֪ͨ°´Å¥¶ÔÏó±»¼¤»î¡£B1ºÍB2Àà¶¼ÊÇÖ´ÐнӿÚActionListenerµÄÄÚ²¿Àà¡£Õâ¸ö½Ó¿Ú°üÀ¨Ò»¸öµ¥Ò»µÄ·½·¨actionPerformed()£¨ÕâÒâζ×ŵ±Ê¼þ¼¤»îʱ£¬Õâ¸ö¶¯×÷½«±»Ö´ÐУ©¡£×¢ÒâactionPreformed()·½·¨²»ÊÇÒ»¸öÆÕͨʼþ£¬ËµµÃ¸üÇ¡µ±Ð©ÊÇÒ»¸öÌØÊâÀàÐ͵Äʼþ£¬ActionEvent¡£Èç¹ûÎÒÃÇÏëÌáÈ¡ÌØÊâActionEventµÄÐÅÏ¢£¬Òò´ËÎÒÃDz»ÐèÒª¹ÊÒâÈ¥²âÊÔºÍÏÂËÝÔìÐÍ×Ô±äÁ¿¡£
¶Ô±à³ÌÕßÀ´ËµÒ»¸ö×îºÃµÄʱãÊÇactionPerformed()Ê®·ÖµÄ¼òµ¥Ò×Óá£ËüÊÇÒ»¸ö¿ÉÒÔµ÷Óõķ½·¨¡£Í¬ÀϵÄaction()·½·¨±È½Ï£¬Àϵķ½·¨ÎÒÃDZØÐëÖ¸³ö·¢ÉúÁËʲôºÍÊʵ±µÄ¶¯×÷£¬Í¬Ñù£¬ÎÒÃǻᵣÐĵ÷Óûù´¡Ààaction()µÄ°æ±¾²¢ÇÒ·µ»ØÒ»¸öֵȥָÃ÷ÊÇ·ñ±»´¦Àí¡£ÔÚеÄʼþÄ£ÐÍÖУ¬ÎÒÃÇÖªµÀËùÓÐʼþ²âÊÔÍÆÀí×Ô¶¯½øÐУ¬Òò´ËÎÒÃDz»±ØÖ¸³ö·¢ÉúÁËʲô£»ÎÒÃǸոձíʾ·¢ÉúÁËʲô£¬Ëü¾Í×Ô¶¯µØÍê³ÉÁË¡£Èç¹ûÎÒÃÇ»¹Ã»ÓÐÌá³öÓÃÐµķ½·¨¸²¸ÇÀϵķ½·¨£¬ÎÒÃÇ»áºÜ¿ìÌá³ö¡£

13.16.2 ʼþºÍ½ÓÊÕÕßÀàÐÍ
ËùÓÐAWT×é¼þ¶¼±»¸Ä±ä³É°üº¬addXXXListener()ºÍremoveXXXListener()·½·¨£¬Òò´ËÌØ¶¨µÄ½ÓÊÕÆ÷ÀàÐͿɴÓÿ¸ö×é¼þÖÐÔö¼ÓºÍɾ³ý¡£ÎÒÃÇ»á×¢Òâµ½¡°XXX¡±ÔÚÿ¸ö³¡ºÏÖÐͬÑù±íʾ×Ô±äÁ¿µÄ·½·¨£¬ÀýÈ磬addFooListener(FooListener fl)¡£ÏÂÃæÕâÕűí¸ñ×ܽáÁËͨ¹ýÌṩaddXXXListener()ºÍremoveXXXListener()·½·¨£¬´Ó¶øÖ§³ÖÄÇÐ©ÌØ¶¨Ê¼þµÄÏà¹ØÊ¼þ¡¢½ÓÊÕÆ÷¡¢·½·¨ÒÔ¼°×é¼þ¡£

ʼþ£¬½ÓÊÕÆ÷½Ó¿Ú¼°Ìí¼ÓºÍɾ³ý·½·¨ Ö§³ÖÕâ¸öʼþµÄ×é¼þ

Event, listener interface and add- and remove-methods

Components supporting this event

ActionEvent
ActionListener
addActionListener( )
removeActionListener( )

Button, List, TextField, MenuItem, and its derivatives including CheckboxMenuItem, Menu, and PopupMenu

AdjustmentEvent
AdjustmentListener
addAdjustmentListener( )
removeAdjustmentListener( )

Scrollbar
Anything you create that implements the Adjustable interface

ComponentEvent
ComponentListener
addComponentListener( )
removeComponentListener( )

Component and its derivatives, including Button, Canvas, Checkbox, Choice, Container, Panel, Applet, ScrollPane, Window, Dialog, FileDialog, Frame, Label, List, Scrollbar, TextArea, and TextField

ContainerEvent
ContainerListener
addContainerListener( )
removeContainerListener( )

Container and its derivatives, including Panel, Applet, ScrollPane, Window, Dialog, FileDialog, and Frame

FocusEvent
FocusListener
addFocusListener( )
removeFocusListener( )

Component and its derivatives, including Button, Canvas, Checkbox, Choice, Container, Panel, Applet, ScrollPane, Window, Dialog, FileDialog, Frame Label, List, Scrollbar, TextArea, and TextField

KeyEvent
KeyListener
addKeyListener( )
removeKeyListener( )

Component and its derivatives, including Button, Canvas, Checkbox, Choice, Container, Panel, Applet, ScrollPane, Window, Dialog, FileDialog, Frame, Label, List, Scrollbar, TextArea, and TextField

MouseEvent (for both clicks and motion)
MouseListener
addMouseListener( )
removeMouseListener( )

Component and its derivatives, including Button, Canvas, Checkbox, Choice, Container, Panel, Applet, ScrollPane, Window, Dialog, FileDialog, Frame, Label, List, Scrollbar, TextArea, and TextField

MouseEvent[55] (for both clicks and motion)
MouseMotionListener
addMouseMotionListener( )
removeMouseMotionListener( )

Component and its derivatives, including Button, Canvas, Checkbox, Choice, Container, Panel, Applet, ScrollPane, Window, Dialog, FileDialog, Frame, Label, List, Scrollbar, TextArea, and TextField

WindowEvent
WindowListener
addWindowListener( )
removeWindowListener( )

Window and its derivatives, including Dialog, FileDialog, and Frame

ItemEvent
ItemListener
addItemListener( )
removeItemListener( )

Checkbox, CheckboxMenuItem, Choice, List, and anything that implements the ItemSelectable interface

TextEvent
TextListener
addTextListener( )
removeTextListener( )

Anything derived from TextComponent, including TextArea and TextField


¢Ý£º¼´Ê¹±íÃæÉÏÈç´Ë£¬µ«Êµ¼ÊÉϲ¢Ã»ÓÐMouseMotiionEvent£¨Êó±êÔ˶¯Ê¼þ£©¡£µ¥»÷ºÍÔ˶¯¶¼ºÏ³Éµ½MouseEventÀËùÒÔMouseEventÔÚ±í¸ñÖеÄÕâÖÖÁíÀàÐÐΪ²¢·ÇÒ»¸ö´íÎó¡£

¿ÉÒÔ¿´µ½£¬Ã¿ÖÖÀàÐ͵Ä×é¼þÖ»ÎªÌØ¶¨ÀàÐ͵ÄʼþÌṩÁËÖ§³Ö¡£ÕâÓÐÖúÓÚÎÒÃÇ·¢ÏÖÓÉÿÖÖ×é¼þÖ§³ÖµÄʼþ£¬ÈçϱíËùʾ£º

×é¼þÀàÐÍ Ö§³ÖµÄʼþ

Component type

Events supported by this component

Adjustable

AdjustmentEvent

Applet

ContainerEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Button

ActionEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Canvas

FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Checkbox

ItemEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

CheckboxMenuItem

ActionEvent, ItemEvent

Choice

ItemEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Component

FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Container

ContainerEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Dialog

ContainerEvent, WindowEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

FileDialog

ContainerEvent, WindowEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Frame

ContainerEvent, WindowEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Label

FocusEvent, KeyEvent, MouseEvent, ComponentEvent

List

ActionEvent, FocusEvent, KeyEvent, MouseEvent, ItemEvent, ComponentEvent

Menu

ActionEvent

MenuItem

ActionEvent

Panel

ContainerEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

PopupMenu

ActionEvent

Scrollbar

AdjustmentEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

ScrollPane

ContainerEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

TextArea

TextEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

TextComponent

TextEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

TextField

ActionEvent, TextEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Window

ContainerEvent, WindowEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent


Ò»µ©ÖªµÀÁËÒ»¸öÌØ¶¨µÄ×é¼þÖ§³ÖÄÄЩʼþ£¬¾Í²»±ØÔÙȥѰÕÒÈκζ«Î÷À´ÏìÓ¦ÄǸöʼþ¡£Ö»Ðè¼òµ¥µØ£º
(1) È¡µÃʼþÀàµÄÃû×Ö£¬²¢É¾µôÆäÖеġ°Event¡±×ÖÑù¡£ÔÚʣϵIJ¿·Ö¼ÓÈë¡°Listener¡±×ÖÑù¡£Õâ¾ÍÊÇÔÚÎÒÃǵÄÄÚ²¿ÀàÀïÐèҪʵÏֵĽÓÊÕÆ÷½Ó¿Ú¡£
(2) ʵÏÖÉÏÃæµÄ½Ó¿Ú£¬Õë¶ÔÏëÒª²¶»ñµÄʼþ±àд·½·¨´úÂë¡£ÀýÈ磬¼ÙÉèÎÒÃÇÏë²¶»ñÊó±êµÄÒÆ¶¯£¬ËùÒÔÐèҪΪMouseMotiionListener½Ó¿ÚµÄmouseMoved()·½·¨±àд´ú£¨µ±È»»¹±ØÐëʵÏÖÆäËûһЩ·½·¨£¬µ«ÕâÀïÓнݾ¶¿ÉÑ­£¬ÂíÉϾͻὲµ½Õâ¸öÎÊÌ⣩¡£
(3) Ϊ²½Öè2ÖеĽÓÊÕÆ÷Àà´´½¨Ò»¸ö¶ÔÏó¡£Ëæ×Ô¼ºµÄ×é¼þºÍ·½·¨Íê³É¶ÔËüµÄ×¢²á£¬·½·¨ÊÇÔÚ½ÓÊÕÆ÷µÄÃû×ÖÀï¼ÓÈëÒ»¸öǰ׺¡°add¡±¡£±ÈÈçaddMouseMotionListener()¡£

ϱíÊǶԽÓÊÕÆ÷½Ó¿ÚµÄÒ»¸ö×ܽ᣺

½ÓÊÕÆ÷½Ó¿Ú ½Ó¿ÚÖеķ½·¨

Listener interface
w/ adapter

Methods in interface

ActionListener

actionPerformed(ActionEvent)

AdjustmentListener

adjustmentValueChanged(
AdjustmentEvent)

ComponentListener
ComponentAdapter

componentHidden(ComponentEvent)
componentShown(ComponentEvent)
componentMoved(ComponentEvent)
componentResized(ComponentEvent)

ContainerListener
ContainerAdapter

componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)

FocusListener
FocusAdapter

focusGained(FocusEvent)
focusLost(FocusEvent)

KeyListener
KeyAdapter

keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)

MouseListener
MouseAdapter

mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mousePressed(MouseEvent)
mouseReleased(MouseEvent)

MouseMotionListener
MouseMotionAdapter

mouseDragged(MouseEvent)
mouseMoved(MouseEvent)

WindowListener
WindowAdapter

windowOpened(WindowEvent)
windowClosing(WindowEvent)
windowClosed(WindowEvent)
windowActivated(WindowEvent)
windowDeactivated(WindowEvent)
windowIconified(WindowEvent)
windowDeiconified(WindowEvent)

ItemListener

itemStateChanged(ItemEvent)

TextListener

textValueChanged(TextEvent)


1. ÓýÓÊÕÆ÷ÊÊÅäÆ÷¼ò»¯²Ù×÷
ÔÚÉÏÃæµÄ±í¸ñÖУ¬ÎÒÃÇ¿ÉÒÔ×¢Ò⵽һЩ½ÓÊÕÆ÷½Ó¿ÚÖ»ÓÐΨһµÄÒ»¸ö·½·¨¡£ËüÃǵÄÖ´ÐÐÊÇÎÞÇáÖØµÄ£¬ÒòΪÎÒÃǽöµ±ÐèÒªÊéÐ´ÌØÊâ·½·¨Ê±²Å»áÖ´ÐÐËüÃÇ¡£È»¶ø£¬½ÓÊÕÆ÷½Ó¿ÚÓµÓжà¸ö·½·¨£¬Ê¹ÓÃÆðÀ´È´²»Ì«ÓѺá£ÀýÈ磬ÎÒÃDZØÐëÒ»Ö±ÔËÐÐijЩÊÂÎµ±ÎÒÃÇ´´½¨Ò»¸öÓ¦ÓóÌÐòʱ¶ÔÖ¡Ìṩһ¸öWindowListener£¬ÒԱ㵱ÎÒÃǵõ½windowClosing()ʼþʱ¿ÉÒÔµ÷ÓÃSystem.exit(0)ÒÔÍ˳öÓ¦ÓóÌÐò¡£µ«ÒòΪWindowListenerÊÇÒ»¸ö½Ó¿Ú£¬ÎÒÃDZØÐëÖ´ÐÐÆäËüËùÓеķ½·¨¼´Ê¹ËüÃDz»ÔËÐÐÈκÎʼþ¡£ÕâÕæÁîÈËÌÖÑá¡£
ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÿ¸öÓµÓг¬¹ýÒ»¸ö·½·¨µÄ½ÓÊÕÆ÷½Ó¿Ú¶¼¿ÉÓµÓÐÊÊÅäÆ÷£¬ËüÃǵÄÃûÎÒÃÇ¿ÉÒÔÔÚÉÏÃæµÄ±í¸ñÖп´µ½¡£Ã¿¸öÊÊÅäÆ÷Ϊÿ¸ö½Ó¿Ú·½·¨ÌṩĬÈϵķ½·¨¡££¨WindowAdapterµÄĬÈÏ·½·¨²»ÊÇwindowClosing()£¬¶øÊÇSystem.exit(0)·½·¨¡££©´ËÍâÎÒÃÇËùÒª×öµÄ¾ÍÊÇ´ÓÊÊÅäÆ÷´¦¼Ì³Ð²¢¹ýÔØÎ¨Ò»µÄÐèÒª±ä¸üµÄ·½·¨¡£ÀýÈ磬µäÐ͵ÄWindowListenerÎÒÃÇ»áÏñÏÂÃæÕâÑùµÄʹÓá£
class MyWindowListener extends WindowAdapter {
  public void windowClosing(WindowEvent e) {
    System.exit(0);
  }
}

ÊÊÅäÆ÷µÄÈ«²¿×ÚÖ¼¾ÍÊÇʹ½ÓÊÕÆ÷µÄ´´½¨±äµÃ¸ü¼Ó¼ò±ã¡£
µ«ËùνµÄ¡°ÊÊÅäÆ÷¡±Ò²ÓÐÒ»¸öȱµã£¬¶øÇÒ½ÏÄÑ·¢¾õ¡£¼Ù¶¨ÎÒÃÇÏóÉÏÃæÄÇÑùдһ¸öWindowAdapter£º
class MyWindowListener extends WindowAdapter {
  public void WindowClosing(WindowEvent e) {
    System.exit(0);
  }
}

±íÃæÉÏÒ»ÇÐÕý³££¬µ«Êµ¼ÊûÓÐÈκÎЧ¹û¡£Ã¿¸öʼþµÄ±àÒëºÍÔËÐж¼ºÜÕý³£¡ª¡ªÖ»Êǹرմ°¿Ú²»»áÍ˳ö³ÌÐò¡£Äú×¢Òâµ½ÎÊÌâÔÚÄÄÀïÂð£¿ÔÚ·½·¨µÄÃû×ÖÀÊÇWindowClosing()£¬¶ø²»ÊÇwindowClosing()¡£´óСдµÄÒ»¸ö¼òµ¥Ê§Îó¾Í»áÔì³ÉÒ»¸öÕ¸Ðµķ½·¨¡£µ«ÊÇ£¬Õâ²¢·ÇÎÒÃǹرմ°¿Úʱµ÷Óõķ½·¨£¬ËùÒÔµ±È»Ã»ÓÐÈκÎЧ¹û¡£
13.16.3 ÓÃJava 1.1 AWTÖÆ×÷´°¿ÚºÍ³ÌÐòƬ
ÎÒÃǾ­³£¶¼ÐèÒª´´½¨Ò»¸öÀ࣬ʹÆä¼È¿É×÷Ϊһ¸ö´°¿Úµ÷Óã¬Òà¿É×÷Ϊһ¸ö³ÌÐòƬµ÷Óá£Îª×öµ½ÕâÒ»µã£¬Ö»ÐèΪ³ÌÐòƬ¼òµ¥µØ¼ÓÈëÒ»¸ömain()¼´¿É£¬ÁîÆäÔÚÒ»¸öFrame£¨Ö¡£©Àï¹¹½¨³ÌÐòƬµÄÒ»¸öʵÀý¡£×÷Ϊһ¸ö¼òµ¥µÄʾÀý£¬ÏÂÃæÈÃÎÒÃÇÀ´¿´¿´ÈçºÎ¶ÔButton2New.java×÷Ò»·¬Ð޸ģ¬Ê¹ÆäÄÜͬʱ×÷ΪӦÓóÌÐòºÍ³ÌÐòƬʹÓãº
//: Button2NewB.java
// An application and an applet
import java.awt.*;
import java.awt.event.*; // Must add this
import java.applet.*;

public class Button2NewB extends Applet {
  Button
    b1 = new Button("Button 1"),
    b2 = new Button("Button 2");
  TextField t = new TextField(20);
  public void init() {
    b1.addActionListener(new B1());
    b2.addActionListener(new B2());
    add(b1);
    add(b2);
    add(t);
  }
  class B1 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      t.setText("Button 1");
    }
  }
  class B2 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      t.setText("Button 2");
    }
  }
  // To close the application:
  static class WL extends WindowAdapter {
    public void windowClosing(WindowEvent e) {
      System.exit(0);
    }
  }
  // A main() for the application:
  public static void main(String[] args) {
    Button2NewB applet = new Button2NewB();
    Frame aFrame = new Frame("Button2NewB");
    aFrame.addWindowListener(new WL());
    aFrame.add(applet, BorderLayout.CENTER);
    aFrame.setSize(300,200);
    applet.init();
    applet.start();
    aFrame.setVisible(true);
  }
} ///:~

ÄÚ²¿ÀàWLºÍmain()·½·¨ÊǼÓÈë³ÌÐòƬµÄΨһÁ½¸öÔªËØ£¬³ÌÐòƬʣÓàµÄ²¿·ÖÔòÔ­·âδ¶¯¡£ÊÂʵÉÏ£¬ÎÒÃÇͨ³£½«WLÀàºÍmain()·½·¨×öÒ»½áСµÄ¸Ä½ø¸´ÖƺÍÕ³Ìùµ½ÎÒÃÇ×Ô¼ºµÄ³ÌÐòƬÀÇë¼Çס´´½¨ÄÚ²¿Ààʱͨ³£ÐèÒªÒ»¸öÍⲿÀàÀ´´¦ÀíËü£¬ÐγÉËü¾²Ì¬µØÏû³ýÕâ¸öÐèÒª£©¡£ÎÒÃÇ¿ÉÒÔ¿´µ½ÔÚmain()·½·¨À³ÌÐòƬÃ÷È·µØ³õʼ»¯ºÍ¿ªÊ¼£¬ÒòΪÔÚÕâ¸öÀý×ÓÀïä¯ÀÀÆ÷²»ÄÜΪÎÒÃÇÓÐЧµØÔËÐÐËü¡£µ±È»£¬Õâ²»»áÌṩȫ²¿µÄä¯ÀÀÆ÷µ÷ÓÃstop()ºÍdestroy()µÄÐÐΪ£¬µ«¶Ô´ó¶àÊýµÄÇé¿ö¶øÑÔËü¶¼ÊǿɽÓÊܵġ£Èç¹ûËü±ä³ÉÒ»¸öÂé·³£¬ÎÒÃÇ¿ÉÒÔ£º
(1) ʹ³ÌÐòƬ¾ä±úΪһ¸ö¾²Ì¬ÀࣨÒÔ´úÌæ¾Ö²¿¿É±äµÄmain()£©£¬È»ºó£º
(2) ÔÚÎÒÃǵ÷ÓÃSystem.exit()֮ǰÔÚWindowAdapter.windowClosing()Öе÷ÓÃapplet.stop()ºÍapplet.destroy()¡£
×¢Òâ×îºóÒ»ÐУº
aFrame.setVisible(true);
ÕâÊÇJava 1.1 AWTµÄÒ»¸ö¸Ä±ä¡£show()·½·¨²»ÔÙ±»Ö§³Ö£¬¶øsetVisible(true)ÔòÈ¡´úÁËshow()·½·¨¡£µ±ÎÒÃÇÔÚ±¾ÕºóÃæ²¿·ÖѧϰJava Beansʱ£¬ÕâЩ±íÃæÉÏÒ×ÓڸıäµÄ·½·¨½«»á±äµÃ¸ü¼ÓµÄºÏÀí¡£
Õâ¸öÀý×ÓͬÑù±»Ê¹ÓÃTextFieldÐ޸Ķø²»ÊÇÏÔʾµ½¿ØÖÆÌ¨»òä¯ÀÀÆ÷״̬ÐÐÉÏ¡£ÔÚ¿ª·¢³ÌÐòʱÓÐÒ»¸öÏÞÖÆÌõ¼þ¾ÍÊdzÌÐòƬºÍÓ¦ÓóÌÐòÎÒÃǶ¼±ØÐë¸ù¾ÝËüÃǵÄÔËÐÐÇé¿öÑ¡ÔñÊäÈëºÍÊä³ö½á¹¹¡£
ÕâÀïչʾÁËJava 1.1 AWTµÄÆäËüСµÄй¦ÄÜ¡£ÎÒÃDz»ÔÙÐèҪȥʹÓÃÓдíÎóÇãÏòµÄÀûÓÃ×Ö·û´®Ö¸¶¨BorderLayout¶¨Î»µÄ·½·¨¡£µ±ÎÒÃÇÔö¼ÓÒ»¸öÔªËØµ½Java 1.1°æµÄBorderLayoutÖÐʱ£¬ÎÒÃÇ¿ÉÒÔÕâÑùд£º
aFrame.add(applet, BorderLayout.CENTER);
ÎÒÃǶÔλÖù涨һ¸öBorderLayoutµÄ³£Êý£¬ÒÔʹËüÄÜÔÚ±àÒëʱ±»¼ìÑ飨¶ø²»ÊǶÔÀϵĽṹÇÄÇĵØ×ö²»ºÏÊʵÄÊ£©¡£ÕâÊÇÒ»¸öÏÔÖøµÄ¸ÄÉÆ£¬²¢ÇÒ½«ÔÚÕâ±¾ÊéµÄÓàϲ¿·Ö´óÁ¿µØÊ¹Óá£

2. ½«´°¿Ú½ÓÊÕÆ÷±ä³ÉÄäÃûÀà
ÈκÎÒ»¸ö½ÓÊÕÆ÷Àà¶¼¿É×÷Ϊһ¸öÄäÃûÀàÖ´ÐУ¬µ«ÕâÒ»Ö±ÓиöÒâÍ⣬ÄǾÍÊÇÎÒÃÇ¿ÉÄÜÐèÒªÔÚÆäËü³¡ºÏʹÓÃËüÃǵŦÄÜ¡£µ«ÊÇ£¬´°¿Ú½ÓÊÕÆ÷ÔÚÕâÀï½ö×÷Ϊ¹Ø±ÕÓ¦ÓóÌÐò´°¿ÚÀ´Ê¹Óã¬Òò´ËÎÒÃÇ¿ÉÒÔ°²È«µØÖÆÔìÒ»¸öÄäÃûÀࡣȻºó£¬main()ÖеÄÏÂÃæÕâÐдúÂ룺
aFrame.addWindowListener(new WL());
»á±ä³É£º
aFrame.addWindowListener(
  new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
      System.exit(0);
    }
  });

ÕâÓÐÒ»¸öÓ