2. Èç¹û½çÃæÒѾ³õʼ»¯£¬ µäÐÍÇé¿öÈçÔÚ¹¹ÔìÆ÷ÖУ¬»òÕßÊǸü»»½çÃæµÄ²Ëµ¥ÏÄÇô³ýÁË
ÉÏÊöµÄµ÷ÓÃÀ´ÐÞ¸ÄĬÈÏÍâ¹ÛÍ⣬»¹ÐèÒª¸üÐÂËùÓÐ×é¼þµÄÏÔʾ£¬Ò»°ãÊǸüÐÂ×î¶¥²ãµÄ£¬ÀýÈçJFrame£¬JApplet£¬JDialogµÈ¡£ÕâÑùµÄ´úÂëÆ¬¶ÎÈçÏ£º javax.swing.SwingUtilities.updateComponentTreeUI(this);
3. ×îºó£¬ÒòΪ²¢·Çÿ¸ö½çÃæ¶¼ÄÜÕý³£ÏÔʾ£¬ËùÒÔÎñ±ØÒªÔÚ·¢ÏÖÓ¦ÓÃÐÂÖ÷Ìâʧ°Üʱ£¬»Ö¸´µ½
ϵͳĬÈÏµÄ¿çÆ½Ì¨Íâ¹ÛÉÏ£¬·ñÔò×îºóµÄ½çÃæ½«»áÍêÈ«ÎÞ·¨ÏÔʾ£¬ÕâÒ²ÊÇÒ»¸ö´ó¼É£¬¹À¼ÆÓû§Óöµ½ÕâÖÖÇé¿öÒ»´Î¶¼»á¶ÔÄã×öµÄÈí¼þ´ÓÐÄÀïÃæ´ò¸ö´óºìµÄX¡£
×îºó£¬»ã×ÜÕâЩ²½Ö裬ÄÇô¸ü¸ÄÒ»¸öÈí¼þÍâ¹ÛµÄÍêÕû´úÂ룬ÎÒÃÇ˳±ã°ÑËü·Åµ½Ç°ÃæÌáµ½µÄMatisseJAppletµÄÀý×ÓÖУ¬À´½â¾öÏÔʾ³öÏÖµÄÎÊÌ⣬ÔÚÀý×Ó´úÂëÖÐÌí¼ÓÒ»¸ö¹¹ÔìÆ÷£º public MatisseJApplet() { try {
javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
javax.swing.SwingUtilities.updateComponentTreeUI(this);
System.out.println(javax.swing.UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
// TODO Auto-generated catch block e.printStackTrace(); try {
javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getCrossPlatformLookAndFeelClassName());
javax.swing.SwingUtilities.updateComponentTreeUI(this); } catch (Exception e1) {
// TODO Auto-generated catch block e1.printStackTrace(); } } }
´ËʱÔÙÀ´ÔËÐÐMatisseJApplet£¬¼´¿ÉµÃµ½ºÍͼ18.23ÏàͬµÄÏÔʾ½á¹ûÁË¡£
18.3.4 ¿ª·¢UDP¾ÖÓòÍøÁÄÌì×ÀÃæÓ¦ÓÃ
Ç°ÃæµÄÀý×Ó£¬¶¼ÊÇ¿ª·¢µÄApplet£¬ÐèÒª·ÅÔÚä¯ÀÀÆ÷ÖвÅÄÜÔËÐУ¬È»¶øÊµ¼ÊÏîÄ¿Öо³£»áÓõ½µÄÊǶÀÁ¢ÔËÐеÄ×ÀÃæÓ¦Óá£ÄÇô½ÓÏÂÀ´£¬ÎÒÃÇÀ´¿ª·¢Ò»¸ö¼òµ¥µÄ¾ÖÓòÍøUDP¶à²¥ÁÄÌìµÄСӦÓ㬲¢Ìṩ»»·ôµÄ¹¦ÄÜ¡£ ÔÚ½øÐÐÕâ¸öСÏîÄ¿µÄ¿ª·¢Ö®Ç°£¬ÓбØÒªÏȽéÉÜÒ»µãUDP¶à²¥±à³Ì·½ÃæµÄ֪ʶ¡£´ó¼Ò¿ÉÒÔ´ò¿ªJavadocÖÐÎÄÎĵµ£¬²é¿´ÀàMulticastSocketµÄÎĵµ½éÉÜ£¬ÓбȽÏÏêϸµÄʾÀý´úÂ룬ÈçÏÂËùʾ£¨ÕªÂ¼£¬Óи͝£©£º
¶à²¥Êý¾Ý±¨Ì×½Ó×ÖÀàÓÃÓÚ·¢ËͺͽÓÊÕ IP ¶à²¥°ü¡£MulticastSocket ÊÇÒ»ÖÖ (UDP)
41
Áõ³¤¾¼Öø
DatagramSocket£¬Ëü¾ßÓмÓÈë Internet ÉÏÆäËû¶à²¥Ö÷»úµÄ¡°×顱µÄ¸½¼Ó¹¦ÄÜ¡£
¶à²¥×éͨ¹ý D Àà IP µØÖ·ºÍ±ê×¼ UDP ¶Ë¿ÚºÅÖ¸¶¨¡£D Àà IP µØÖ·ÔÚ 224.0.0.0 ºÍ 239.255.255.255 µÄ·¶Î§ÄÚ£¨°üÀ¨Á½Õߣ©¡£µØÖ· 224.0.0.0 ±»±£Áô£¬²»Ó¦Ê¹Óá£
¿ÉÒÔͨ¹ýÊ×ÏÈʹÓÃËùÐè¶Ë¿Ú´´½¨ MulticastSocket£¬È»ºóµ÷Óà joinGroup(InetAddress groupAddr) ·½·¨À´¼ÓÈë¶à²¥×飺
// ¼ÓÈëÒ»¸ö¶à²¥×é²¢·¢³ö´òÕкôµÄÐÅÏ¢ ...
String msg = \ÄãºÃ£¡\
InetAddress group = InetAddress.getByName(\ MulticastSocket s = new MulticastSocket(6789);//¶Ë¿Ú s.joinGroup(group);
DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), group, 6789); s.send(hi);//·¢ËÍ
// »ñÈ¡×éµÄÏìÓ¦ÐÅÏ¢!
byte[] buf = new byte[1000];
DatagramPacket recv = new DatagramPacket(buf, buf.length); s.receive(recv);//½ÓÊÕ ... // OK, ÁÄÌì½áÊø£¬À뿪×é... s.leaveGroup(group);
½«ÏûÏ¢·¢Ë͵½¶à²¥×éʱ£¬¸ÃÖ÷»úºÍ¶Ë¿ÚµÄËùÓÐÔ¤¶¨½ÓÊÕÕß¶¼½«½ÓÊÕµ½ÏûÏ¢£¨ÔÚÊý¾Ý°üµÄÉú´æÊ±¼ä·¶Î§ÄÚ£¬Çë²ÎÔÄÏÂÎÄ£©¡£Ì×½Ó×Ö²»±Ø³ÉΪ¶à²¥×éµÄ³ÉÔ±¼´¿ÉÏòÆä·¢ËÍÏûÏ¢¡£
µ±Ì×½Ó×ÖÔ¤¶¨¶à²¥×é/¶Ë¿Úʱ£¬Ëü½«½ÓÊÕÓɸÃ×é/¶Ë¿ÚµÄÆäËûÖ÷»ú·¢Ë͵ÄÊý¾Ý±¨£¬Ïñ¸Ã×éºÍ¶Ë¿ÚµÄËùÓÐÆäËû³ÉÔ±Ò»Ñù¡£Ì×½Ó×Öͨ¹ý leaveGroup(InetAddress addr) ·½·¨·ÅÆú×éÖеijÉÔ±×ʸñ¡£¶à¸ö MulticastSocket ¿ÉÒÔͬʱԤ¶¨¶à²¥×éºÍ¶Ë¿Ú£¬²¢ÇÒ¶¼»á½ÓÊÕµ½×éÊý¾Ý±¨¡£
ͬʱ£¬²»ÔÊÐí applet ʹÓöಥÌ×½Ó×Ö¡£ÕâÖ÷ÒªÊÇΪÁ˰²È«ÐÔ×ÅÏë¡£ ÄÇô£¬¿ª·¢ÁÄÌìµÄÓ¦Óã¬Ò»°ãÀ´ËµÖÁÉÙ¶îÍâÐèÒªÒ»¸öỊ̈߳¬¾ÍÊǽÓÊÕ·þÎñÆ÷·¢À´µÄÏûÏ¢²¢½øÐÐÏÔʾ£¬ºËÐÄ´úÂë¾ÍÈçÉÏÎĵµÖеĴúÂëʾÀýÖжÎËùʾ¡£Õâ¸öÏß³ÌÈçÏÂËùʾ£º class ReaderThread extends Thread {
public void run() { while(socket != null) { try { byte[] buf = new byte[1024]; DatagramPacket recv = new DatagramPacket(buf, buf.length); socket.receive(recv); textArea.append(new String(recv.getData())); }catch(Exception ex) { } } }
42
Áõ³¤¾¼Öø
} ÓÐÁËÕâЩ»ù´¡ÖªÊ¶£¬ÎÒÃǾͿÉÒÔ¿¼ÂǽçÃæµÄÉèÖÃÁË£¬ÔÐ͵ĽçÃæÉè¼ÆÈçͼ18.25Ëùʾ£¬¸ÃÉè¼ÆÍ¼Ê¹ÓÃMicrosoft VisioÈí¼þ»æÖÆ¡£ÆäÖÐÎļþ²Ëµ¥Ï£¬°üÀ¨£º½øÈëCtrl + E£¬À뿪Ctrl +
£»²Ù×÷²Ëµ¥Ï°üÀ¨ÇåD£¬·Ö¸ô·û£¬Í˳öCtrl£«QÕâËĸö²Ëµ¥ÏעÒâºóÃæµÄÊÇ¿ì½Ý¼ü×éºÏ£©
£»°ï¿Õ¼Ç¼ºÍ¸ü¸Ä½çÃæ£¨ÏÂÃæ°üº¬Èý¸öµ¥Ñ¡Å¥×Ӳ˵¥£ºOffice2003£»ÏµÍ³Íâ¹Û£»Ä¬ÈÏÍâ¹Û£©
Öú²Ëµ¥Ï°üÀ¨£º°ïÖúÄÚÈݺ͹ØÓÚ¡£³ýÁ˰ïÖú²Ëµ¥ÏîºÍ¸ü¸Ä½çÃæ²Ëµ¥Ïî¼°Æä×Ӳ˵¥Í⣬ÆäËü²Ëµ¥Ïî¶¼ÓжÔÓ¦µÄͼ±ê£¬²Î¼ûͼ18.26¡£
ͼ18.25 ÁÄÌì½çÃæÔÐÍÉè¼Æ
½çÃæµÄÃÀ»¯·½Ã棬Ê×ÏÈʹÓÃÁË¿ªÔ´µÄOfficeLnFs£¨¼û²Î¿¼×ÊÁÏÁ´½Ó£©£¬Õâ¸öÍâ¹Û£¬Í¬Ê±ÌṩÁËÈý¸ö·ç¸ñµÄ½çÃæ£ºOffice 2003£¬Office XP£¬Visual Studio 2005¡£ÏÂÔØºóµÃµ½µÄÀà¿âÎļþÃûÊÇOfficeLnFs_2.7.jar¡£ÏÂÃæÊǹٷ½ÍøÕ¾Ê¹ÓÃÕâ¸öÍâ¹ÛµÄʾÀý´úÂ룺
try {
UIManager.setLookAndFeel(\);
//UIManager.setLookAndFeel(\.OfficeXPLookAndFeel\
//UIManager.setLookAndFeel(\eel\
} catch (Exception e) {
System.err.println(\went wrong!\); }
Æä´ÎÎÒÃÇÊÕ¼¯ÁËһЩͼ±ê£¬Èçͼ18.26Ëùʾ¡£´ÓÉϵ½ÏÂÒÀ´Î¶ÔÓ¦¼¸¸ö¹¦ÄÜ£ºÇå¿ÕÀúÊ·£¬Á¬½Ó£¬¶Ï¿ª£¬Í˳ö£¬´°Ìåͼ±ê£¬ÒÔ¼°·¢ËÍ¡£ÕâЩͼ±ê´æ·ÅÔÚsrc/icons/Ŀ¼Ï¡£
43
Áõ³¤¾¼Öø
ͼ18.26 ½çÃæÓõ½µÄͼ±ê
ÏÖÔÚÔ¤±¸ÖªÊ¶ÒѾ½éÉܵIJ¶àÁË£¬¿ÉÒÔ¿ªÊ¼¿ª·¢ÁË¡£ÎÒÃÇ¿ª·¢µÄ¹ý³ÌÊÇ£¬ÏȰѽçÃæÉèÖúã¬×îºó¼ÓÈëʼþºÍÆäËü¹¦ÄÜ´úÂ롣н¨Ò»¸öJavaÏîÄ¿£¬ÃûΪUDPChat£¬Í¸ÊÓͼµ±È»»¹ÊÇÇл»µ½MyEclipse Swing/Matisse¡£ËæºóÆô¶¯Ð½¨ Matisse FormÏòµ¼£¬²¢ÔÚͼ18.14µÄ´°ÌåÁбíÖУ¬Ñ¡ÖÐJFrame£¬²¢½«ÀàÃû¶¨ÎªUDPChatFrame¡£È»ºó°ÑÏÂÔØµÄÎļþOfficeLnFs_2.7.jar¸´ÖƵ½ÏîÄ¿µÄlibĿ¼Ï£¬²¢¼ÓÈëµ½ÏîÄ¿µÄBuild PathÖС£ËæºóÇл»µ½´°ÌåÉè¼ÆÆ÷UDPChatFrame.form£¬µã»÷OutlineÊÓͼÖеÄ[JFrame]£¬²¢ÔÚPropertiesÊÓͼÖÐÐÞ¸ÄÒÔÏÂÊôÐÔΪĿ±êÖµ£ºdefaultCloseOperation£ºDO_NOTHING£»title£º¶àµã´«ËÍÊý¾ÝIPµØÖ··¶Î§: 224.0.0.1 ~ 239.255.255.255¡£ÕâÁ½¸öÊôÐÔ·Ö±ðÉèÖÃÁË´°¿ÚµÄ¹Ø±¨ÁÄÌì³ÌÐò -
±Õ²Ù×÷¨D¨D¹Ø±Õʱ²»²ÉÈ¡Èκζ¯×÷£¬ÒÔ¼°´°¿ÚµÄ±êÌ⡣Ȼºó³£¼ûµÄ´°¿Ú£¬¶¼ÓÐÒ»¸öͼ±ê£¬Î»ÓÚ×î×óÉϽǣ¬ÀýÈçMyEclipseµÄÄǸöÏñ8Ò»ÑùµÄͼ±ê£¬ÎÒÃÇÕâ¸ö´°¿ÚÒ²ÒªÉèÖ㬲»¹ýºÜÒź¶Ö»ÄÜͨ¹ý´úÂëÉèÖã¬Ê¹ÓÃsetIconImage(Image)·½·¨À´ÉèÖã¬ÈçÏ´ÖÌåËùʾÔÚ¹¹ÔìÆ÷Àï¼ÓÈëÏÂÃæµÄ´úÂ룺 /** Creates new form UDPChatFrame */ public UDPChatFrame() { initComponents();
setIconImage(new javax.swing.ImageIcon(getClass().getResource( \ }
ImageIconÕâ¸öÀàÊÇרÃÅÓÃÀ´¼ÓÔØÍ¼±êµÄ£¬¶ÁÕß¿ÉÒԲ鿴ÖÐÎÄJavaDocÎĵµÀ´Á˽â¸ü¶à˵Ã÷¡£ÀýÈçÒª¸øÒ»¸ö°´Å¥ÉèÖÃÏÔʾµÄͼ±ê£¬¿ÉÒÔÓÃÕâÑùµÄ´úÂëÆ¬¶Î£ºjButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource(\ Íê³ÉÁË´°¿ÚµÄÏÔʾÉèÖú󣬿ªÊ¼´î½¨Èçͼ18.25Ëùʾ³ý²Ëµ¥ÍâµÄÖ÷Òª½çÃæ¡£µã»÷Matisse PaletteÊÓͼÖеÄSwingControlsĿ¼ÏµĿؼþLabel£¬Button£¬Text FieldÕ⼸¸ö×é¼þ£¬¼´¿É´´½¨³ýÖÐÑëÎı¾ÏÔÊ¾ÇøÖ®ÍâµÄ½çÃæ¡£¶øÓÉÓÚSwing×é¼þĬÈÏÇé¿öϲ»»á¹ö¶¯£¬Òò´ËÎÒÃÇÒªÔÚSwingContainersÏÂÃæ£¬ÏÈÑ¡ÖÐÒ»¸öScroll Pane·ÅÈëÉè¼ÆÆ÷ÕýÖУ¬Ìṩ¹ö¶¯¹¦ÄÜ£¬°ÑËüµÄ´óСÌõ¼þ³ÉÕ¼ÓÃÃæ»ý×î´ó£»È»ºóÔÙ´ÓSwingControlsÏÂÑ¡ÖпؼþText Area£¬½«Ëü·ÅÖõ½¸Õ²ÅµÄ¹ö¶¯Ãæ°åµÄÖÐÑë¡£ÔÚÕâЩ×é¼þÖУ¬·¢ËͰ´Å¥µÄÊôÐԵıà¼ÓеãÂé·³£¬ÒòΪÐèÒªÉèÖð´Å¥ÏÔʾµÄͼ±êºÍÖú¼Ç·û¡£ÉèÖÃiconµÄ¶Ô»°¿òÈçͼ18.27Ëùʾ£¬¹Ø¼üµãÔÚÓÚµã»÷iconÊôÐÔÓÒ²àµÄ°´Å¥À´´ò¿ªÍ¼±êä¯ÀÀ¶Ô»°¿ò£¬½Ó×ÅÑ¡Öе¥Ñ¡Å¥Image Within Project£¬ÔÚPackageÓÒ²àÑ¡Öаüº¬Í¼Æ¬µÄ°ü£¨¼È¿ÉÒÔÊÇÔ´´úÂëĿ¼Ïµģ¬Ò²¿ÉÒÔÊÇJARÎļþÖеģ©£¬È»ºó´ÓFileÓÒ²àµÄÏÂÀ¿òÖÐÑ¡ÖÐÐèҪʹÓõÄͼƬ£¬Í¬Ê±Ï²à»áÏÔʾͼƬµÄÔ¤ÀÀ£¬Ëæºóµã»÷OK°´Å¥¹Ø±Õ¶Ô»°¿ò¼´¿ÉÍê³ÉͼƬµÄÑ¡Ôñ¡£Í¼18.27ÖÐͬʱҲչʾÁËÊôÐÔmnemonic£¨Öú¼Ç·û£©ºÍtextµÄȡֵÉèÖ㬷ֱðΪSºÍ·¢ËÍ(S)¡£ËæºóÐèÒªÐ޸ĸ÷¸ö×é¼þµÄ±äÁ¿Ãû£¬Ê¹Ö®±äµÃ¸ü¿É¶ÁһЩ¡£ÕâÑù½çÃæÍê³ÉʱµÄÉè¼ÆÈçͼ18.28Ëùʾ¡£ ËæºóÎÒÃÇÀ´´î½¨²Ëµ¥¡£´î½¨²Ëµ¥µÄµÚÒ»²½£¬Êǵã»÷Matisse PaletteÊÓͼÖеÄλÓÚSwingMenusĿ¼ÏµÄ
44
MenuBar£¬½«Æä·Åµ½½çÃæµÄ×î¶¥²¿¡£´Ëʱ¿ÉÒÔ¿´µ½Ä¬ÈÏ´øÁËÁ½¸ö
Áõ³¤¾¼Öø
²Ëµ¥ÏFileºÍEdit£¬ºÜÏÔÈ»ÎÒÃÇÒª¶Ô´Ë×öÐ޸쬽«Æä±êÇ©£¨textÊôÐÔ£©·Ö±ðÐÞ¸ÄΪÎļþ(F)ºÍ²Ù×÷(O)£¬Öú¼Ç·û·Ö±ðÉèÖÃΪFºÍO¡£Ëæºóµã»÷MenuÏ½«Æä·ÅÖõ½²Ëµ¥ÌõµÄ×îÓҲ࣬ȻºóÐ޸ıêÇ©ºÍÖú¼Ç·û£¬Éú³É²Ëµ¥°ïÖú(H)¡£Ëæºóµã»÷Menu Item£¬½«Æä·ÅÖõ½²Ëµ¥ÉÏ£¬»á×Ô¶¯Ìí¼ÓΪ×Ӳ˵¥ÏȻºóÐèÒªÉèÖÃiconºÍtextÊôÐÔ£¬¶ø¿ì½Ý¼üÔòÊÇͨ¹ýµã»÷acceleratorÊôÐÔÓÒ²àµÄ°´Å¥À´´ò¿ª¿ì½Ý¼ü¶Ô»°¿ò£¬²Î¿¼Í¼18.29¡£ÔÚͼÖеÄKey StrokeÓÒ²àÊäÈë¿ò£¬°´ÏÂÄúÏ£ÍûµÄ¿ì½Ý¼ü×éºÏ£¬¿ÉÒÔÊǵ¥¸ö¼ü£¬ÀýÈçF1£¬Ò²¿ÉÒÔÊǶà¸ö¼üµÄ×éºÏ£¨ÀýÈçÏȰ´ÏÂCtrl¼ü£¬È»ºó²»ËÉ¿ª¼üÅ̺óÔÙ°´ÏÂE¼ü£©£¬×îºóµã»÷OK°´Å¥¹Ø±Õ¶Ô»°¿ò£¬¼´¿ÉÍê³É¿ì½Ý¼üµÄÉèÖá£Òª¸ø²Ëµ¥À¸Ìí¼Ó·Ö¸ô·û£¬µã»÷ͼ±êSeparator¼´¿ÉÌí¼Ó¡£Ê¹ÓÃÀàËÆµÄ¹ý³Ì´î½¨ÆäËü²Ëµ¥¡£ÓÐÒ»¸öµØ·½ÐèÒªÌØ±ð×¢Ò⣬ÄǾÍÊǸü¸Ä½çÃæÌí¼ÓµÄʱºòÒªÓò˵¥(Menu)£¬²»ÄÜÓò˵¥Ïî(MenuItem)£¬ÆäÏÂÊôµÄÈý¸ö×Ӳ˵¥ÏîÐèҪʹÓÃMenu Item / Radio ButtonÀ´´î½¨¡£²Ëµ¥´´½¨Ê±£¬²»ÒªÍüÁËÐ޸ıäÁ¿ÃûΪÓÐÒâÒåµÄȡֵ¡£
ͼ18.27ÉèÖÃͼ±êÊôÐÔ¶Ô»°¿ò
45
Áõ³¤¾¼Öø
Ïà¹ØÍÆ¼ö£º