// /* * guestbook.java - 6 Mar 1996 - Version 1.05b (6 Mar 1996) * Copyright 1996 by William Giel, L.S. * E-mail: rvdi@usa.nai.net * WWW: http://www.nai.net/~rvdi/home.htm */ import java.awt.*; import java.applet.*; import java.lang.*; import java.io.*; import java.net.*; import java.util.*; class Send // ¸ÞÀÏ ¹ß¼ÛÀ» ´ã´çÇϴ Ŭ·¡½º { String result = ""; String lastline; short port = 25; // ¸ÞÀÏ Æ÷Æ® DataInputStream in; String mailhost, receiver, sender; public Send( String host,String recvr) { mailhost=host; receiver=recvr; sender=recvr; // ¹ß½ÅÀÚ°¡ ¼ö½ÅÀÚ¿Í °°À½¿¡ À¯ÀÇÇÏÀÚ. } void expect(String expected, String msg) throws Exception { // SMTP ¼­¹ö·ÎºÎÅÍ expected °ªÀ» ±â´Ù¸°´Ù. lastline = in.readLine(); if (!lastline.startsWith(expected)) // expected ½ºÆ®¸µÀÌ Æ÷ÇԵǾî ÀÖÁö ¾ÊÀ¸¸é ¿¹¿Ü¸¦ throwÇÑ´Ù. throw new Exception(msg + ":" + lastline); while (lastline.startsWith(expected + "-")) // expected ½ºÆ®¸µ¿¡ -°¡ ºÙ¾î ÀÖÀ¸¸é °è¼ÓÇؼ­ ´ÙÀ½ ÁÙÀ» ÀоîµéÀδÙ. lastline = in.readLine(); } /* **************** ¸ÞÀÏ Àü¼Û ¼ø¼­¿¡ ´ëÇÏ¿© ***************** * * Send Ŭ·¡½ºÀÇ mailMessage µµ±¸´Â TCP/SMTP ½ºÆå(RFC 821 Âü°í)¿¡ µû¶ó * 25¹ø Æ÷Æ®¸¦ »ç¿ëÇÏ¿© ¸ÞÀÏ ¼­¹ö¿¡ ¼ÒÄÏÀ» ¿¬°áÇÑ´Ù. * ¸ÕÀú mailMessage´Â '220'À» ±â´Ù¸°´Ù. 220Àº ¼­ºñ½º°¡ ÁغñµÇ¾ú´Ù´Â ¸Þ½ÃÁöÀÌ´Ù. * 220À» ¹ÞÀº ´ÙÀ½¿¡´Â Áö¿ª È£½ºÆ®ÀÇ ÀÎÅÍ³Ý ÁÖ¼Ò helohost¸¦ ±¸ÇÏ¿© * ¼ÒÄÏÀ» ÅëÇÏ¿© "HELO helohost\r\n" ¸Þ½ÃÁö¸¦ Àü¼ÛÇÑ´Ù. * ±×·¯¸é ÀÌ ¸Þ½ÃÁö¸¦ ¹ÞÀº SMTP ¼­¹ö°¡ '250'À» µÇµ¹·ÁÁØ´Ù. * 250Àº ¸ÞÀÏÀ» º¸³»µµ ÁÁ´Ù´Â ½Â³«(OK)ÀÇ ÀǹÌÀÌ´Ù. * ±×·¯¸é mailMessage´Â "MAIL FROM: sender\r\n" ¸Þ½ÃÁö¸¦ Àü¼ÛÇÏ°í * ´Ù½Ã 250ÀÌ µ¹¾Æ¿À¸é ´Ù½Ã "RECPT TO: receiver\r\n" ¸Þ½ÃÁö¸¦ Àü¼ÛÇÏ°í 250À» ±â´Ù¸°´Ù. * ÀÌ ¾ÖÇø´¿¡¼­´Â ¼ö½ÅÀÚ¿Í ¹ß½ÅÀÚ°¡ °°À½¿¡ À¯ÀÇÇÏÀÚ. »ý°¢ÇØ º¸¸é ´ç¿¬ÇÏ´Ù. * ±× ´ÙÀ½¿¡´Â "DATA\r\n" ¸Þ½ÃÁö¸¦ Àü¼ÛÇÏ°í À̹ø¿¡´Â '354'¸¦ ±â´Ù¸°´Ù. * DATA ´ÙÀ½¿¡ º¸³¾ °ÍÀº "Subject: subject (helohost)" Çʵå¿Í ÇϳªÀÇ ºó ÁÙ("\r\n\r\n")·Î * ½ÃÀÛÇϴ ǥÁØ ÅؽºÆ® ¸Þ½ÃÁöÀÌ´Ù. RFC 822¿¡ ¾ç½ÄÀÌ Á¤ÀǵǾî ÀÖ´Ù. * ºó ÁÙ ´ÙÀ½¿¡´Â ½ÇÁ¦ ÅؽºÆ®°¡ µé¾î°¡´Âµ¥ mailMessage¿¡¼­´Â ¹æ¹®ÀÚÀÇ À̸§(¼±ÅÃÀû)°ú * ¹æ¹®ÀÚÀÇ E-Mail ÁÖ¼Ò(¼±ÅÃÀû), ±×¸®°í TextArea¿¡ ÀûÀº ÁÖ¼®, Á¢¼ÓÇÑ ³¯Â¥¿Í * ½Ã°£À¸·Î ±¸¼ºµÈ´Ù. * ÅؽºÆ® ¸Þ½ÃÁö¸¦ Àü¼ÛÇÑ ÈÄ¿¡ mailMessage´Â ¸Þ½ÃÁöÀÇ ³¡À» ¾Ë¸®´Â ¸¶Ä§Ç¥("\r\n.\r\n")¸¦ * Àü¼ÛÇÏ°í OK¸¦ ¶æÇÏ´Â 250À» ±â´Ù¸°´Ù. * ±× ´ÙÀ½¿£ ¿¬°á Á¾·á¸¦ ¶æÇÏ´Â "QUIT\r\n" ¸Þ½ÃÁö¸¦ º¸³½ ÈÄ * ¼­¹ö°¡ SMTP ä³ÎÀ» Á¾·áÇÔÀ» ¶æÇÏ´Â 221À» ±â´Ù¸°´Ù. * ³¡À¸·Î mailMessage´Â ¼ÒÄÏÀ» ´Ý°í Áö±Ý±îÁöÀÇ ¸ðµç ÀÛ¾÷ÀÌ ¼º°øÀûÀ̾úÀ» °æ¿ì true¸¦ µÇµ¹¸°´Ù. * WWW È£½ºÆ®°¡ ÀÌ SMTP ÇÁ·ÎÅäÄÝÀ» Áö¿øÇؾ߸¸ ÀÚ½ÅÀÇ È¨ÆäÀÌÁö¿¡ ¼³Ä¡ÇÒ ¶§ * ¼º°øÀûÀ¸·Î ½ÇÇàµÉ °ÍÀÌ´Ù. * ±×·¸Áö ¾ÊÀ¸¸é ÀÌ ¾ÖÇø´ÀÇ È¯°æÀ» Á÷Á¢ ¹Ù²ã¾ß ÇÑ´Ù. */ public boolean mailMessage(String subject,String message) // ½ÇÁ¦ ¸ÞÀÏÀ» ¹ß¼Û { if (null==receiver) return false; // ¼ö½ÅÀÚ°¡ ¾øÀ¸¸é ¸ÞÀÏÀ» ¹ß¼ÛÇÏÁö ¾Ê´Â´Ù. Socket s = null; try { String res; s = new Socket(mailhost, port); // Ŭ¶óÀ̾ðÆ® ¼ÒÄÏÀ» »ý¼ºÇÏ¿© È£½ºÆ®ÀÇ ¸ÞÀÏ Æ÷Æ®¿¡ ¿¬°áÇÑ´Ù. PrintStream p = new PrintStream(s.getOutputStream()); in = new DataInputStream(s.getInputStream()); // ¿¬°áµÈ ¼ÒÄÏÀ¸·ÎºÎÅÍ ÀÔ·Â ½ºÆ®¸²°ú Ãâ·Â ½ºÆ®¸²À» ±¸ÇÑ´Ù. expect("220", "no greeting"); String helohost = InetAddress.getLocalHost().toString(); // ·ÎÄà ȣ½ºÆ®ÀÇ ÀÎÅÍ³Ý ÁÖ¼Ò¸¦ ±¸ÇÑ´Ù. p.print("HELO " + helohost + "\r\n"); // SMTP ¼­¹ö·Î ¸Þ½ÃÁö Àü¼Û expect("250", "helo"); int pos; String hello = "Hello "; if ((pos = lastline.indexOf(hello)) != -1) { // ¼­¹ö·ÎºÎÅÍ ¹ÞÀº ¸Þ½ÃÁö¿¡ "Hello "°¡ ÀÖÀ¸¸é helohost = lastline.substring(pos + hello.length()); // "Hello " ¹Ù·Î ´ÙÀ½ÀÇ ½ºÆ®¸µÀ» helohost·Î ÇÑ´Ù. helohost = helohost.substring(0, helohost.indexOf(' ')); // ´Ù½Ã helohost ½ºÆ®¸µ¿¡ Æ÷ÇÔµÈ Ã¹ °ø¹é ¹®ÀÚºÎÅ͸¦ helohost·Î ÇÑ´Ù. } p.print("MAIL FROM: " + sender + "\r\n"); expect("250", "mail from"); p.print("RCPT TO: " + receiver + "\r\n"); expect("250", "rcpt to"); p.print("DATA\r\n"); expect("354", "data"); p.print("Subject: " + subject); p.print(" (" + helohost + ")"); p.print("\r\n\r\n"); DataInputStream is = new DataInputStream(new StringBufferInputStream(message)); // ½ºÆ®¸µÀÎ message¸¦ µ¥ÀÌÅÍÀԷ½ºÆ®¸²À¸·Î º¯È¯ while (is.available() > 0) { String ln = is.readLine(); if (ln.equals(".")) // ¸¶Ä§Ç¥ Çϳª´Â ¸Þ½ÃÁöÀÇ ³¡À» ¶æÇϹǷΠº¯È¯ ln = ".."; p.println(ln); } String days="SunMonTueWedThuFriSat"; String months="JanFebMarAprMayJunJulAugSepOctNovDec"; Date date=new Date(); // ÇöÀç ³¯Â¥¿Í ½Ã°£À» ±¸ÇÑ´Ù. p.print("(Accessed at " + Integer.toString(date.getHours()) + ":" + Integer.toString(date.getMinutes()) + " on " + days.substring(date.getDay()*3,date.getDay()*3+3) + ", " + Integer.toString(date.getDate()) + " " + months.substring(date.getMonth()*3,date.getMonth()*3+3) + " " + Integer.toString(date.getYear()+1900) + ")"); p.print("\r\n.\r\n"); expect("250", "end of data"); p.print("QUIT\r\n"); expect("221", "quit"); } catch(Exception e) { result = e.getMessage(); return false; } finally { // finally´Â ¿¹¿Ü ¹ß»ý À¯¹«¿¡ °ü°è ¾øÀÌ ½ÇÇàÇÏ´Â ºí·ÏÀ» ÁöÁ¤ÇÏ´Â ¿¹¾à¾î try { if (s != null)s.close(); } catch(Exception e) { result = e.getMessage(); } return true; } // end of finally } } class guestbookWindow extends Frame // guestbook ¾ÖÇø´ÀÌ »ý¼ºÇÏ´Â ´ëÈ­»óÀÚ À©µµ¿ì { static final int FONTHEIGHT=12; // ±Û²Ã Å©±â static final String FONTSTRING="System"; // ±Û²Ã TextArea txt3=null; // ¸ÞÀÏ¿¡ µé¾î°¥ ³»¿ëÀ» ¾²´Â TextArea TextField txt1=null; // ¹ß½ÅÀÚÀÇ À̸§À» ¾²´Â TextField TextField txt2=null; // ¹ß½ÅÀÚÀÇ E-Mail ÁÖ¼Ò¸¦ ¾²´Â TextField Send send=null; // ÀüÀÚ ¿ìÆíÀ» º¸³»´Â Ŭ·¡½º ÀνºÅϽº AppletContext appletContext; // AppletContext´Â ¾ÖÇø´ÀÇ È¯°æÀÎ À¥ ºê¶ó¿ìÀú³ª ¾ÖÇø´ºä¾î¿¡ // °ü·ÃµÈ Á¤º¸¸¦ ¾òÀ» ¶§ »ç¿ëÇÏ´Â Ãß»ó Ŭ·¡½º(ÀÎÅÍÆäÀ̽º)ÀÌ´Ù. public guestbookWindow(AppletContext app, String mailhost,String receiver) // »ý¼ºÀÚ { send= new Send(mailhost,receiver); // ÀüÀÚ ¿ìÆí ¹ß¼ÛÀ» ÇÏ´Â Send Ŭ·¡½º ÀνºÅϽº »ý¼º appletContext=app; // guestbook ¾ÖÇø´ÀÇ AppletContext¸¦ ÀúÀå Label lbl1,lbl2,lbl3; // ¼¼ °³ÀÇ ¾È³» ·¹À̺í Button butt1, butt2; // Send, Cancel µÎ °³ÀÇ ¹öÆ° GridBagLayout gridbag=new GridBagLayout(); // ·¹À̾ƿô °ü¸®ÀÚ·Î GridBagLayout »ç¿ë GridBagConstraints c=new GridBagConstraints(); // GridBagLayoutÀÇ ¼¼ºÎ Ç׸ñÀ» ÁöÁ¤ÇÏ´Â GridBagConstraints Ŭ·¡½º ÀνºÅϽº »ý¼º setFont(new Font(FONTSTRING,Font.BOLD,FONTHEIGHT)); // ÇöÀç ±Û²ÃÀ» ½Ã½ºÅÛ, º¼µå, 12Æ÷ÀÎÆ®·Î setLayout(gridbag); // ·¹À̾ƿô °ü¸®ÀÚ ÁöÁ¤ setBackground(Color.lightGray); // À©µµ¿ìÀÇ ¹è°æ»öÀ» ¿¬ÇÑ È¸»öÀ¸·Î c.fill=GridBagConstraints.NONE; // µð½ºÇ÷¹ÀÌ ¿µ¿ªº¸´Ù ¼ººÐ À©µµ¿ì°¡ ÀÛ´õ¶óµµ ´Ã¸®Áö ¾ÊÀ½. c.weightx=1.0;c.weighty=1.0; // ¿©¹é ºÐ¹è ½Ã °¡ÁßÄ¡ ÁöÁ¤ c.ipadx=4;c.ipady=4; // ³»ºÎ ¿©¹é °ª ÁöÁ¤ c.insets=new Insets(5,5,5,5); // ¿ÜºÎ ¿©¹é °ª ÁöÁ¤ lbl1 = new Label("Your Name (Optional):"); // ·¹ÀÌºí »ý¼º gridbag.setConstraints(lbl1,c); // »ý¼ºµÈ ·¹À̺íÀÇ À§Ä¡ ÁöÁ¤ add(lbl1); // ·¹À̺íÀ» ½ÇÁ¦·Î ´ëÈ­»óÀÚ¿¡ Ãß°¡ c.anchor=GridBagConstraints.WEST; // µð½ºÇ÷¹ÀÌ ¿µ¿ªº¸´Ù ÀÛÀ» °æ¿ì ¼­ÂÊÀ¸·Î ºÙ¿© ¹è¿­ txt1 = new TextField("", 20); // °¡½Ã¿µ¿ª Å©±â°¡ 20 Ä­ÀÎ TextField »ý¼º gridbag.setConstraints(txt1,c); add(txt1); c.anchor=GridBagConstraints.CENTER; // µð½ºÇ÷¹ÀÌ ¿µ¿ªº¸´Ù ÀÛÀ» °æ¿ì °¡¿îµ¥¿¡ ¹è¿­ butt1 = new Button("Send"); // Send ¹öÆ° »ý¼º gridbag.setConstraints(butt1,c); add(butt1); c.gridwidth=GridBagConstraints.REMAINDER; // °¡·Î ¹æÇâÀÇ ¸¶Áö¸· ¼ººÐ À©µµ¿ì·Î ÁöÁ¤ butt2 = new Button("Cancel"); // Cancel ¹öÆ° »ý¼º gridbag.setConstraints(butt2,c); add(butt2); c.gridwidth=1; // ´Ù½Ã ±âº»°ªÀ¸·Î c.weightx=1.0;c.weighty=1.0; lbl2 = new Label("Your EMail(Optional):"); // ·¹ÀÌºí »ý¼º gridbag.setConstraints(lbl2,c); add(lbl2); c.gridwidth=GridBagConstraints.REMAINDER; // °¡·Î ¹æÇâÀÇ ¸¶Áö¸· ¼ººÐ À©µµ¿ì·Î ÁöÁ¤ c.anchor=GridBagConstraints.WEST; // µð½ºÇ÷¹ÀÌ ¿µ¿ªÀÇ ¼­ÂÊ¿¡ ¹è¿­ txt2 = new TextField("", 20); // TextField »ý¼º gridbag.setConstraints(txt2,c); add(txt2); c.gridwidth=GridBagConstraints.REMAINDER; // ¼ººÐ À©µµ¿ì Çϳª°¡ °¡·Î¸¦ ¸ðµÎ Â÷Áö c.fill=GridBagConstraints.BOTH; // µð½ºÇ÷¹ÀÌ ¿µ¿ªÀ» ¼ººÐ À©µµ¿ì°¡ ¿ÏÀüÈ÷ ä¿ìµµ·Ï ´ÃÀδÙ. lbl3=new Label("Any comments or suggestions?"); gridbag.setConstraints(lbl3,c); add(lbl3); c.gridwidth=GridBagConstraints.REMAINDER; // ¼ººÐ À©µµ¿ì Çϳª°¡ °¡·Î¸¦ ¸ðµÎ Â÷Áö c.fill=GridBagConstraints.BOTH; // µð½ºÇ÷¹ÀÌ ¿µ¿ªÀ» ¿ÏÀüÈ÷ ä¿ò txt3 = new TextArea(5,66); // ¼¼·Î 5ÁÙ, °¡·Î 66Ä­Â¥¸® TextArea »ý¼º gridbag.setConstraints(txt3,c); add(txt3); } // »ý¼ºÀÚ¿¡¼­´Â pack(), show() µµ±¸¸¦ È£ÃâÇÏÁö ¾ÊÀ½¿¡ À¯ÀÇ public boolean action(Event evt, Object arg) // ¹öÆ°ÀÌ ´­·ÁÁø °æ¿ì { if(arg.equals("Cancel")) { // Cancel ¹öÆ°ÀÌ ´­·ÁÁø °æ¿ì hide(); // ´ëÈ­»óÀÚ À©µµ¿ì¸¦ º¸ÀÌÁö ¾Ê°Ô ÇÑ´Ù. return true; } else if (arg.equals("Send")) { // Send ¹öÆ°ÀÌ ´­·ÁÁø °æ¿ì hide(); // ´ëÈ­»óÀÚ À©µµ¿ì¸¦ º¸ÀÌÁö ¾Ê°Ô ÇÑ´Ù. if (txt1.getText().length()>0 || // ÀÔ·ÂµÈ ÅؽºÆ®µéÀ» ÇϳªÀÇ ½ºÆ®¸µÀ¸·Î txt2.getText().length()>0 || // Send Ŭ·¡½ºÀÇ mailMessage¸¦ È£ÃâÇÏ¿© txt3.getText().length()>0) { // ¸ÞÀÏÀ» ¹ß¼ÛÇÑ´Ù. String message="Guest: " + txt1.getText() + "\n" + "Address: " + txt2.getText() + "\n\n" + txt3.getText() ; if (true==send.mailMessage("Guestbook Entry!",message)) // ¸ÞÀÏ ¹ß¼Û ¼º°ø appletContext.showStatus("Entry logged into guest book!"); // ºê¶ó¿ìÀúÀÇ »óÅ ¹Ù¿¡ ÁöÁ¤ÇÑ ÅؽºÆ®¸¦ Ãâ·ÂÇÑ´Ù. else // ¸ÞÀÏ ¹ß¼Û ½ÇÆÐ appletContext.showStatus("Entry NOT logged."); } else // TextField¿Í TextArea¿¡ ÀÔ·ÂÀÌ Çϳªµµ ¾øÀ» °æ¿ì appletContext.showStatus("Nothing to send!"); // ºê¶ó¿ìÀúÀÇ »óÅ ¹Ù¿¡ ¿¡·¯ ¸Þ½ÃÁö Ãâ·Â return true; } return false; } public synchronized boolean handleEvent(Event e) { // ¾ÆÀÌÄÜÈ­ ´ÜÃß³ª Á¾·á ´ÜÃß°¡ ´­·¯Áú °æ¿ì ´ëÈ­ »óÀÚ¸¦ °¨Ãá´Ù. if (e.id == Event.WINDOW_ICONIFY || e.id == Event.WINDOW_DESTROY) { hide(); return true; } return super.handleEvent(e); // À̺¥Æ®¸¦ ó¸®ÇÏÁö ¾ÊÀ» °æ¿ì ºÎ¸ð Ŭ·¡½ºÀÇ µµ±¸¸¦ È£Ãâ } public void show() // È­¸é¿¡ ´ëÈ­»óÀÚ¸¦ ³ªÅ¸³¾ ¶§¿¡´Â °¢ ÅؽºÆ®¸¦ ¾ø¾Ø´Ù. { txt1.setText(""); txt2.setText(""); txt3.setText(""); super.show(); // È­¸é¿¡ ´ëÈ­»óÀÚ À©µµ¿ì¸¦ Ç¥½Ã } } public class guestbook extends Applet // guestbook ¾ÖÇø´ Ŭ·¡½º { static final int FONTHEIGHT=12; // 12 Æ÷ÀÎÆ® (±Û²Ã Å©±â) static final String FONTSTRING="System"; // ½Ã½ºÅÛ ±Û²Ã static final String BUTTON = "Guest Book"; // ¹öÆ° ·¹À̺í static final String VERSION = "GUESTBOOK.JAVA - v1.05b - 6 March 1996"; static final String COPYRIGHT= "(C)1996 by W.Giel"; guestbookWindow window=null; // ¹öÆ°À» ´©¸£¸é »ý¼ºµÇ´Â ´ëÈ­»óÀÚ À©µµ¿ì ÀνºÅϽº Image image=null; // ¹öÆ° ¾Æ·¡¿¡ ¹èÄ¡µÇ´Â ±×¸², Ãʱ⿡´Â null Button button; int width, height; MediaTracker tracker = new MediaTracker(this); // ÀÌ ¾ÖÇø´ÀÇ MediaTracker »ý¼º public String[][] getParameterInfo() // ¾ÖÇø´ÀÌ »ç¿ëÇϴ ű׵éÀ» ¾È³»ÇØÁÖ´Â { // Applet Ŭ·¡½ºÀÇ µµ±¸¸¦ ¿À¹ö¶óÀ̵åÇÑ´Ù. String[][] info = { // "º¯¼ö À̸§", "À¯Çü", "¼³¸í"ÀÇ ¼ø¼­ÀÌ´Ù. {"width", "int", "width of the applet, in pixels"}, {"height", "int", "height of the applet, in pixels"}, {"receiver", "string", "SMTP 'RCPT TO:' parameter "}, {"imageurl", "string", "name of icon to display "}, {"title", "string", "title for popup dialog "}, }; return info; } // ¾ÖÇø´ÀÇ ÀúÀÚ, ¹öÀü, ÀúÀ۱ǿ¡ ´ëÇÑ ¾È³»¸¦ ÇÏ´Â Applet Ŭ·¡½ºÀÇ µµ±¸¸¦ ¿À¹ö¶óÀ̵å. public String getAppletInfo() { return ( VERSION + " - simulates a guest log\n" + "by E-mailing guest data to page owner, by Bill Giel\n" + "http://www.nai.net/~rvdi/home.htm or rvdi@usa.nai.net\n" + "Copyright 1996 by William Giel."); } public void init() // ¾ÖÇø´ÀÌ ½ÇÇàµÇ¸é ºê¶ó¿ìÀú¿¡ ÀÇÇØ È£Ãâ { String receiver, szImage, szTitle; URL imageURL=null; receiver = getParameter("receiver"); // ¸ÞÀÏÀ» º¸³¾ ÁÖ¼Ò¸¦ ¾ò´Â´Ù. if(null == receiver) showStatus("No RECEIVER parameter - applet will not log entry!"); // HTML ¹®¼­¿¡ receiver º¯¼ö°¡ ¾øÀ¸¸é ºê¶ó¿ìÀú »óŹٿ¡ ¿¡·¯ Ãâ·Â if (null==(szTitle=getParameter("title"))) // HTML ¹®¼­¿¡ title º¯¼ö°¡ ¾øÀ» °æ¿ì szTitle="Guest Book"; szImage=getParameter("IMAGEURL"); // ¾ÖÇø´ÀÇ ¹öÆ° ¾Æ·¡¿¡ ³ªÅ¸³¾ À̹ÌÁö¸¦ ¾ò´Â´Ù. window=new guestbookWindow(getAppletContext(),getCodeBase().getHost(),receiver); // ´ëÈ­»óÀÚ¸¦ »ý¼º. pack(), show()¸¦ È£ÃâÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î È­¸é¿¡ ³ªÅ¸³ªÁö´Â ¾Ê´Â´Ù. window.setTitle(szTitle); // ÀÔ·Â ¹ÞÀº title º¯¼ö·Î ´ëÈ­»óÀÚ Å¸ÀÌƲÀ» ÁöÁ¤ window.pack(); // ´ëÈ­»óÀÚÀÇ ·¹À̾ƿôÀ» ½ÇÁ¦·Î ¼öÇà setFont(new Font(FONTSTRING,Font.BOLD,FONTHEIGHT)); // ±Û²ÃÀ» ½Ã½ºÅÛ, º¼µå, 12Æ÷ÀÎÆ®·Î ÁöÁ¤ add (button = new Button(BUTTON)); // BUTTON("Guest Book"À¸·Î ÁöÁ¤) ·¹À̺íÀ» °¡Áø ¹öÆ° »ý¼ºÇؼ­ ¾ÖÇø´¿¡ Ãß°¡ width=size().width; height=size().height; // ÇöÀç Æø°ú ³ôÀ̸¦ À¯Áö if (null != szImage) { // À̹ÌÁö°¡ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é URLÀ¸·Î ¹Ù²Û´Ù. try{ imageURL=new URL(getDocumentBase(),szImage); } catch (MalformedURLException e) { imageURL=null; image=null; } } if (imageURL != null) { // URLÀ» ÀÌ¿ëÇÏ¿© ÁöÁ¤µÈ À̹ÌÁö¸¦ ¾ò´Â´Ù. image=getImage(imageURL); if (image != null) tracker.addImage(image,0); // ¾ÖÇø´ÀÇ MediaTracker¿¡ Ãß°¡ } button.move( (width-button.size().width)/2, (width-button.size().width)/2 ); // ¹öÆ°ÀÇ À§Ä¡¸¦ ÀçÁöÁ¤ } // init() ³¡ public void paint(Graphics g) { Color color=g.getColor(); // ÇöÀçÀÇ »öÀ» ÀúÀåÇÑ´Ù. g.setColor(Color.lightGray); // ¿¬ÇÑ È¸»öÀ¸·Î ÇöÀç »öÀ» º¯°æÇÑ´Ù. g.fill3DRect(0,0,size().width,size().height,true); // ÇöÀç »öÀ» »ç¿ëÇÏ¿© 3Â÷¿ø »ç°¢ÇüÀ» ±×¸°´Ù. // ¸¶Áö¸·ÀÇ true ÀÎÀÚ´Â »ç°¢ÇüÀÌ Æ¢¾î³ª¿ÈÀ» ÁöÁ¤ÇÑ´Ù. g.setColor(color); // ÇöÀç »öÀ» ¿ø·¡ »öÀ¸·Î µÇµ¹¸°´Ù. if (image != null){ try { tracker.waitForID(0); // MediaTracker·Î À̹ÌÁö¸¦ ÀоîµéÀδÙ. /* waitForID()´Â ÁöÁ¤µÈ ID¸¦ °¡Áø ¸ðµç À̹ÌÁöµéÀ» ÀоîµéÀ̱⠽ÃÀÛÇؼ­ ¸ðµÎ Àоîµé¿´°Å³ª ¿¡·¯¸¦ ¹ÞÀ¸¸é Áß´Ü ÇÑ´Ù. ¿¡·¯°¡ ÀÖÀ» °æ¿ì statusID() ¶Ç´Â isErrorID()¸¦ »ç¿ëÇÏ¿© °Ë»çÇغ¼ ¼ö ÀÖ´Ù. */ } catch (InterruptedException e) { return; } g.drawImage(image,(width-image.getWidth(this))/2,button.size().height +(height-image.getHeight(this)-button.size().height)/3,this); // ÀоîµéÀÎ À̹ÌÁö¸¦ ¹öÆ° ¾Æ·¡¿¡ ±×¸°´Ù. g.setFont(new Font(FONTSTRING,Font.PLAIN,12)); // ±Û²ÃÀ» ½Ã½ºÅÛ, º¸Åëü, 12Æ÷ÀÎÆ®·Î ÁöÁ¤ FontMetrics fm=g.getFontMetrics(); // ±Û²Ã Á¤º¸¸¦ ¾ò´Â´Ù. g.drawString(COPYRIGHT, (width-fm.stringWidth(COPYRIGHT))/2, height-fm.getMaxDescent()-3); // ÀúÀÛ±Ç ½ºÆ®¸µÀ» ¾ÖÇø´ ¾Æ·¡ ºÎºÐ¿¡ ¾´´Ù. } } // paint() ³¡ public boolean action(Event evt, Object arg) { if(arg.equals(BUTTON) && !window.isShowing()) { // "Guest Book" ¹öÆ°ÀÌ ´­·ÁÁö°í ´ëÈ­»óÀÚ¸¦ ¾ÆÁ÷ È­¸é¿¡ ³ªÅ¸³»Áö ¾Ê¾Ò´Ù¸é window.show(); // ´ëÈ­»óÀÚ¸¦ È­¸é¿¡ ³ªÅ¸³½´Ù. return true; } else return false; } }