Core Java Technologies Tech Tip¿¡ ¿À½Å ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù
Core Java Technologies
TECHNICAL TIPS
2005³â 7¿ù 12ÀÏÀÚ
 
Java 2 Platform, Standard Edition (J2SE)¿¡ ±â¹ÝÇÑ core Java technologies ¿Í APIsÀÇ »ç¿ë¿¡ °üÇÑ ÃֽŠÁ¤º¸¸¦ ¾ò¾î °¡½Ã±â ¹Ù¶ø´Ï´Ù.

À̹ø È£¿¡¼­´Â,

» ÅØ½ºÆ® À¯È¿¼º °Ë»ç·Î ¹®¼­ ÇÊÅ͸µÇϱâ
» º¸Á¶ °øÇаú Java ¾×¼¼½º ºê¸´Áö

À» ´Ù·ç°Ô µË´Ï´Ù.


ÀÌ ±Û¿¡¼­´Â Java 2 Platform Standard Edition Development Kit 5.0(JDK 5.0)À» »ç¿ëÇÕ´Ï´Ù.
Download JDK 5.0

ÀúÀÚ John Zukowski


ÅØ½ºÆ® À¯È¿¼º °Ë»çÇÏ¿© ¹®¼­ ÇÊÅ͸µÇϱâ
 
ÀÚ¹Ù Ç÷§Æû¿ë À¯Àú ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé ¶§ À¯ÀúÀÇ ÅØ½ºÆ® ÀÔ·ÂÀÌ À¯È¿ÇÑÁö ±×¸®°í Á¶°Ç¿¡ ¸Â´ÂÁö °Ë»ç Çϴ°ÍÀº ¾ðÁ¦³ª Áß¿äÇÏ´Ù. »ç¿ëÀÚÀÇ J2SE ¹öÀü¿¡ µû¶ó ´Ù¸¥ validation ¿É¼ÇÀ» ÀÌ¿ëÇÏ°Ô µÇ´Âµ¥, ÀϹÝÀûÀ¸·Î ¿¹Àü ¿É¼ÇµéÀº »õ·Î¿î ¹öÀü¿¡µµ »ç¿ë °¡´ÉÇÏÁö¸¸ ´ëºÎºÐÀÇ °æ¿ì ´õ ³ªÀº ±â´ÉÀ» Á¦°øÇÏ´Â »õ·Î¿î ¿É¼ÇµéÀ» »ç¿ëÇϰíÀÚ ÇÒ °ÍÀÌ´Ù. À̹ø Å×Å©ÆÁ¿¡¼­´Â J2SE 1.4 ¹öÀü¿¡¼­ »ç¿ëÇÑ DocumentFilter Ŭ·¡½º¸¦ Æ÷ÇÔ, °¢ J2SE ¹öÀüµé¿¡¼­ »ç¿ëÇÑ ¿É¼Çµé¿¡ ´ëÇØ¼­ ¼³¸íÇÑ´Ù.

Ű&Æ÷Ä¿½º ¸®½º³Ê·Î À¯È¿¼º °Ë»ç

¿¹Àü ¹öÀü¿¡¼­ Swing ÄÄÆ÷³ÍÆ® ¼³Á¤¿¡´Â Á÷Á¢ÀûÀ̰ųª °£´ÜÈ÷ ÀÔ·ÂÀ» °Ë»çÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø¾ú´Ù. Ű ·¹º§¿¡¼­ ÅØ½ºÆ® ÇʵåÀÇ ÀÔ·ÂÀ» Á¦ÇÑÇÏ·Á¸é ÄÄÆÛ³ÍÆ®¿¡ KeyListener¸¦ Ãß°¡Çϰí consume()¸¦ ÀÌ¿ëÇÏ¿© ÀÔ·Â À̺¥Æ®¸¦ ó¸®ÇؾßÇß´Ù(ÅØ½ºÆ® Çʵ忡 Ãß°¡µÇ±æ ¿øÄ¡ ¾ÊÀ» °æ¿ì). À̷νá Çʵ忡 ¼ýÀÚ¸¸ ÀÔ·Â °¡´ÉÇϵµ·Ï Á¦ÇÑÇÏ´Â µîÀÇ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÊµå ·¹º§ÀÇ À¯È¿È­ °Ë»ç¸¦ À§Çؼ­´Â Æ÷Ä¿½º ¸®½º³Ê¸¦ ÷ºÎÇØ¾ß Çß´Ù. ÀÔ·ÂÀÌ À¯È¿ÇÏÁö ¾ÊÀ¸¸é, Æ÷Ä¿½º°¡ Çʵ带 ¶°³¯ ¶§ Æ÷Ä¿½º¸¦ ¿òÁ÷À̵µ·Ï ÇÏ´Â ¿äûÀ» °ÅºÎÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¿É¼Çµé Áß ¾î´À°Íµµ Á¦´ë·Î ÃøÁ¤ÀÌ µÇÁö ¾ÊÁö¸¸, ÀÔ·ÂÀ» À¯È¿È­ÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÏ´Â µµ±¸¿´´Ù. ÀÌ ¿É¼ÇµéÀº ÇöÀç »ç¿ëÀÌ ±ÇÀåµÇÁö ¾Ê´Â´Ù.

°ËÁõ±â·Î À¯È¿¼º °Ë»ç

J2SE 1.3¿¡´Â InputVerifier Ãß»ó Ŭ·¡½º°¡ Ãß°¡µÇ¾ú´Ù. JComponentÀÇ setInputVerifier() ¸Þ¼Òµå·Î °ËÁõ±â(verifier)¸¦ ¾î´À ÄÄÆ÷³ÍÆ®¿¡³ª ÷ºÎÇÏ¿© InputVerifierÀÇ boolean verify(JComponent input) ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵ùÇÒ ¼ö ÀÖ´Ù. ÄÄÆ÷³ÍÆ®¿¡ ÇöÀç ÀÔ·ÂÀÌ À¯È¿ÇÏ´Ù¸é, tabŰ³ª shift-tab¸¦ ´­·¶À» ¶§ verify()°¡ 'true'¸¦ ¸®ÅÏÇÑ´Ù. ±×·¯¸é Æ÷Ä¿½º´Â ¼øÈ¯ ¼ø¼­¿¡ µû¶ó ´ÙÀ½ ȤÀº ÀÌÀü ÄÄÆ÷³ÍÆ®·Î ¿òÁ÷ÀÌ°Ô µÈ´Ù. verify()°¡ 'false'¸¦ ¸®ÅÏÇϸé ÇöÀç Çʵ忡 ¸ØÃçÀÖ°Ô µÈ´Ù. JComponent¿¡´Â ¶ÇÇÑ getVerifyInputWhenFocusTarget() ¸Þ¼Òµå°¡ ÀÖ´Ù. ÀÌ ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ Help¿Í °°Àº ¸Þ´º¸¦ ¼±ÅÃÇϱâ Àü¿¡´Â °ËÁõÇÏÁö ¸øÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù.

À¯È¿È­ °Ë»ç¿¡ ´ëÇÑ ÀÌ ¹æ¹ýÀÇ µ¥¸ð·Î, ´ÙÀ½ÀÇ ÇÁ·Î±×·¥ NumericVerifier¿¡´Â ¼¼°³ÀÇ ÅØ½ºÆ® Çʵ尡 Æ÷ÇԵǾî ÀÖ´Ù. ¸Ç À§/¸Ç ¾Æ·¡ ÅØ½ºÆ® Çʵ忡¼­´Â À¯È¿ÇÑ ¼ýÀÚ°ªÀÌ ÀÔ·ÂÀÌ µÇ¾î¾ß ´ÙÀ½ Çʵå·Î ³Ñ¾î°¥ ¼ö ÀÖ´Ù. Áß°£ ÅØ½ºÆ® Çʵ忡´Â ÀÔ·Â Á¦ÇÑÀÌ ¾ø´Ù.
   import java.awt.*;
   import java.awt.event.*;
   import javax.swing.*;

   public class NumericVerifier{
     public static void main(String args[]) {
       Runnable runner = new Runnable() {
         public void run() {
           JFrame frame = new JFrame("Numeric Verifier");
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

           JPanel panel1 = new JPanel(new BorderLayout());
           JLabel label1 = new JLabel("Numeric-only");
           JTextField textField1 = new JTextField();
           panel1.add(label1, BorderLayout.WEST);
           panel1.add(textField1, BorderLayout.CENTER);

           JPanel panel2 = new JPanel(new BorderLayout());
           JLabel label2 = new JLabel("Anything");
           JTextField textField2 = new JTextField();
           panel2.add(label2, BorderLayout.WEST);
           panel2.add(textField2, BorderLayout.CENTER);

           JPanel panel3 = new JPanel(new BorderLayout());
           JLabel label3 = new JLabel("Numeric-only");
           JTextField textField3 = new JTextField();
           panel3.add(label3, BorderLayout.WEST);
           panel3.add(textField3, BorderLayout.CENTER);

           InputVerifier verifier = new InputVerifier() {
             public boolean verify(JComponent comp) {
               boolean returnValue;
               JTextField textField = (JTextField)comp;
               try {
                 Integer.parseInt(textField.getText());
                 returnValue = true;
               } catch (NumberFormatException e) {
                 Toolkit.getDefaultToolkit().beep();
                 returnValue = false;
               }
            return returnValue;
             }
           };

           textField1.setInputVerifier(verifier);
           textField3.setInputVerifier(verifier);

           frame.add(panel1, BorderLayout.NORTH);
           frame.add(panel2, BorderLayout.CENTER);
           frame.add(panel3, BorderLayout.SOUTH);
           frame.setSize(300, 95);
          frame.setVisible(true);
         }
       };
       EventQueue.invokeLater(runner);
     }
   }
Numeric Verifier

»ç¿ëÀÚÁ¤ÀÇ ¹®¼­·Î À¯È¿¼º °Ë»ç

ÀÔ·ÂÀÌ ÀÌ·ç¾îÁø ÈÄ¿¡ ÇÊµå ·¹º§¿¡¼­ À¯È¿¼ºÀ» °Ë»çÇÏ´Â ´ë½Å, ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®¿¡ ±ÛÀÚ Çϳª¾¿ ÀÔ·Â/Á¦°ÅÇÒ ¶§ ¸Å¹ø À¯È¿¼ºÀ» °Ë»çÇÒ ¼ö ÀÖ´Ù. Document ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù. Model-View-Controller (MVC) µðÀÚÀÎ ÆÐÅÏ¿¡ µû¶ó¼­ Swing ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®ÀÇ ¸ðµ¨ ÆÄÆ®°¡ Document ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ¿© °ü¸®µÈ´Ù. J2SE 5.0 ¹öÀü ÀÌÀü¿¡´Â À¯È¿ÇÏ´Ù°í ¿©°ÜÁö´Â ÀÔ·ÂÀ» Á¦ÇÑÇϱâ À§ÇØ »ç¿ëÀÚ Document ±¸ÇöÀ» »ý¼ºÇؾßÇß´Ù.

Swing¿¡¼­´Â PlainDocument, DefaultStyledDocument, HTMLDocument Çü½ÄÀÇ ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®¿¡ ´ëÇØ Ç¥ÁØ Document°¡ ±¸ÇöµÈ´Ù. ÀÌ ±¸Çöµé Áß Çϳª¸¦ È®ÀåÇÏ¿©µµ ¼Ò¿ëÀÌ ¾øÀ¸¸é, AbstractDocument(»ç¿ëÀÚ ±¸ÇöÀÇ ±âÃʸ¦ Á¦°ø)¸¦ ¼­ºêŬ·¡½ºÇصµ µÈ´Ù. PlainDocument Ŭ·¡½º´Â JTextField¿Í JTextArea°°Àº ´ÜÀÏ ¼Ó¼º ÅØ½ºÆ®(´ÜÀÏ ÆùÆ®,»ö)·Î ÀÌ·ç¾îÁø ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®¿¡ »ç¿ëµÇ°í, DefaultStyledDocument Ŭ·¡½º´Â JTextPane¿¡ »ç¿ëµÈ´Ù. HTMLDocument Ŭ·¡½º´Â JEditorPaneÀÇ ÅØ½ºÆ®/HTML ŸÀÔ ÄÁÅÙÃ÷¸¦ ¸¸µç´Ù. À̰ÍÀº Document ±¸ÇöÀÌ ÀÌ¿ëµÈ ¹æ¹ý°ú ¶§¸¦ º¸¿©ÁÖ´Â Ãß»óÀûÀÎ ¿¹ÀÌ´Ù. ÀÌ ¹®¼­ ŸÀÔµéÀº ´Ù¸¥ °÷¿¡¼­µµ ÀÌ¿ëµÈ´Ù.

JTextField¿¡ ¼ýÀÚ¸¸ ÀԷµǵµ·Ï Á¦ÇÑÇÏ°í ½ÍÀ¸¸é, PlainDocument¸¦ ¼­ºêŬ·¡½ºÇϰí, ±× Ŭ·¡½ºÀÇ insertString()¿Í remove() ¸Þ¼ÒµåÀÇ ºñÇìÀ̺ñ¾î¸¦ »ç¿ëÀÚÁ¤ÀÇ ÇßÀ» °ÍÀÌ´Ù. insertString() ¸Þ¼Òµå´Â ij¸¯Å͸¸ÀÌ ¾Æ´Ñ StringÀ» ÀÔ·ÂÇÏ·Á°í Çϰí, µû¶ó¼­ °á°ú°¡ À¯È¿ÇÑÁö Å×½ºÆ®°¡ ÇÊ¿äÇÏ´Ù. ºÙÀ̱â(paste) ¿¬»êÀÇ °æ¿ì, ÇÑ °³ ÀÌ»óÀÇ Ä³¸¯ÅͰ¡ »ðÀԵǾî ÀÖÀ» °ÍÀÌ´Ù. ´ÙÀ½Àº ±× ¿¹Á¦ÀÌ´Ù.
   import javax.swing.text.*;

   public class IntegerDocument extends PlainDocument {

     int currentValue = 0;

     public IntegerDocument() {
     }

     public int getValue() {
       return currentValue;
     }

     public void insertString(int offset, String string,
         AttributeSet attributes) throws BadLocationException {

       if (string == null) {
         return;
       } else {
         String newValue;
         int length = getLength();
         if (length == 0) {
           newValue = string;
         } else {
           String currentContent = getText(0, length);
           StringBuffer currentBuffer = 
                new StringBuffer(currentContent);
           currentBuffer.insert(offset, string);
           newValue = currentBuffer.toString();
         }
         currentValue = checkInput(newValue, offset);
         super.insertString(offset, string, attributes);
       }
     }
     public void remove(int offset, int length)
         throws BadLocationException {
       int currentLength = getLength();
       String currentContent = getText(0, currentLength);
       String before = currentContent.substring(0, offset);
       String after = currentContent.substring(length+offset,
         currentLength);
       String newValue = before + after;
       currentValue = checkInput(newValue, offset);
       super.remove(offset, length);
     }
     public int checkInput(String proposedValue, int offset)
         throws BadLocationException {
       if (proposedValue.length() > 0) {
         try {
           int newValue = Integer.parseInt(proposedValue);
           return newValue;
         } catch (NumberFormatException e) {
           throw new BadLocationException(proposedValue, offset);
         }
       } else {
         return 0;
       }
     }
   }
»õ·Î¿î IntegerDocument¸¦ Å×½ºÆ®Çϱâ À§ÇØ À̸¦ »ç¿ëÀÚ°¡ ÀÔ·ÂÀ» Á¦ÇÑÇϰíÀÚ ÇÏ´Â JTextField¿¡ ÷ºÎÇÑ´Ù. ÀÌ¿¡ ´ëÇÑ µ¥¸ð·Î, ´ÙÀ½ÀÇ ÇÁ·Î±×·¥ NumericInput¿¡¼­´Â µÎ°³ÀÇ ÅØ½ºÆ® Çʵ带 º¸¿©ÁÖ°í ÀÖ´Ù. À­ÂÊÀÇ Çʵå´Â ¼ýÀÚ ÀԷ¸¸ÀÌ °¡´ÉÇϸç, ¹ØÀÇ Çʵå´Â »ó°üÀÌ ÀÔ·Â °¡´ÉÇÏ´Ù. À̹ø ¿¹Á¦¿Í ¾ÕÀÇ ¿¹Á¦ÀÇ Áß¿äÇÑ Â÷ÀÌÁ¡Àº ÀÌÀü ¿¹Á¦ÀÇ ÇÁ·Î±×·¥¿¡¼­´Â Æ÷Ä¿½º¸¦ ÀÒ¾úÀ» ¶§¸¸ À¯È¿È­ °Ë»ç¸¦ ½Ç½ÃÇÏÁö¸¸ À̹ø ¿¹Á¦¿¡¼­´Â ÇÊµå ³»¿¡ À¯È¿ÇÏÁö ¾ÊÀº °ªÀ» ÀüÇô ³ªÅ¸³»Áö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù.
   import javax.swing.*;
   import javax.swing.text.*;
   import java.awt.*;
   import java.awt.event.*;

   public class NumericInput {
     public static void main(String args[]) {
       Runnable runner = new Runnable() {
         public void run() {
           JFrame frame = new JFrame("Numeric Input");
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           frame.setLayout(new GridLayout(2, 2));

           frame.add(new JLabel("Number"));
           JTextField textFieldOne = new JTextField();
           Document textDocOne = new IntegerDocument();
           textFieldOne.setDocument(textDocOne);
           frame.add(textFieldOne);

           frame.add(new JLabel("All"));
           JTextField textFieldTwo = new JTextField();
           frame.add(textFieldTwo);

           frame.setSize(250, 90);
           frame.setVisible(true);
         }
       };
       EventQueue.invokeLater(runner);
     }
   }
Numeric Input

¹®¼­ ÇÊÅÍ·Î À¯È¿¼º °Ë»ç

J2SE 1.4¿¡¼­´Â ¹®¼­¸¦ ÇÊÅ͸µÇÏ´Â ¹æ¹ý¿¡ º¯È­°¡ »ý°å´Ù. ¸ðµ¨ÀÇ ÄÁÅÙÃ÷¸¦ Á¦ÇÑÇϱâ À§ÇØ Document ±¸ÇöÀ» ¼­ºêŬ·¡½ºÇÏ´Â ´ë½Å, »õ·Î¿î DocumentFilter Ŭ·¡½º¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚ´Â ´Ü¼øÈ÷ setDocumentFilter ¸Þ¼Òµå·Î DocumentFilter¸¦ AbstractDocument¿¡ ºÙÀ̱⸸ ÇÏ¸é µÈ´Ù.

DocumentFilter Ŭ·¡½º¿¡´Â ¼¼°³ÀÇ ¿À¹ö¶óÀ̵ù µÉ ¼ö ÀÖ´Â ¸Þ¼Òµå°¡ ÀÖ´Ù. Document¿¡¼­ º¸¿©ÁØ µÎ°³ ¿Ü¿¡ replace ¸Þ¼Òµå°¡ ÀÖ´Ù. ÀÌÁ¦´Â replace ¸Þ¼Òµå°¡ °ÅÀÇ ¸Å¹ø È£ÃâµÈ´Ù. ºÙÀ̱⠿¬»êÀÌ remove()¿Í insertString()À» °¢°¢ È£ÃâÇÏ´Â ´ë½Å replace·Î ½ÇÇàµÈ´Ù°í »ý°¢ÇÏ¸é µÈ´Ù. ´ÙÀ½Àº ±× ¼¼°³ÀÇ ¸Þ¼ÒµåÀÌ´Ù.
   public void insertString(DocumentFilter.FilterBypass fb,
                         int offset,
                         String string,
                         AttributeSet attr)
                  throws BadLocationException
                  
   public void remove(DocumentFilter.FilterBypass fb,
                   int offset,
                   int length)
            throws BadLocationException
            
   public void replace(DocumentFilter.FilterBypass fb,
                    int offset,
                    int length,
                    String text,
                    AttributeSet attrs)
             throws BadLocationException
´ÙÀ½Àº ÀÌÀüÀÇ IntegerDocument¿Í °°Àº ±â´ÉÀ» Á¦°øÇÏ´Â DocumentFilter¿¡ ´ëÇÑ ¿¹Á¦ÀÌ´Ù. ´ëºÎºÐÀÇ ÀÛ¾÷Àº replace() ¸Þ¼Òµå·Î ·¡ÇεȴÙ.
   import javax.swing.text.*;
   import java.awt.Toolkit;   
   
   public class IntegerDocumentFilter extends DocumentFilter {
   
   
      int currentValue = 0;   
   
      public IntegerDocumentFilter() {
      }
      
      public void insertString(DocumentFilter.FilterBypass fb, 
       int offset, String string, AttributeSet attr) 
       throws BadLocationException {   
   
        if (string == null) {
          return;
        } else {
          replace(fb, offset, 0, string, attr);
        }
       }   
   
      public void remove(DocumentFilter.FilterBypass fb, 
       int offset, int length)
       throws BadLocationException {
   
        replace(fb, offset, length, "", null);
      }
      
      public void replace(DocumentFilter.FilterBypass fb, 
       int offset, int length, String text, AttributeSet attrs) 
       throws BadLocationException {   
   
        Document doc = fb.getDocument();
        int currentLength = doc.getLength();
        String currentContent = doc.getText(0, currentLength);
        String before = currentContent.substring(0, offset);
        String after = currentContent.substring(
             length+offset, currentLength);
        String newValue = before + 
             (text == null ? "" : text) + after;
        currentValue = checkInput(newValue, offset);
        fb.replace(offset, length, text, attrs);
      }
      
      private int checkInput(String proposedValue, int offset)
          throws BadLocationException {
        int newValue = 0;
        if (proposedValue.length() > 0) {
          try {
            newValue = Integer.parseInt(proposedValue);
          } catch (NumberFormatException e) {
            throw new BadLocationException(
              proposedValue, offset);
          }
        }
        return newValue;
      }
   }
¾÷µ¥ÀÌÆ®µÈ Å×½ºÆ® ÇÁ·Î±×·¥ÀÎ NumericInputFilter´Â ½ÇÁ¦ÀûÀ¸·Î´Â ÀÌÀüÀÇ Å×½ºÆ® ÇÁ·Î±×·¥ÀÎ NumericInput°ú µ¿ÀÏÇÏ´Ù. Â÷ÀÌÁ¡Àº ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®¸¦ ¹®¼­È­Çϴµ¥ ÇÊÅ͸¦ »ç¿ëÇÑ´Ù´Â °Í°ú À©µµ¿ì Á¦¸ñÀÌ ´Þ¶óÁ³´Ù´Â °ÍÀÌ´Ù.
   import javax.swing.*;
   import javax.swing.text.*;
   import java.awt.*;

   public class NumericInputFilter {
     public static void main(String args[]) {
       Runnable runner = new Runnable() {
         public void run() {
           JFrame frame = new JFrame("Numeric Input Filter");
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           frame.setLayout(new GridLayout(2, 2));

           frame.add(new JLabel("Number"));
           JTextField textFieldOne = new JTextField();
           Document textDocOne = textFieldOne.getDocument();
           DocumentFilter filterOne = 
                new IntegerDocumentFilter();
           ((AbstractDocument)
                textDocOne).setDocumentFilter(filterOne);
           textFieldOne.setDocument(textDocOne);
           frame.add(textFieldOne);

           frame.add(new JLabel("All"));
           JTextField textFieldTwo = new JTextField();
           frame.add(textFieldTwo);

           frame.setSize(250, 90);
           frame.setVisible(true);
         }
       };
       EventQueue.invokeLater(runner);
     }
   }
Numeric Input Filter

°á·Ð

ÀÔ·ÂÀ» À¯È¿È­ÇÏ´Â µ¥¿¡´Â ¸¹Àº ¹æ¹ýÀÌ ÀÖ´Ù. À̹ø ÆÁ¿¡¼­ º¸¿©ÁØ InputVerifier, Document, DocumentFilter ¿Ü¿¡µµ JFormattedTextField¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀÌ ÄÄÆ÷³ÍÆ®´Â ¿¹Àü Å×Å©ÆÁ JFORMATTEDTEXTFIELD¸¦ ÀÌ¿ëÇØ¼­ ÅØ½ºÆ® ÀԷ°ª Æ÷¸ËÇϱ⿡ ¼³¸íµÇ¾î ÀÖ´Ù. InputVerifier°ú DocumentFilterÀÇ Å« Â÷ÀÌÁ¡Àº InputVerifier´Â ¸ðµç ÄÄÆ÷³ÍÆ®¿¡¼­ »ç¿ëµÇ°í, DocumentFilter´Â ÅØ½ºÆ® ÄÄÆ÷³ÍÆ®¿¡¸¸ Á¦ÇѵǾî ÀÖ´Ù´Â Á¡ÀÌ´Ù.

Back to Topimage 

º¸Á¶ °øÇаú Java ¾×¼¼½º ºê¸´Áö
 
º¸Á¶ °øÇÐ(Assistive technology)¶õ ½ÅüÀûÀ¸·Î ºÎÀÚÀ¯½º·± »ç¶÷µéÀÌ ÄÄÇ»Å͸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µ½´Â Çϵå¿þ¾î/¼ÒÇÁÆ®¿þ¾î ¼Ö·ç¼ÇÀ» ¸»ÇÑ´Ù. º¸Á¶ °øÇÐÀº À½¼º ÀÔ·Â ±â±â, Á¡ÀÚ Ç¥½Ã ´Ü¸»±â, TTS ½ºÅ©¸°¸®´õ(À¥ ÆäÀÌÁö ³» ¹®ÀÚ¸¦ ÆÇµ¶ÇØ »ç¿ëÀÚ¿¡°Ô ÀоîÁÖ´Â ÇÁ·Î±×·¥) µîÀ» ¾Æ¿ì¸¥´Ù. Java Foundation Class¿¡¼­´Â javax.accessibility ÆÐŰÁö¿¡¼­ Á¦°øÇÏ´Â Accessibility API¸¦ ÅëÇØ º¸Á¶ °øÇÐÀ» Áö¿øÇϴ ǥÁØ ¹æ½ÄÀ» Á¦°øÇÑ´Ù. ÀÌ API´Â Swing ±â¹Ý ÇÁ·Î±×·¥¿¡ ½ÅüÀûÀ¸·Î ºÎÀÚÀ¯½º·± »ç¶÷µéÀÌ ¾×¼¼½ºÇÒ ¼ö ÀÖµµ·Ï ¸¸µé¾îÁØ´Ù.

½ÅüÀûÀ¸·Î ºÎÀÚÀ¯½º·± »ç¶÷ÀÌ ¾Æ´Ï´õ¶óµµ ÀÌ·± ¾×¼¼½º ¿É¼ÇÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ÀÌ ¿É¼Ç¿¡´Â »ç¿ëÀÚ°¡ ¸¶¿ì½º¸¦ °®´Ù´ë¾î ÄÄÆ÷³ÍÆ®¸¦ ³ªÅ¸³¾ ¼ö ÀÖ´Â ÅøÆÁ ÅØ½ºÆ® µî °£´ÜÇÑ ±â´Éµµ Æ÷ÇԵǾî ÀÖ´Ù. ½Ã·ÂÀÌ ÁÁÁö ¾ÊÀº »ç¿ëÀÚ´Â ÄÄÆ÷³ÍÆ®ÀÇ ÅøÆÁÅØ½ºÆ®¸¦ À½¼ºÀ¸·Î ¸»ÇØÁְųª Å×ÀÌºí ¼¿À» üũ¹Ú½º·Î Ç¥ÇöÇØÁÖ´Â ½ºÅ©¸°¸®´õ °°Àº ±â±â¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥ ¿É¼Çµé¿¡´Â »ç¿ëÀÚ°¡ ÃÖ¼ÒÇÑÀÇ ¸¶¿ì½º Ŭ¸¯À¸·Î ½ºÅ©¸°À» ³×ºñ°ÔÀÌÆ® Çϰųª ÃÖ¼ÒÇÑÀÇ µ¿ÀÛÀ¸·Î ÀÛ¾÷ÀÌ ½ÇÇàµÉ ¼ö ÀÖµµ·Ï Çϴ Űº¸µå °¡¼Ó±â³ª ¸Þ´º ´ÜÃàŰ µîÀÌ Æ÷ÇԵǾî ÀÖ´Ù.

»ç¿ëÀÚÀÇ Swing ÄÄÆ÷³ÍÆ®´Â ÄÁÇDZԾîÇÑ´Ù°í Çϸé, javax.accessibility ÆÐŰÁö¿¡ °ü·ÃµÈ ¸ðµç °ÍÀº º¸ÀÌÁö ¾Ê°í ÀϾ´Ù. ¾×¼¼½º º¸Á¶±â´Â Ç÷§Æû »óÀÇ Java Virtual Machine (JVM)*°ú ¿¬°áµÇ¾î ÀÖ´Ù. »ç¿ëÀÚ°¡ ÷ºÎµÈ º¸Á¶±â·Î JVM*À» ÅëÇØ ÇÁ·Î±×·¥À» ·ÎµùÇϸé Java Accessibility API°¡ ÇÊ¿äÇÑ Á¤º¸¸¦ ±â±â¿¡ Á¦°øÇÏ°Ô µÈ´Ù. ¿¹¸¦ µé¾î »ç¿ëÀÚÀÇ ÇÁ·Î±×·¥¿¡ ImageIconÀ» »ý¼ºÇÏ¿© Accessibility API¸¦ ÅëÇØ ImageIcon¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ°Ô ¸¸µé°íÀÚ ÇÑ´Ù¸é, ImageIconÀ» ±â¼úÇÏ¿© À̸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ImageIcon¿¡ ´ëÇÑ µÎ ½ÖÀÇ ÄÁ½ºÆ®·°ÅͰ¡ ÀÖ´Ù. ±× Áß ÇÑ ½Ö¿¡´Â ±â¼ú µ¶¸³º¯¼ö°¡ ¾ø´Ù.
   // Without description argument
   public ImageIcon()
   public ImageIcon(Image image)
   public ImageIcon(String filename)
   public ImageIcon(URL location)
   public ImageIcon(byte imageData[])
´Ù¸¥ ÇÑ ½Ö¿¡´Â ±â¼ú µ¶¸³º¯¼ö°¡ ÀÖ´Ù.
   // With description argument
   public ImageIcon(Image image, String description)
   public ImageIcon(String filename, String description)
   public ImageIcon(URL location, String description)
   public ImageIcon(byte imageData[], String description)
ImageIconÀ» ¸¸µé ¶§ descriptionÀ» ³Ö´Â ´Ù¸é, ¾ÆÀÌÄÜÀ» º¼ ¼ö ¾ø´Â »ç¿ëÀÚ¿¡°Ô Á¤º¸¸¦ ³ªÅ¸³»±â À§ÇØ º¸Á¶±â¼úÀÌ ÅØ½ºÆ®¸¦ ¹¦»çÇÒ ¼ö ÀÖÀ¸¹Ç·Î ±× ÇÁ·Î±×·¥Àº Á» ´õ ¾×¼¼½º°¡ ½±°Ô µÈ´Ù.

´ÙÀ½Àº º¸Á¶ °øÇÐÀ» »ç¿ëÇϰíÀÚ ÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» »ý¼ºÇÒ ¶§ ÇÊ¿äÇÑ ¸î°¡Áö Áú¹®°ú ´Ü°èµéÀÌ´Ù.(¿Ïº®ÇÑ ¸®½ºÆ®´Â ¾Æ´Ï´Ù.)
  • ù¹øÂ° °úÁ¦·Î ¸¶¿ì½º ¾øÀÌ ÇÁ·Î±×·¥À» ÀÌ¿ëÇØº¸±â ¹Ù¶õ´Ù. »ç¿ëÀÚÀÇ ¸Þ´º¿¡ °¡¼Ó±â¿Í ´ÜÃà±â°¡ Áö¿øµÇ´Â°¡? Űº¸µå ¹öư¿¡ ´ÜÃà۰¡ ÀԷµǾî Àִ°¡? »ç¿ëÀÚÀÇ ÅØ½ºÆ® Çʵ忡 setLabelFor() ¸Þ¼Òµå¸¦ ÅëÇØ ¿¬°èµÇ´Â ¶óº§ÀÌ Àִ°¡? °¢ ¶óº§¿¡´Â ´ÜÃà۰¡ Àִ°¡?

  • ÄÄÆ÷³ÍÆ®¿¡ À̵鿡 ¿¬°èµÈ °£·«ÇÑ ÅØ½ºÆ® ½ºÆ®¸µÀÌ ÀÖÀ½À» È®ÀÎÇÏÀÚ. ÄÄÆ÷³ÍÆ®¿¡ À̹ÌÁö ¹öưÀ̶ó´øÁö üũ¹Ú½º Å×ÀÌºí ¼¿ °°Àº ¿¬°è ÅØ½ºÆ® ½ºÆ®¸µÀÌ ¾øÀ¸¸é, AccessibleContextÀÇ setAccessibleName() ¸Þ¼Òµå¸¦ È£ÃâÇÏÀÚ. »ç¿ëÀÚÀÇ ÇÁ·Î±×·¥ÀÌ ±¹Á¦ÀûÀÎ ¼ö½ÅÀÚ¸¦ Ÿ°ÙÀ¸·Î ÇÑ´Ù¸é ÀÌ À̸§À» ·ÎÄÃÈ­ÇÏ´Â °Íµµ ÀØÁö ¸»ÀÚ.

  • °¡´ÉÇÏ´Ù¸é ÅøÆÁ ÅØ½ºÆ®·Î ÀÛ¾÷ÇÑ´Ù. ÅøÆÁ ÅØ½ºÆ®¸¦ ÄÄÆ÷³ÍÆ®¿¡ ¿¬°á½ÃŰ´Â °ÍÀÌ ÀûÀýÇÏÁö ¾Ê´Ù¸é, setAccessibleDescription()¸¦ È£ÃâÇÑ´Ù.

  • »ç¿ëÀÚÁ¤ÀÇ ÄÄÆ÷³ÍÆ®°¡ ¾×¼¼½º °¡´ÉÇѰ¡? JComponent¸¦ ¼­ºêŬ·¡½º Çß´Ù¸é, ÄÄÆ÷³ÍÆ®ÀÇ Å¬·¡½º´Â Accessible ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª JPanel¸¦ ¼­ºêŬ·¡½ºÇß´Ù¸é Ŭ·¡½º´Â Accessible ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ´Ù. JPanelÀÌ Accessible ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇß´õ¶óµµ »ç¿ëÀÚÀÇ ÄÄÆ÷³ÍÆ®°¡ ÇÊ¿äÇÑ ¾×¼¼½º Á¤º¸¸¦ Á¦°øÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù. »ç¿ëÀÚÁ¤ÀÇµÈ AccessibleContext°¡ JComponent.AccessibleJComponent¸¦ ÀûÀýÇÑ ¶§¿¡ È®ÀåÇϵµ·Ï ÇÑ´Ù.

  • ¾×¼¼½º ºÒ°¡´ÉÇÑ ÄÁÅ×À̳ʿ¡ ÀÖ´Â ÄÄÆ÷³ÍÆ®´Â ¾×¼¼½ºÇÒ ¼ö ¾ø´Ù. »ç¿ëÀÚÀÇ ½ºÅ©¸°ÀÌ °è¼ÓÀûÀ¸·Î ¾×¼¼½º°¡´ÉÇϵµ·Ï ÄÁÅ×À̳ʷΠJPanelÀ» »ç¿ëÇϱ⠹ٶõ´Ù. (AWT Container Ŭ·¡½º¸¦ »ç¿ëÇÏÁö ¾Êµµ·ÏÇÑ´Ù.)
¹Ì±¹ Á¤ºÎ´Â ¹Ì±¹ Á¤ºÎ¿ëÀ¸·Î °³¹ßµÈ ½Ã½ºÅÛÀ» ¸¹Àº »ç¿ëÀÚµéÀÌ ÀÌ¿ëÇÒ ¼ö ÀÖµµ·Ï º¸ÁõÇϱâ À§ÇØ Section 508 ¾×¼¼½º ¿äûÀ̶ó°í ¾Ë·ÁÁø ÀÏ·ÃÀÇ ¿¬¹æ Á¤Ã¥À» °í¼öÇϰí ÀÖ´Ù. ¸¹Àº ´Ù¸¥ ³ª¶óµéµµ ºñ½ÁÇÑ Á¤Ã¥À» °®°í ÀÖ´Ù. Sun»ç¿¡¼­´Â IT-related accessibility issues¸¦ ´Ù·ç´Â »çÀÌÆ®¸¦ ¿î¿µÇϰí ÀÖ´Ù. ÀÌ »çÀÌÆ®¿¡´Â ¹Ì±¹ ³» »Ó ¾Æ´Ï¶ó ±¹Á¦ ¸®¼Ò½º¿¡ ´ëÇÑ ·¹ÆÛ·±½º°¡ Æ÷ÇԵǾî ÀÖ´Ù.

´Ù¸¥ ¾×¼¼½º ÇÁ·Î±×·¥À» »ý¼ºÇÏ´Â Å×Å©ÆÁÀº Java Æ©Å丮¾óÀÇ How to Support Assistive Technologies¸¦ Âü°íÇϱ⠹ٶõ´Ù.

¾×¼¼½º ÇÁ·Î±×·¥À» »ý¼ºÇÏ´Â °£´ÜÇÑ ¹ýÄ¢À» ³Ñ¾î¼­¼­ Sun»ç´Â Java Access Bridge¶ó°í ºÒ¸®´Â À©µµ¿ì Ç÷§Æû¿ë ÅøÀ» Á¦°øÇϰí ÀÖ´Ù. Java Access Bridge¿¡´Â »ç¿ëÀÚÀÇ ÇÁ·Î±×·¥ÀÌ ¾ó¸¶³ª ¾×¼¼½º °¡´ÉÇÑÁö È®ÀÎÇϰí, º¸Á¶ °øÇеéÀ» µ¥¸ðÇÒ ¼ö Àִ ȣȯ°¡´É Java VMÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Â ÅøÀ» Æ÷ÇÔÇϰí ÀÖ´Ù.

Java Access Bridge¸¦ ´Ù¿î·ÎµåÇÏ·Á¸é Java Access Bridge ÆäÀÌÁö¸¦ ¿­°í ´Ù¿î·Îµå ¸µÅ©¸¦ Ŭ¸¯ÇÑ´Ù. ¶óÀ̼¾½º µ¿ÀǼ­¸¦ ÀÐ°í µ¿ÀÇÇϸé Accept°ú Continue¸¦ Ŭ¸¯ÇÏ¸é µÈ´Ù. accessbridge-1_2.zip¸¦ ÀúÀåÇϰí, zip ÆÄÀÏÀ» Ç®°í µð·ºÅ丮 ±¸Á¶¸¦ ÀúÀåÇÑ´Ù. ÀÌ·Î½á »ç¿ëÀÚÀÇ ¼³Ä¡ µð·ºÅ丮¿¡ AccessBridge_1.2_GA¶ó´Â À̸§ÀÇ µð·ºÅ丮°¡ »ý¼ºµÈ´Ù.

´ÙÀ½À¸·Î ÀνºÅç·¯ ¼­ºê µð·ºÅ丮¿¡¼­ ã¾Æ ¼³Ä¡ ÇÁ·Î±×·¥À» ±¸µ¿ÇÑ´Ù. JVM ȣȯÀ» À§ÇØ ÀνºÅç·¯´Â Àüü ½Ã½ºÅÛÀ» üũÇÑ´Ù. À̸¦ ÅëÇØ Bridge°¡ »ç¿ëÀÚ°¡ ¿øÇÏ´Â JVMÀ» ¼³Ä¡Çϵµ·Ï ÇÑ´Ù. °¡Àå »ç¿ëÇÏ°í ½ÍÀº JVMÀ» °í¸¥´Ù. »ç¿ëÀÚÀÇ ±â±âÀÇ ±âÁ¸ JVM ¹öÀüÀ» »èÁ¦ÇؾßÇÒ ¼öµµ ÀÖ´Ù. c:\program files\java·Î ½ÃÀ۵Ǵ µð·ºÅ丮´Â ºê¶ó¿ìÀú¸¦ À§ÇÑ Java Plug-inÀÇ ´Ù¸¥ ¹öÀüÀÌ´Ù.

Available Java virtual machines

Install À» ´©¸£¸é ¼³Ä¡°¡ ¿Ï¼ºµÇ¾úÀ½À» ¾Ë¸®´Â âÀÌ ¶á´Ù.

Installation Completed

ÀÌÁ¦ Access Bridge¿¡ ÆÐŰÁöµÈ µÎ°³ÀÇ ¿¹Á¦ ÇÁ·Î±×·¥, : Java Monkey°ú Java FerretÀ» ±¸µ¿ÇÒ ¼ö ÀÖ´Ù. Çѹø ±¸µ¿ µÇ¸é, ÀÌ ÇÁ·Î±×·¥µéÀº °°Àº JVMÀ» ±¸µ¿ÇÏ´Â ¾î¶² ÀÚ¹Ù ÇÁ·Î±×·¥¿¡µçÁö ÷ºÎµÇ¾î¼­ ¿©·¯ °³ÀÇ Java Access Bridge ±â´ÉÀ» »ç¿ëÇÏ°Ô µÈ´Ù. Java Monkey¸¦ »ç¿ëÇØº¸ÀÚ. ¸ÕÀú ¾Æ¹« Java ¾ÖÇø®ÄÉÀ̼ÇÀ̳ª ½ÇÇàÇÑ´Ù. ¿¹¸¦ µé¾î, ÅØ½ºÆ® À¯È¿¼º °Ë»ç·Î ¹®¼­ ÇÊÅ͸µÇϱâ Å×Å©ÆÁ¿¡¼­ º¸¿©ÁØ NumericVerifier ÇÁ·Î±×·¥À» ±¸µ¿ÇÒ ¼ö ÀÖ´Ù. µÎ¹øÂ° À©µµ¿ì¿¡¼­ JavaMonkey¸¦ ±¸µ¿ÇÑ´Ù. Java Monkey¸¦ ½ÃÀÛÇÏ¸é »ç¿ëÀÚÀÇ ½Ã½ºÅÛ ³»ÀÇ ¸ðµç JVM¿¡¼­ ±¸µ¿µÇ°í ÀÖ´Â ¸ðµç Java ¾ÖÇø®ÄÉÀ̼ǵéÀÇ ÄÄÆ÷³ÍÆ® Æ®¸®¸¦ º¸¿©ÁÖ´Â À©µµ¿ì¸¦ º¼ ¼ö ÀÖ´Ù. ÄÄÆ÷³ÍÆ® Æ®¸®°¡ Áï½Ã ³ªÅ¸³ªÁö ¾ÊÀ¸¸é File ¸Þ´º ¾ÈÀÇ Refresh Tree ¿É¼ÇÀ» Ŭ¸¯Çϵµ·Ï ÇÑ´Ù.

Java Monkey

Panel ¸Þ´º¿¡¼­ Accessibility API Panel ¿É¼ÇÀ» ¼±ÅÃÇÏ¸é Æ¯Á¤ ÄÄÆ÷³ÍÆ®ÀÇ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù. Æ®¸®¿¡¼­ ÄÄÆ÷³ÍÆ®¸¦ ¼±ÅÃÇÏ¿© À̸§, Á¤ÀÇ, ¿ªÇÒ µîÀÇ Á¤º¸¸¦ º¸µµ·Ï ÇÏÀÚ.

Java Accessibility API view

Java FerretÀº Æ®·¡Å· ÇÁ·Î±×·¥¿¡ Á» ´õ °¡±õ´Ù. ¸¶¿ì½º, Æ÷Ä¿½º, ¸Þ´º ¼±Åà µî ¼­·Î ´Ù¸¥ À̺¥Æ®µéÀÇ Æ®·¡Å·ÀÌ °¡´ÉÇÏ´Ù. JaVa FerretÀ» ±¸µ¿ÇÏ´Â °ÍÀº Java Monkey¸¦ ±¸µ¿ÇÏ´Â °Í°ú ¸Å¿ì Èí»çÇÏ´Ù. Numeric Verifier ÇÁ·Î±×·¥°ú °°ÀÌ ¾î¶² Java ¾ÖÇø®ÄÉÀ̼ÇÀ̳ª ù¹øÂ° À©µµ¿ì¿¡ ½ÇÇàÇϰí Java FerretÀ» µÎ¹øÂ° À©µµ¿ì¿¡ ½ÃÀÛÇÑ´Ù.

Java FerretÀ» ½ÃÀÛÇÒ ¶§ UpdateSettings, JavaEvents, AccessibilityEvents°¡ Æ÷ÇÔµÈ ¸Þ´º°¡ ÀÖ´Â À©µµ¿ì¸¦ ºÁ¾ßÇÑ´Ù. JavaFerretÀ¸·Î ÇÒ ¼ö ÀÖ´Â °ÍÀ» º¸¿©ÁÖ±â À§ÇÑ ¿¹Á¦·Î½á, JavaEventsMenu ³»ÀÇ TrackMouseEvent¸¦ ¼±ÅÃÇÏÀÚ. ÀÌ´Â '¸¶¿ì½º·Î ÀÔ·Â'ÇÏ´Â ¸ðµç À̺¥Æ®¸¦ Java Access Bridge·Î µî·ÏÇÏ°í °¢ ¸¶¿ì½º À̺¥Æ®¿¡ ´ëÇÑ Á¤º¸¸¦ º¸¿©ÁØ´Ù.

Java Ferret

»ç¿ëÀÚÀÇ ÇÁ·Î±×·¥¿¡¼­ Java Monkey¿Í Java Ferret ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ÇØ´ç ÇÁ·Î±×·¥¿¡ ¾ó¸¶³ª ¾×¼¼½º °¡´ÉÇÑÁö ¾Ë¾Æº¸±â ¹Ù¶õ´Ù.

Monkey¿Í Ferret À̿ܿ¡µµ netBeans.orgÀÇ Accessibility Developer Corner¿¡¼­´Â a11y(11Àº accessibilityÀÇ ¿µ¹®¾ËÆÄºª 'a'¿Í 'y'»çÀÌÀÇ 11ÀÚ¸¦ ³ªÅ¸³½´Ù)·Î ºÒ¸®´Â Å×½ºÆ® ÅøÀ» Á¦°øÇϰí ÀÖ´Ù. ÀÌ Åø¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº a11y project ȨÀ» Âü°íÇϱ⠹ٶõ´Ù.

UNIX¿¡¼­µµ ¶ÇÇÑ Gnopernicus¿Í GOK·Î ºÒ¸®´Â º¸Á¶ °øÇÐÀ» Á¦°øÇϰí ÀÖ´Ù. À̵éÀº Solaris 10¿¡ ±¸ÃàµÇ¾î ÀÖÀ¸¸ç, ¹«·á·Î À̿밡´ÉÇÏ´Ù.

accessibility¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â ÀÚ¹Ù Æ©Å丮¾óÀÇ How to Support Assistive Technologies°ú State, Federal, and International Legal Resources for IT related Accessibility Issues¸¦ Âü°íÇϱ⠹ٶõ´Ù.

Back to Topimage 

º» ¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù.
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϰųª ¼ö½ÅÁÖ¼Ò¸¦ º¯°æÇÏ·Á¸é SKDN@Sun.comÀ¸·Î ¹®ÀÇ Áֽñ⠹ٶø´Ï´Ù.

SKDN(Sun Korea Developers Network)¿¡¼­ J2EE/J2SE Å×Å©ÆÁ µî ´Ù¾çÇÑ ¾ÆÆ¼Å¬µéÀ» Âü°íÇϼ¼¿ä.

Copyright 2003-2005 Sun Korea, Inc. All rights reserved.