JFC(Swing°ú 2D ±×·¡ÇÈ)
1999³â 4¿ù 14ÀÏ Ã¹ ÃâÆÇ, ±Û/À±°æ±¸
Copyright © 1999 Yoon Kyung Koo. All Rights Reserved.
¹«´Ü ÀüÀ縦 ±ÝÇÕ´Ï´Ù.
ÀÌ ±ÛÀº ¿ù°£Áö ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î 1999³â 5¿ùÈ£ÀÇ ¸¶¼Ò ÁִϾ
½Ç¸° ÀÚ¹Ù À̾߱âÀÇ ÃÊ°í¿¡ ±â¹ÝÀ» ÇÏ°í ÀÖ½À´Ï´Ù.
ÀÚ¹Ù À̾߱⸦ Æ÷ÇÔÇÑ 1999³â 1¿ùºÎÅÍ ¿©¼¸ ´Þµ¿¾È ¿¬ÀçµÇ¾ú´ø ¸¶¼Ò ÁÖ´Ï¾î ¿ø°íµéÀº
"Ãʺ¸ÀÚ¸¦ À§ÇÑ ÇÁ·Î±×·¡¹Ö ¸¶½ºÅÍ"¶õ ÇÑ ±ÇÀÇ ´ÜÇົÀ¸·Î ¹¿© ºÏ¸¶Å©
ÃâÆǻ翡¼ Ãâ°£µÇ¾ú½À´Ï´Ù.
Âü°íÇϽñ⠹ٶø´Ï´Ù.
[1. Swing] - [2. 2D Graphics]
¿©±â¿¡¼ ´Ù·ê ³»¿ëÀº ÀÚ¹ÙÀÇ ¸ÚÁø ¿Ü¾ç¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù. ¾Æ¹«¸® ¸ÀÀÖ´Â »§À̶ó ÇÏ´õ¶óµµ °Ñº¸±â¿¡ ¸ÔÀ½Á÷½º·´Áö ¾ÊÀ¸¸é ½±°Ô ¼ÕÀÌ °¡Áö ¾Ê½À´Ï´Ù. ÈǸ¢ÇÑ ¿ä¸®¸¦ Æò°¡ÇÒ ¶§¿¡ ¸À»Ó¸¸ ¾Æ´Ï¶ó »ö»ó°ú Çâ µî °Ñ¸ð¾çµµ Áß¿äÇÑ ±âÁØÀÌ µÇµíÀÌ, ÁÁÀº ÇÁ·Î±×·¡¹Ö µµ±¸¶ó¸é ¸ÚÁö°í Æí¸®ÇÑ ±×·¡ÇÈ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ¿© »ç¿ëÀÚµéÀÇ È£°¨À» ¾òÀ» ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù.
ÀÚ¹Ù´Â ´Ü¼øÇÑ ÇÁ·Î±×·¡¹Ö ¾ð¾î°¡ ¾Æ´Ï¶ó ÇÁ·Î±×·¡¹Ö °³¹ß µµ±¸·Î¼ÀÇ Æ¯¼ºµµ °¡Áö´Â º¹ÇÕÀûÀÎ °³¹ß Ç÷§ÆûÀÔ´Ï´Ù. AWT¶ó´Â ÀÚ¹ÙÀÇ µ¶Æ¯ÇÑ À©µµ¿ì ÀÎÅÍÆäÀ̽º°¡ ÀÖÁö¸¸ ¿©±â¿¡¼ ¼Ò°³ÇÏ´Â ³à¼®Àº ÈξÀ ´õ ¸ÚÁø ¸ð½ÀÀ» ÇÏ°í ÀÖ½À´Ï´Ù. ´í½º À½¾ÇÀÇ ÇÑ À帣ÀÌÀÚ, ±×³×¶ó´Â ¶æµµ °¡Áø ½ºÀ®ÀÌ ¹Ù·Î ÀÌ ¸ÚÁø ³à¼®ÀÇ À̸§ÀÔ´Ï´Ù.
AWT À©µµ¿ì ÄÄÆ÷³ÍÆ®µéÀº ¸ðµÎ °¢ ¿î¿µÃ¼Á¦¿¡ °íÀ¯ÇÑ À©µµ¿ì ÄÄÆ÷³ÍÆ®µéÀ» ºô¾î¾²´Â ¹æ½ÄÀ¸·Î ±¸ÇöµÇ¾î ÀÖ½À´Ï´Ù.
¿¹¸¦ µé¾î ¹öÆ°À» ³ªÅ¸³»´Â Button ÄÄÆ÷³ÍÆ®´Â ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® À©µµ¿ì ¿î¿µÃ¼Á¦¿¡¼´Â ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® À©µµ¿ì°¡ Á¦°øÇÏ´Â ¹öÆ° ÄÄÆ÷³ÍÆ®¸¦ ºô¾î¾²°í, À¯´Ð½º ¿î¿µÃ¼Á¦¿¡¼´Â X À©µµ¿ì ½Ã½ºÅÛÀÌ Á¦°øÇÏ´Â ¹öÆ° À§Á¬À» ºô¾î¾¹´Ï´Ù. ±×·¡¼, ÀÚ¹Ù ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â ¿î¿µ üÁ¦¿¡ µû¶ó ±× ¸ð¾çÀÌ Á¶±Ý¾¿ ´Ù¸£°Ô ³ªÅ¸³ª´Â ´ÜÁ¡ÀÌ ÀÖ¾ú½À´Ï´Ù.
½ºÀ® ÄÄÆ÷³ÍÆ®´Â AWT À©µµ¿ì ÄÄÆ÷³ÍÆ®ÀÇ ÀÌ·± ÇѰ踦 ±Øº¹ÇÏ¿© ÀÚ¹Ù¿¡ °íÀ¯ÇÑ ÄÄÆ÷³ÍÆ®·Î ¼³°èµÇ¾ú½À´Ï´Ù. ÀÚ¹Ù ÄÚµå·Î °¢ ÄÄÆ÷³ÍÆ®µéÀÇ ¿Ü¾ç°ú ±â´ÉÀ» ¿ÏÀüÈ÷ »õ·Ó°Ô ¼³°èÇÏ¿´±â ¶§¹®¿¡ °¢ ¿î¿µÃ¼Á¦°¡ Á¦°øÇÏ´Â À©µµ¿ì ½Ã½ºÅÛ¿¡ ´ëÇÑ ÀÇÁ¸µµ°¡ ¾øÀ¸¸ç ¾ÆÁÖ Àß»ý±ä µ¥´Ù°¡ ±â´Éµµ ´Ù¾çÇØÁ³½À´Ï´Ù.
<±×¸²> ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥
½ºÀ® ÄÄÆ÷³ÍÆ®´Â ÈçÈ÷ JFC¶ó°íµµ ºÒ·ÁÁö´Âµ¥ ¿©±â¿¡¼ JFC´Â ÀÚ¹Ù ÆÄ¿îµ¥ÀÌ¼Ç Å¬·¡½º(Java Foundation Class)ÀÇ ¸Ó¸®±ÛÀÚÀÔ´Ï´Ù.
»ç½Ç JFC´Â ½ºÀ® ÄÄÆ÷³ÍÆ® ±â¼ú¸¸À» ÁöĪÇÏ´Â À̸§ÀÌ ¾Æ´Ï¶ó, JDK 1.0 ¹öÀü(ÇöÀç´Â 1.2¹öÀüÀÔ´Ï´Ù)ÀÇ AWT Ŭ·¡½º ±â´ÉÀ» ´ëüÇÒ »õ·Î¿î ´ÙÁß Ç÷§Æû »ç¿ëÀÚ ÀÎÅÍÆäÀ̽ºÀÎ ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ ÇÙ½ÉÀ¸·Î, °³¼±µÈ ±×·¡ÇÈ ±â´ÉÀÎ 2D ±×·¡ÇÈ, ½ÅüºÎÀÚÀ¯ÀÚ¿¡ ´ëÇÑ Áö¿ø, ±×¸®°í ±âÁ¸ÀÇ AWT µî »õ·Î¿î ÀÚ¹ÙÀÇ ±×·¡ÇÈ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¿Í ±×·¡ÇÈ ±â´É¿¡ °ü·ÃµÈ ÇÙ½É ±â¹Ý ±â¼úÀ» Á¦°øÇϴ Ŭ·¡½ºµéÀ» Æ÷°ýÇÏ´Â À̸§ÀÔ´Ï´Ù. JFCÀÇ ÀÎÅÍ³Ý È¨ÆäÀÌÁö´Â http://java.sun.com/products/jfc ÀÌ¸ç ¿©±â¿¡¼ JFC¿¡ ´ëÇÑ ÃÖ±ÙÀÇ ¼Ò½ÄÀ» Á¢ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿©±â¿¡¼´Â ÀÚ¹ÙÀÇ ¾Æ¸§´Ù¿î ½ºÀ® ÄÄÆ÷³ÍÆ®¿Í ±×·¡ÇÈ ±â´ÉÀ» Å©°Ô È®ÀåÇÑ 2D ±×·¡ÇÈÀ» ´Ù·ì´Ï´Ù. ½ºÀ® ÄÄÆ÷³ÍÆ®¿¡ ´ëÇÑ ¼³¸íÀº AWT ÄÄÆ÷³ÍÆ®¸¦ ÀÌÇØÇÏ°í ÀÖ´Ù´Â ÀüÁ¦ ÇÏ¿¡¼ ÁøÇàÇÒ °ÍÀ̹ǷÎ, Ȥ½Ã AWT À©µµ¿ì ½Ã½ºÅÛ¿¡ ´ëÇؼ »ý¼ÒÇϽŠµ¶ÀÚµéÀÌ °è½Ã´Ù¸é ¸ÕÀú AWT À©µµ¿ì ½Ã½ºÅÛ¿¡ ´ëÇÏ¿© °øºÎÇÏ½Ç ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.
1. »õ·Î¿î ¾ó±¼, ½ºÀ® ¼Â
½ºÀ® ¼ÂÀº ÀÚ¹Ù 2¿¡ Æ÷ÇÔµÈ »õ·Î¿î »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º ÄÄÆ÷³ÍÆ®µéÀÇ ÁýÇÕÀ» °¡¸®Å°´Â ¸»ÀÔ´Ï´Ù.
ÀÚ¹Ù 2°¡ µîÀåÇϱâ ÀÌÀü¿¡´Â AWT ÄÄÆ÷³ÍÆ®µéÀÌ Á¦°øµÇ¾ú´Âµ¥ À̵éÀº ÀÚ¹Ù°¡ ½ÇÇàµÇ´Â ¿î¿µ üÁ¦¿¡¼ Á¦°øÇÏ´Â À©µµ¿ì ½Ã½ºÅÛÀÇ ÄÄÆ÷³ÍÆ®µéÀ» ºô¾î¼ ÀÚ¹ÙÀÇ À©µµ¿ì ±â´ÉÀ» ½ÇÇöÇÏ´Â ¹æ½ÄÀ» äÅÃÇÏ°í ÀÖ¾ú½À´Ï´Ù. ÀÌ ¹æ½Ä¿¡¼´Â ÀÚ¹ÙÀÇ °¢ À©µµ¿ì ÄÄÆ÷³ÍÆ®¿¡ ÇØ´çÇÏ´Â ¿î¿µ üÁ¦ À©µµ¿ì ½Ã½ºÅÛÀÇ ÄÄÆ÷³ÍÆ®¸¦ ÇÊ¿ä·Î ÇÏ¿´±â ¶§¹®¿¡ ¼öÇà ¼º´ÉÀ̳ª ±¸ÇöÀÇ ÀÌÁ¡ÀÌ ÀÖ¾úÁö¸¸, ±âÁ¸ ÄÄÆ÷³ÍÆ®µéÀÇ Á¦¾àÀ¸·Î ÀÎÇØ ´Ù¾çÇÑ ±â´ÉÀ» Á¦°øÇÒ ¼ö ¾ø¾ú°í, ½ÇÇàµÇ´Â ¿î¿µ üÁ¦¿¡ µû¶ó ½ÇÇàµÇ´Â ÇÁ·Î±×·¥ÀÇ ¸ð½ÀÀÌ Á¶±Ý¾¿ ´Þ¶óÁö´Â ´ÜÁ¡ÀÌ ÀÖ¾ú½À´Ï´Ù.
½ºÀ® ÄÄÆ÷³ÍÆ®µéÀº ÀÚ¹Ù°¡ Á÷Á¢ °¢ ÄÄÆ÷³ÍÆ®µéÀ» ·»´õ¸µÇÏ°í ±â´ÉÀ» ±¸ÇöÇÏ´Â »õ·Î¿î ±â¼úÀÎ °æ·®(lightweight) ÄÄÆ÷³ÍÆ® ±â¹ýÀ» Àû¿ëÇÏ¿© ¸¸µç ÄÄÆ÷³ÍÆ®µé·Î ±â¹Ý ¿î¿µ üÁ¦ÀÇ À©µµ¿ì ½Ã½ºÅÛ¿¡ ´ëÀÀÇÏ´Â ÄÄÆ÷³ÍÆ®°¡ ÀÖÀ» ÇÊ¿ä°¡ ¾ø¾î, Æí¸®ÇÏ°í ´Ù¾çÇÑ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ ±âº»À¸·Î Æ÷ÇÔÇÑ ÀÚ¹Ù 2 Ç÷§ÆûÀÌ °³¹ßµµ±¸ÀÎ JDK 1.2 ¹öÀü°ú ÇÔ²² 1998³â ¸»¿¡ ¼Ò°³µÇ¸é¼, ½ºÀ® ÄÄÆ÷³ÍÆ®´Â ±âÁ¸ÀÇ AWT ÄÄÆ÷³ÍÆ®µéÀ» Á¦Ä¡°í ÀÚ¹ÙÀÇ Ç¥ÁØ ÀÎÅÍÆäÀ̽º·Î °¢±¤¹Þ°í ÀÖ½À´Ï´Ù. ÀÌÁ¦ ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀ» ¸¸³ªº¼±î¿ä?
1.1 ½ºÀ® ÄÄÆ÷³ÍÆ®µé
javax.swing ÆÐÅ°Áö¿¡´Â ´Ù¾çÇÑ ½ºÀ® ÄÄÆ÷³ÍÆ® Ŭ·¡½ºµéÀÌ µé¾î ÀÖ½À´Ï´Ù. ¸ÕÀú ´ÙÀ½°ú °°Àº AWT ÄÄÆ÷³ÍÆ®¿¡ ´ëÀÀÇÏ´Â ½ºÀ® ÄÄÆ÷³ÍÆ® Ŭ·¡½ºµéÀÌ Á¸ÀçÇÕ´Ï´Ù. ÀÌµé ½ºÀ® ÄÄÆ÷³ÍÆ®ÀÇ À̸§Àº ´ëºÎºÐ AWTÀÇ ÄÄÆ÷³ÍÆ® Ŭ·¡½ºµé À̸§ ¾Õ¿¡ ÀÚ¹ÙÀÇ Ã¹ ¿µ¹®ÀÚÀÎ 'J'¸¦ ºÙÀÎ ¸ð¾çÀ» ÇÏ°í ÀÖ½À´Ï´Ù.
JButton, JMenuItem, JMenu, JCheckBox, JLabel, JList, JMenuBar, JPanel, JPopupMenu, JScrollBar, JScrollPane, JTextArea, JTextField, JApplet, JDialog, JFrame, JWindow
½ºÀ® ÄÄÆ÷³ÍÆ®µéÀº ´Ü¼øÈ÷ AWT ÄÄÆ÷³ÍÆ®µéÀ» ´Ù½Ã ±¸ÇöÇÏ´Â µ¥ ±×Ä¡Áö ¾Ê°í ±â´ÉÀ» ´ëÆø °³¼±ÇÏ¿´À¸¸ç »Ó¸¸ ¾Æ´Ï¶ó À¯¿ëÇÑ »õ·Î¿î ÄÄÆ÷³ÍÆ®µéÀ» ¿©·µ ¼±º¸¿´½À´Ï´Ù. AWT ÄÄÆ÷³ÍÆ®¿¡ ´ëÀÀÇÏ´Â ÄÄÆ÷³ÍÆ®µéµµ ´ëºÎºÐ AWT ÄÄÆ÷³ÍÆ®ÀÇ »ç¿ë ¹æ¹ýÀ» Áö¿øÇϱä ÇÏÁö¸¸ ¿Ü¾çµµ ¸¹ÀÌ ´Þ¶óÁö°í ¸Þ½îµåµéÀÌ ¸¹ÀÌ Ãß°¡µÇ¾úÀ¸¹Ç·Î JDK 1.2 API ¹®¼¸¦ ²À ÀоîºÁ¾ß ÇÕ´Ï´Ù.
»õ·Î Ãß°¡µÈ ÄÄÆ÷³ÍÆ®µéÀ» °£´ÜÈ÷ ¼Ò°³ÇÏ¸é ´ÙÀ½°ú °°½À´Ï´Ù.
¡Ü JCheckBoxMenuItem, JRadioButtonMenuItem : üũ¹Ú½º ȤÀº ¶óµð¿À ¹öÆ° Çü½ÄÀÇ ¸Þ´º Ç׸ñ ÄÄÆ÷³ÍÆ®
<±×¸²> JCheckBoxMenuItem°ú JRadioButtonMenuItem
¡Ü JRadioButton : ¶óµð¿À ¹öÆ° ÄÄÆ÷³ÍÆ®. AWT ÄÄÆ÷³ÍÆ®¿¡¼´Â CheckboxGroup Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© Checkbox ÄÄÆ÷³ÍÆ®·Î ¶óµð¿À ¹öÆ°À» ±¸ÇöÇÏÁö¸¸ ½ºÀ® ÄÄÆ÷³ÍÆ®¿¡¼´Â º°µµÀÇ ¶óµð¿À ¹öÆ° ÄÄÆ÷³ÍÆ®¸¦ Á¦°ø
<±×¸²> JRadioButton
¡Ü JColorChooser : ¿øÇÏ´Â »ö±òÀ» Á÷Á¢ º¸¸é¼ ¼±ÅÃÇÒ ¼ö ÀÖ´Â ´ëÈ»óÀÚ ÄÄÆ÷³ÍÆ®
<±×¸²> JColorChooser
¡Ü JComboBox : JComboBox ÄÄÆ÷³ÍÆ®´Â AWT ÄÄÆ÷³ÍÆ®ÀÇ Choice¿¡ ÇØ´çÇÏ´Â ½ºÀ® ÄÄÆ÷³ÍÆ®. ¿©·¯ °³ ÁßÀÇ Çϳª¸¦ ¼±ÅÃÇÒ ¼öµµ ÀÖÀ¸¸ç ÇöÀç ¼±ÅÃµÈ ¹®ÀÚ¿À» ÆíÁýÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
<±×¸²> JComboBox
¡Ü JFileChooser : AWT ÄÄÆ÷³ÍÆ®ÀÇ FileDialog¿¡ ÇØ´çÇÏ´Â ½ºÀ® ÄÄÆ÷³ÍÆ®ÀÔ´Ï´Ù. ÆÄÀÏÀ» ¼±ÅÃÇÒ ¶§ »ç¿ëÇϸç À̹ÌÁö ÆÄÀÏÀÇ °æ¿ì ¹Ì¸® º¸±â ±â´ÉÀ» Áö¿øÇÕ´Ï´Ù.
<±×¸²> JFileChooser
¡Ü JInternalFrame : ÄÁÅ×ÀÌ³Ê ³»ºÎ¿¡ ÇÁ·¹ÀÓÀ» ¸¸µé ¼ö ÀÖ´Â ÄÄÆ÷³ÍÆ®
<±×¸²> JInternalFrame
¡Ü JProgressBar : ÁøÇà »óȲÀ» ±×·¡ÇÈÀ¸·Î º¸¿©ÁÖ´Â ÄÄÆ÷³ÍÆ®
<±×¸²> JProgressBar
¡Ü JSlider : ´«±ÝÀ̳ª Å©±â¸¦ ³ªÅ¸³»´Â ÄÄÆ÷³ÍÆ®.
<±×¸²> JSlider
¡Ü JSplitPane : À©µµ¿ì ³»ºÎ¸¦ ºÐÇÒÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Â ÄÄÆ÷³ÍÆ®
<±×¸²> JSplitPane ÄÄÆ÷³ÍÆ® »ç¿ë ¿¹Á¦
¡Ü JTabbedPane : ¿©·¯ °³ÀÇ À©µµ¿ì Áß ¼±ÅÃµÈ ÇÑ È¸é¸¸ º¸¿©ÁÖ´Â À©µµ¿ì·Î AWTÀÇ CardLayoutÀ» »ç¿ëÇÏ¿© ±¸ÇöÇÑ À©µµ¿ìµé°ú À¯»çÇÑ ±â´ÉÀ» °¡Áö°í ÀÖ½À´Ï´Ù.
<±×¸²> JTabbedPane
¡Ü JTable : Ç¥¸¦ Ç¥ÇöÇÏ´Â ÄÄÆ÷³ÍÆ®
<±×¸²> JTable
¡Ü JTextPane : ¼½ÄÀ» °¡Áø ÅؽºÆ®¿Í À̹ÌÁö¸¦ »ç¿ëÇÏ¿© Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¹®¼ â ÄÄÆ÷³ÍÆ®. ¼½Ä ÀÖ´Â ¹®¼, RTF ¹®¼, HTML ¹®¼ µîÀ» Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
<±×¸²> JTextPane
¡Ü JPasswordField : Æнº¿öµå¸¦ ÀԷ¹޴ ÅؽºÆ®Çʵå ÄÄÆ÷³ÍÆ®
<±×¸²> JPasswordField
¡Ü JToolBar : ¸í·É ¾ÆÀÌÄÜ ¹Ú½º ÄÄÆ÷³ÍÆ®·Î ¸Þ´º ¾Æ·¡¿¡ ºÙÀ» ¼öµµ ÀÖ°í ÇÁ·¹ÀÓÀ¸·ÎºÎÅÍ ¶¼³¾ ¼öµµ ÀÖ½À´Ï´Ù.
<±×¸²> JToolBar
¡Ü JToolTip : ¸¶¿ì½º ¿òÁ÷ÀÓ¿¡ µû¶ó ÇöÀç ¸¶¿ì½º°¡ À§Ä¡ÇÑ ºÎºÐ¿¡ ´ëÇÑ Ç³¼± µµ¿ò¸»À» Á¦°øÇÏ´Â ÄÄÆ÷³ÍÆ®
<±×¸²> JToolTip
¡Ü JTree : ³ª¹« ¸ð¾çÀÇ °èÃþ ±¸Á¶¸¦ Ç¥ÇöÇÏ´Â ÄÄÆ÷³ÍÆ®
<±×¸²> JTree
1.2 AWT Äڵ带 ½ºÀ® ÄÚµå·Î ¹Ù²Ù±â
½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀº ±âº»ÀûÀÎ ¸Þ½îµåµéÀÇ °æ¿ì¿¡´Â AWTÀÇ ´ëÀÀÇÏ´Â ÄÄÆ÷³ÍÆ®µéÀÇ »ç¿ë¹ý°ú °ÅÀÇ µ¿ÀÏÇÕ´Ï´Ù. ±×·¡¼, AWT ÄÄÆ÷³ÍÆ®µé·Î ÀÛ¼ºÇÑ ÇÁ·Î±×·¥µéÀ» ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇϵµ·Ï ¹Ù²Ù´Â µ¥¿¡´Â ¸î °¡Áö Á¡¸¸ ¿°µÎ¿¡ µÎ¸é Å« ¾î·Á¿òÀº ¾ø½À´Ï´Ù.
ù°, java.awt, java.awt.event ÆÐÅ°Áö¿Í ´õºÒ¾î ½ºÀ® ÄÄÆ÷³ÍÆ® Ŭ·¡½ºµéÀÌ Æ÷ÇÔµÈ ÆÐÅ°Áöµé Áï, javax.swing ÆÐÅ°Áö¿Í javax.swing.event ÆÐÅ°Áö¸¦ ÀÓÆ÷Æ®ÇÕ´Ï´Ù.
µÑ°, °¢ AWT ÄÄÆ÷³ÍÆ® Ŭ·¡½º À̸§µéÀ» ´ëÀÀÇÏ´Â ½ºÀ® ÄÄÆ÷³ÍÆ® Ŭ·¡½º À̸§À¸·Î º¯°æÇÕ´Ï´Ù. ¸¹Àº °æ¿ì¿¡´Â Ŭ·¡½º À̸§ ¾Õ¿¡ 'J'¸¸ ºÙ¿©ÁÖ¸é µÉ °ÍÀÔ´Ï´Ù.
¼Â°, ¸Þ½îµåµé Áß À̸§À̳ª »ç¿ë¹ýÀÌ ´Ù¸¥ °æ¿ì¿¡´Â ã¾Æ¼ º¯°æÇØÁÖ¾î¾ß ÇÕ´Ï´Ù.
°£´ÜÇÑ ¿¹Á¦¸¦ ¹Ù²Ù¾î º¸¸é¼ ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÒ ¶§ AWT ÄÄÆ÷³ÍÆ®¿Í ´Ù¸£°Ô ó¸®ÇØ¾ß ÇÏ´Â ºÎºÐµéÀÌ ¹«¾ùÀÎÁö ¤¾îº¾½Ã´Ù.
¸ÕÀú °£´ÜÇÑ AWT ¿¹Á¦ÀÔ´Ï´Ù.
import java.awt.*; import java.awt.event.*; public class AWTComponent extends Frame implements ActionListener { // ¹öÆ°ÀÇ ½ÇÇà À̺¥Æ® ó¸® // ÇÁ·¹ÀÓÀÇ »ý¼ºÀÚ AWTComponent(String title) { super(title); // ¸Þ´º¹Ù »ý¼º MenuBar menuBar=new MenuBar(); // ÆÄÀÏ ¸Þ´º¸¦ »ý¼ºÇÏ¿© ¸Þ´º¹Ù¿¡ Ãß°¡ Menu fileMenu = new Menu("File"); menuBar.add(fileMenu); // ÆÄÀÏ ¸Þ´ºÀÇ °¢ ¸Þ´º Ç׸ñÀ» »ý¼º fileMenu.add(new MenuItem("Open")); fileMenu.add(new MenuItem("Save")); fileMenu.addSeparator(); fileMenu.add(new MenuItem("Print")); fileMenu.addSeparator(); // Á¾·á ¸Þ´º Ç׸ñÀº ´ÜÃàÅ°¸¦ ¸¸µé°í ½ÇÇà À̺¥Æ® ó¸® °´Ã¼¸¦ µî·ÏÇÑ´Ù. MenuItem exitItem = new MenuItem("Exit", new MenuShortcut('X')); fileMenu.add(exitItem); exitItem.setActionCommand("Exit"); exitItem.addActionListener(this); // ¸Þ´º¹Ù¸¦ ÇÁ·¹ÀÓ¿¡ Ãß°¡ÇÑ´Ù. setMenuBar(menuBar); // ¹öÆ°°ú ÅؽºÆ®¿µ¿ªÀ» °¢°¢ ÇÁ·¹ÀÓ¿¡ Ãß°¡ÇÑ´Ù. Button button=new Button("Exit"); add(button, "South"); button.addActionListener(this); TextArea text=new TextArea(); add(text, "Center"); text.setText("AWT ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù."); } // main() ¸Þ½îµå public static void main(String args[]) { AWTComponent frame=new AWTComponent("AWT UI Program"); frame.setSize(300, 300); frame.setVisible(true); } // ½ÇÇà À̺¥Æ®°¡ ¹ß»ýÇϸé Á¾·áÇÑ´Ù. public void actionPerformed(ActionEvent evt) { String cmd=evt.getActionCommand(); if (cmd.equals("Exit")) System.exit(0); } }<¿¹Á¦> AWTComponent ÇÁ·Î±×·¥
ÀÌ ÇÁ·Î±×·¥À» À§ÀÇ ¹æ¹ý¿¡ µû¶ó ½ºÀ® ÄÄÆ÷³ÍÆ® ÇÁ·Î±×·¥À¸·Î º¯°æÇÏ¸é ´ÙÀ½°ú °°ÀÌ ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù. º¼µåü·Î Ç¥½ÃµÈ ºÎºÐÀÌ º¯°æµÈ ºÎºÐµéÀÔ´Ï´Ù.
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SwingComponent extends JFrame implements ActionListener { // »ý¼ºÀÚ SwingComponent(String title) { super(title); JMenuBar menuBar=new JMenuBar(); JMenu fileMenu = new JMenu("File"); menuBar.add(fileMenu); fileMenu.add(new JMenuItem("Open")); fileMenu.add(new JMenuItem("Save")); fileMenu.addSeparator(); fileMenu.add(new JMenuItem("Print")); fileMenu.addSeparator(); JMenuItem exitItem = new JMenuItem("Exit", 'X'); fileMenu.add(exitItem); exitItem.setActionCommand("Exit"); exitItem.addActionListener(this); setJMenuBar(menuBar); JButton button=new JButton("Exit"); getContentPane( ).add(button, "South"); button.addActionListener(this); JTextArea text=new JTextArea(); getContentPane( ).add(text, "Center"); text.setText("Swing ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù."); } // main ¸Þ½îµå public static void main(String args[]) { SwingComponent frame=new SwingComponent("Swing UI Program"); frame.setSize(300, 300); frame.setVisible(true); } public void actionPerformed(ActionEvent evt) { String cmd=evt.getActionCommand(); if (cmd.equals("Exit")) System.exit(0); } }<¿¹Á¦> ½ºÀ® ÄÄÆ÷³ÍÆ®·Î º¯°æµÈ ÄÚµå
getContentPane() AWT ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÏ´Â Äڵ带 ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇϵµ·Ï º¯°æÇÑ SwinComponent.java Äڵ带 º¸¸é À§¿¡¼ Á¦½ÃµÈ ¼¼ °¡Áö ±ÔÄ¢À» µû¸£Áö ¾ÊÀº °ÍÀº °ÅÀÇ ¾ø½À´Ï´Ù. ÇÏÁö¸¸ Á¶±Ý ´õ ÀÚ¼¼È÷ º¸¸é Áß¿äÇÑ ´Ù¸¥ Á¡ÀÌ ÀÖ½À´Ï´Ù. ¹Ù·Î ¹öÆ°°ú ÅؽºÆ®¿µ¿ªÀ» ÇÁ·¹ÀÓ¿¡ Ãß°¡ÇÏ´Â Äڵ忡¼ getContentPane()À̶ó´Â Á¶±Ý »ý¼ÒÇÑ ¸Þ½îµå¸¦ È£ÃâÇÕ´Ï´Ù.
getContentPane( ).add(button, "South");
AWT¿Í ¸¶Âù°¡Áö·Î ½ºÀ®¿¡µµ ÄÄÆ÷³ÍÆ®µéÀ» Ãß°¡ÇÏ¿© ¹èÄ¡ÇÒ ¼ö ÀÖ´Â ÄÁÅ×ÀÌ³Ê ¿ªÇÒÀ» ÇÏ´Â ÄÄÆ÷³ÍÆ®µéÀÌ Á¸ÀçÇÕ´Ï´Ù. JFrame, JApplet, JDialog, JWindow°¡ ¹Ù·Î ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀÇ ÄÁÅ×ÀÌ³Ê ÄÄÆ÷³ÍÆ®µéÀÔ´Ï´Ù. À̵é ÄÁÅ×ÀÌ³Ê ÄÄÆ÷³ÍÆ®µéÀº ½ÇÁ¦·Î´Â ÀÚ½Ä À©µµ¿ì ÄÄÆ÷³ÍÆ®µéÀ» ¹èÄ¡ÇÏ°í °ü¸®ÇÏ´Â ÀÏÀ» º°µµÀÇ ÄÁÅ×ÀÌ³Ê ÄÄÆ÷³ÍÆ®¿¡°Ô À§ÀÓÇÏ´Â ¹æ½ÄÀ» äÅÃÇÏ°í ÀÖ½À´Ï´Ù. ±×·¡¼ À©µµ¿ì ÄÄÆ÷³ÍÆ®µéÀ» ÀÌµé ½ºÀ® ÄÁÅ×ÀÌ³Ê ÄÄÆ÷³ÍÆ®¿¡ Ãß°¡ÇÒ ¶§¿¡´Â º¸ÀÌÁö ¾Ê´Â ÀÌ º°µµÀÇ ÄÁÅ×ÀÌ³Ê ÄÄÆ÷³ÍÆ®¿¡°Ô Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ÄÁÅ×ÀÌ³Ê ÄÄÆ÷³ÍÆ®¸¦ contentPaneÀ̶ó°í ÇÕ´Ï´Ù. contentPane °´Ã¼¿¡°Ô ¿äûÇØ¾ß °Í¿¡´Â ÄÄÆ÷³ÍÆ® Ãß°¡»Ó¸¸ ¾Æ´Ï¶ó ÄÄÆ÷³ÍÆ®µéÀÇ ·¹À̾ƿô °ü¸®ÀÚ ÁöÁ¤µµ Æ÷ÇԵ˴ϴÙ. Áï, ½ºÀ® ÄÁÅ×ÀÌ³Ê ÄÄÆ÷³ÍÆ®ÀÇ ·¹À̾ƿô °ü¸®ÀÚ¸¦ FlowLayoutÀ¸·Î º¯°æÇÏ°í ½Í´Ù¸é ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î »ç¿ëÇÏ¸é µË´Ï´Ù. Container contentPane = getContentPane( ); contentPane.setLayout(new FlowLayout( )); contentPane.add(new JButton("¹öÆ°")); |
½ºÀ® ÄÄÆ÷³ÍÆ®¿Í AWT ÄÄÆ÷³ÍÆ®¸¦ ¼¯À¸¸é? ½ºÀ® ÄÄÆ÷³ÍÆ®¿Í AWT ÄÄÆ÷³ÍÆ®¸¦ ¼¯¾î¼ »ç¿ëÇÏ¸é ¾î¶»°Ô µÉ±î¿ä? óÀ½ ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÑ´Ù¸é Àͼ÷ÇØÁ® ÀÖ´ø AWT ÄÄÆ÷³ÍÆ®¸¦ °è¼Ó »ç¿ëÇÏ°í AWT ÄÄÆ÷³ÍÆ®°¡ ¾ø´Â ºÎºÐ¸¸ ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇϸé Æí¸®ÇÒ °Í °°½À´Ï´Ù. ÇÏÁö¸¸, ÀÌ°ÍÀº °ï¶õÇÑ ¹®Á¦¸¦ ¾È°í ÀÖ½À´Ï´Ù. AWT ÄÄÆ÷³ÍÆ®µéÀº ºÒÅõ¸íÇÑ À©µµ¿ì ½Ã½ºÅÛÀÇ ÄÄÆ÷³ÍÆ®µéÀ» ºô¾î »ç¿ëÇÏ´Â ÄÄÆ÷³ÍÆ®µéÀÌ°í ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀº ÀÚ¹Ù·Î Á÷Á¢ ·»´õ¸µÇÏ°í ±â´ÉÀ» ó¸®ÇÏ´Â Åõ¸íÇÑ ÄÄÆ÷³ÍÆ®µéÀÔ´Ï´Ù. À̵é AWT ÄÄÆ÷³ÍÆ®¿Í ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ ÇÔ²² ¹èÄ¡ÇÒ °æ¿ì ÄÄÆ÷³ÍÆ®¸¦ Ãß°¡ÇÑ ¼ø¼¿¡ °ü°è¾øÀÌ Ç×»ó AWT ÄÄÆ÷³ÍÆ®µéÀÌ ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ µ¤¾î½á¹ö¸®°Ô µË´Ï´Ù. ´ÙÀ½ ±×¸²Àº °£´ÜÇÑ ¿¹¸¦ º¸¿©ÁÝ´Ï´Ù. ¼¼ °³ÀÇ ¹öÆ° Áß µÎ °³(¶óº§ÀÌ Light¿Í Light2)´Â JButtonÀ̸ç Çϳª(¶óº§ÀÌ Heavy)´Â ButtonÀÔ´Ï´Ù. ¹öÆ°À» Ãß°¡ÇÑ ¼ø¼´Â Light, Heavy, Light2 ¼ø¼ÀÌÁö¸¸ ½ÇÁ¦·Î µð½ºÇ÷¹À̵DZâ´Â Heavy ·¹À̺íÀ» °¡Áø AWT Button ÄÄÆ÷³ÍÆ®°¡ µÎ ½ºÀ® ¹öÆ° ÄÄÆ÷³ÍÆ®µé À§¿¡ ³ªÅ¸³ª°Ô µË´Ï´Ù. ¼¯¾î¼ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÃÖ¼±À̶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.
<±×¸²> AWT ÄÄÆ÷³ÍÆ®¿Í ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ ÇÔ²² »ç¿ëÇÑ ¿¹ |
1.3 ½ºÀ® ÄÁÅ×À̳ʵé
¸ðµç ½ºÀ® ÄÄÆ÷³ÍÆ®°¡ °æ·® ÄÄÆ÷³ÍÆ®ÀÎ °ÍÀº ¾Æ´Õ´Ï´Ù. ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ ´ã´Â ´ÙÀ½ ³× °¡Áö ½ºÀ® ÄÁÅ×ÀÌ³Ê Å¬·¡½º´Â Áß·®ÀÎ AWT ÄÄÆ÷³ÍÆ® À§¿¡ Ưº°ÇÑ ¼³°è¸¦ ÇÏ¿© ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀ» Ãß°¡ÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿´½À´Ï´Ù.
Áß·® ÄÄÆ÷³ÍÆ®ÀÎ ³× °¡Áö ½ºÀ® ÄÁÅ×ÀÌ³Ê ÄÄÆ÷³ÍÆ®´Â ´ÙÀ½°ú °°½À´Ï´Ù.
¡Ü JFrame : Frame Ŭ·¡½º¸¦ »ó¼ÓÇÏ¿© ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ Ãß°¡ÇÒ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù.
¡Ü JDialog : Dialog Ŭ·¡½º¸¦ »ó¼ÓÇÏ¿© ¿©·¯ °¡Áö ´ëÈ »óÀÚ¸¦ ½ºÀ® ÄÄÆ÷³ÍÆ®µé·Î ±¸ÇöÇÏ°Ô ÇØÁÝ´Ï´Ù.
¡Ü JWindow : Window Ŭ·¡½º¸¦ »ó¼ÓÇÏ¿© ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ Ãß°¡ÇÒ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù.
¡Ü JApplet : Applet Ŭ·¡½º¸¦ »ó¼ÓÇÏ¿© ¾ÖÇø´¿¡ ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ Ãß°¡ÇÒ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù. ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÏ´Â ¾ÖÇø´À» ÀÛ¼ºÇÒ ¶§¿¡´Â ¹Ýµå½Ã Applet Ŭ·¡½º°¡ ¾Æ´Ï¶ó JApplet Ŭ·¡½º¸¦ »ó¼ÓÇÏ¿© ¸¸µé¾î¾ß ÇÔÀ» Àؾ ¾ÈµË´Ï´Ù.
ÀÌµé ³× °¡Áö ½ºÀ® ÄÁÅ×ÀÌ³Ê Å¬·¡½ºµéÀº ¸ðµÎ RootPaneContainer¶ó´Â °øÅëÀÇ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ¿© ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ Ãß°¡Çϵµ·Ï ¼³°èµÇ¾ú½À´Ï´Ù. ÀÌ ¿Ü¿¡µµ ÇÁ·¹ÀÓ ¾È¿¡ ³»ºÎ ÇÁ·¹ÀÓ À©µµ¿ì¸¦ ±¸ÇöÇÏ°Ô ÇØÁÖ´Â ½ºÀ® ÄÁÅ×À̳ÊÀÎ JInternalFrame Ŭ·¡½ºµµ µ¿ÀÏÇÑ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ¿© ½ºÀ® ÄÁÅ×À̳ʵéÀº ÅëÀÏµÈ ¹æ½ÄÀ¸·Î ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀ» Ãß°¡, °ü¸®ÇÕ´Ï´Ù.
<±×¸²> ½ºÀ® ÄÁÅ×ÀÌ³Ê Å¬·¡½º °èÃþ »ó¼Ó ±¸Á¶
RootPaneContainer ÀÎÅÍÆäÀ̽º´Â JRootPane °´Ã¼¸¦ »ç¿ëÇÏ¿© ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀ» °ü¸®ÇÏ°Ô ÇϹǷÎ, JRootPane °´Ã¼¸¦ »ìÆ캸¸é ½ºÀ® ÄÁÅ×À̳ʰ¡ ½ºÀ® ÄÄÆ÷³ÍÆ®¸¦ °ü¸®ÇÏ´Â ±âº»ÀûÀÎ ¹æ¹ýÀ» ÀÌÇØÇÒ ¼ö ÀÖ½À´Ï´Ù.
JRootPaneÀº ½ºÀ® ÄÁÅ×À̳ʵéÀÇ ¸ðµç µ¿ÀÛÀ» À§ÀÓ¹ÞÀº ½ºÀ® ÄÄÆ÷³ÍÆ®ÀÌ¸ç ´ÙÀ½ ³× °¡Áö ¼·Î ´Ù¸¥ ±â´ÉÀ» ÇÏ´Â ÄÄÆ÷³ÍÆ®µé·Î ±¸¼ºµË´Ï´Ù.
<±×¸²> JRootPaneÀ» ±¸¼ºÇÏ´Â À©µµ¿ìµéÀÇ À©µµ¿ì °èÃþ ±¸Á¶
¡Ü ÀÚ½Ä ÄÄÆ÷³ÍÆ® À©µµ¿ì¸¦ ´ã´Â ºÎºÐ (contentPane) : ¸ðµç ÀÚ½Ä ½ºÀ® ÄÄÆ÷³ÍÆ® À©µµ¿ìµéÀÇ ºÎ¸ð À©µµ¿ì°¡ µË´Ï´Ù. rootPane¿¡ Á÷Á¢ ÀÚ½Ä ÄÄÆ÷³ÍÆ®¸¦ Ãß°¡Çؼ´Â ¾ÈµÇ¸ç ¹Ýµå½Ã contentPane¿¡ Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù.
¡Ü Åõ¸íÇÑ ºÎºÐ (glassPane) : ÀÌ ºÎºÐÀº Àüü ½ºÀ® ÄÁÅ×À̳ÊÀÇ ¸ðµç À̺¥Æ®¸¦ °¡·Îç ¼ö ÀÖµµ·Ï Ưº°È÷ ¼³°èµÈ Åõ¸íÇÑ ÄÄÆ÷³ÍÆ®ÀÔ´Ï´Ù. Ç×»ó Á¸ÀçÇÏ¸ç ´ëºÎºÐÀÇ °æ¿ì º¸ÀÌÁö ¾Ê½À´Ï´Ù.
¡Ü ÃþÀ» ±¸¼ºÇÏ´Â ºÎºÐ (layeredPane) : JLayeredPane Ŭ·¡½ºÀÇ ÀνºÅϽº °´Ã¼ÀÌ¸ç ¿©·¯ ½ºÀ® ÄÁÆ÷³ÍÆ®µéÀÌ °ãÃÄÁú ¶§ °¢ ÄÄÆ÷³ÍÆ®ÀÇ »óÇÏ À§Ä¡¸¦ °áÁ¤ÇÕ´Ï´Ù. Ç×»ó Á¸ÀçÇϸç contentPane°ú menuBar´Â ÀÌ ÄÄÆ÷³ÍÆ®ÀÇ ÀÚ½Ä À©µµ¿ì·Î ±¸¼ºµË´Ï´Ù.
¡Ü ¸Þ´º¹Ù (menuBar) : JMenuBar Ŭ·¡½ºÀÇ ÀνºÅϽº °´Ã¼À̸ç Ç×»ó Á¸ÀçÇÏÁö´Â ¾Ê½À´Ï´Ù.
1.4 BoxLayout »ç¿ëÇϱâ
javax.swing ÆÐÅ°Áö¿¡´Â ½ºÀ® ÄÄÆ÷³ÍÆ® ¿Ü¿¡µµ ¹Ý°¡¿î Ŭ·¡½º°¡ Çϳª µé¾î ÀÖ½À´Ï´Ù. »õ·Î¿î ·¹À̾ƿô °ü¸®ÀÚÀÎ BoxLayout Ŭ·¡½ºÀÔ´Ï´Ù. ¹°·Ð ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀ» ±âÁ¸ÀÇ ·¹À̾ƿô °ü¸®ÀÚ¸¦ »ç¿ëÇÏ¿© ·¹À̾ƿôÇÏ´õ¶óµµ ¾î·Á¿òÀÌ ¾ø±ä ÇÏÁö¸¸ BoxLayout Ŭ·¡½º´Â Á»´õ Æí¸®ÇÏ°í ¿øÇÏ´Â ¸ð¾çÀ¸·Î ÄÄÆ÷³ÍÆ®¸¦ ·¹À̾ƿôÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â Àç°£µÕÀÌ Å¬·¡½ºÀÔ´Ï´Ù.
BoxLayout Ŭ·¡½º´Â °¡·Î ¹æÇâ, ȤÀº ¼¼·Î ¹æÇâÀ¸·Î ÄÄÆ÷³ÍÆ®¸¦ Á¤·Ä½ÃÅ°´Âµ¥, ¿¹¸¦ µé¾î Æгο¡ µÎ °³ÀÇ ¹öÆ°À» Â÷·Ê·Î °¡·Î ¹æÇâÀ¸·Î Ãß°¡½ÃÅ°´Â °æ¿ì¿£ ´ÙÀ½°ú °°ÀÌ BoxLayoutÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
JPanel panel = new JPanel(); // ù ¹ø° ÀÎÀÚ¿¡´Â ·¹À̾ƿôÇÒ ´ë»ó ÄÄÆ÷³ÍÆ®¸¦, // µÎ ¹ø° ÀÎÀÚ¿¡´Â °¡·Î ¹æÇâ Á¤·ÄÀÇ °æ¿ì¿¡´Â BoxLayout.X_AXIS, // ¼¼·Î ¹æÇâ Á¤·ÄÀÇ °æ¿ì¿¡´Â BoxLayout.Y_AXIS¸¦ ÁöÁ¤ÇÑ´Ù. panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); panel.add(new JButton("¹öÆ° 1")); panel.add(new JButton("¹öÆ° 2"));
BoxLayoutÀ» ¼¼·Î ¹æÇâÀ¸·Îµµ Á¤·ÄÀÌ °¡´ÉÇÑ FlowLayoutÀ¸·Î »ý°¢Çϸé ÀÌÇØ°¡ ½±½À´Ï´Ù. ÇÏÁö¸¸ BoxLayoutÀÇ ´É·ÂÀº FlowLayoutÀÇ ´Ü¼øÇÑ È®ÀåÀÌ ¾Æ´Ï¶ó ¼¶¼¼ÇÑ Á¦¾î±îÁö °¡´ÉÇÏ°Ô ÇØÁÝ´Ï´Ù. BoxLayoutÀÇ ·¹À̾ƿô ±â´ÉÀ» µ½±â À§ÇØ Box¶ó´Â º°µµÀÇ Å¬·¡½º°¡ Á¸ÀçÇÕ´Ï´Ù.
Box Ŭ·¡½º´Â ¸î °³ÀÇ static ¸Þ½îµå¸¦ Á¦°øÇÏ¿© ÄÄÆ÷³ÍÆ® »çÀÌ¿¡ °£°ÝÀ» Áְųª ºó ºÎºÐÀ» ä¿ï ¼ö ÀÖ´Â º¸ÀÌÁö ¾Ê´Â ÄÄÆ÷³ÍÆ®µéÀ» ¸¸µé¾îÁÝ´Ï´Ù.
¸Þ½îµå À̸§ |
¿ªÇÒ |
createGlue( ) |
'glue'´Â ¾Æ±³¸¦ ¶æÇÕ´Ï´Ù. ÀÌ ¾Æ±³´Â °¢ ÄÄÆ÷³ÍÆ®¸¦ Àû´çÇÑ Å©±â·Î ¹èÄ¡ÇÏ°í ³µÀ» ¶§ ³²´Â ºÎºÐÀ» ä¿ì´Â ÀÏÀ» ÇÕ´Ï´Ù. ÀÌ º¸ÀÌÁö ¾Ê´Â ¾Æ±³ ÄÄÆ÷³ÍÆ®¸¦ ¸¸µå´Â BoxÀÇ Å¬·¡½ºÀÇ static ¸Þ½îµåµéÀº ´ÙÀ½ ¼ÂÀ¸·Î, Box.createHorizontalGlue() ¸Þ½îµå´Â °¡·Î ¹æÇâ, Box.createVerticalGlue() ¸Þ½îµå´Â ¼¼·Î ¹æÇâ, Box.createGlue() ¸Þ½îµå´Â °¡·Î, ¼¼·Î ¹æÇâÀÇ ¾Æ±³ ÄÄÆ÷³ÍÆ®¸¦ ¸¸µì´Ï´Ù. |
createHorizontalGlue( ) |
|
createVerticalGlue( ) |
|
createRigidArea( ) |
'rigid area'´Â ¸» ±×´ë·Î °íÁ¤µÈ ¿µ¿ªÀ» ³ªÅ¸³À´Ï´Ù. ÀÌ °íÁ¤ ¿µ¿ªÀº ÁöÁ¤ÇÑ Å©±â¸¸Å ÀÚ¸®¸¦ Â÷ÁöÇÏ°Ô µË´Ï´Ù. |
createHorizontalStrut( ) |
'strut'Àº ¹öÆÀ¸ñÀ̶ó´Â ¶æÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ ¹öÆÀ¸ñÀº °¡·Î ȤÀº ¼¼·Î ¹æÇâÀÇ °íÁ¤ °£°ÝÀ» ÁöÁ¤ÇÕ´Ï´Ù. ÇÑÂÊ ¹æÇ⸸ ÀÖ´Â °íÁ¤ ¿µ¿ª°ú ºñ½ÁÇÏÁö¸¸, ´Ù¸¥ Á¡Àº RigidAreaÀÇ °æ¿ì °¡·Î, ¼¼·Î ¸ðµÎ °íÁ¤µÈ Å©±â¸¦ ÁöÁ¤ÇÏÁö¸¸ StrutÀÇ °æ¿ì¿¡´Â °¡·Î, ȤÀº ¼¼·Î ¼ººÐ¸¸ °íÁ¤ Å©±â¸¦ ÁöÁ¤Çϱ⠶§¹®¿¡ ÁöÁ¤µÇÁö ¾ÊÀº ºÎºÐ, Áï HorizontalStrutÀÇ °æ¿ì ¼¼·Î ¹æÇâÀº ¸¶Ä¡ Glueó·³ ä¿ì´Â ¿ªÇÒÀ» ¼öÇàÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ÁöÁ¤µÇÁö ¾ÊÀº ÇÑ ¹æÇâÀÇ ±æÀÌ°¡ Á¦ÇÑÀÌ ¾ø±â ¶§¹®¿¡ º¹ÀâÇÑ ·¹À̾ƿô¿¡ »ç¿ëÇϱ⿡´Â ¿¹ÃøÀÌ ¾î·Á¿öÁö´Â ¹®Á¦°¡ ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì¿¡´Â RigidArea¸¦ ÇÑÂÊ ±æÀ̸¦ 0À¸·Î ÇÏ¿© »ç¿ëÇÏ´Â °ÍÀÌ º¸´Ù ¿¹Ãø °¡´ÉÇÏ°í È®½ÇÇÑ ´ë¾ÈÀÌ µÉ °ÍÀÔ´Ï´Ù. |
createVerticalStrut( ) |
import java.awt.*; import java.awt.event.*; import javax.swing.*; class BoxExample extends JFrame { public BoxExample(String title) { super(title); Container contentPane = getContentPane(); // µÎ °³ÀÇ ÆгÎÀº ¼¼·Î ¹æÇâÀ¸·Î ½×´Â´Ù. contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS)); JPanel panel1 = new JPanel(); // °¡·Î ¹æÇâÀÇ ·¹À̾ƿô panel1.setLayout(new BoxLayout(panel1, BoxLayout.X_AXIS)); panel1.setBorder(BorderFactory.createTitledBorder("Panel 1")); panel1.add(Box.createHorizontalGlue()); panel1.add(new JButton("O K")); panel1.add(Box.createRigidArea(new Dimension(5, 0))); panel1.add(new JButton("Cancel")); JPanel panel2 = new JPanel(); panel2.setLayout(new BoxLayout(panel2, BoxLayout.X_AXIS)); panel2.setBorder(BorderFactory.createTitledBorder("Panel 2")); panel2.add(new JButton("O K")); panel2.add(Box.createVerticalStrut(100)); panel2.add(new JButton("Cancel")); contentPane.add(panel1); contentPane.add(panel2); validate(); setSize(300, 200); setVisible(true); } public static void main(String args[]) { new BoxExample("Box Layout Example Program"); } }<¿¹Á¦> BoxLayoutÀ» »ç¿ëÇÑ ·¹À̾ƿô ¿¹Á¦ ÇÁ·Î±×·¥
<±×¸²> BoxLayoutÀ» »ç¿ëÇÑ ·¹À̾ƿô
·è¾ØÇÊ ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀº AWT ÄÄÆ÷³ÍÆ®¿Í ´Þ¸® ¼ø¼öÇÏ°Ô ÀÚ¹Ù ÄÚµå·Î ¸¸µé¾îÁø ÄÄÆ÷³ÍÆ®µéÀ̱⠶§¹®¿¡ ¿©·¯ °¡Áö »õ·Î¿î ÀÚ¹Ù¸¸ÀÇ ±â´ÉÀ» ¼³°è ¶§ºÎÅÍ °í·ÁÇÏ¿© Ãß°¡ÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù. ·è¾ØÇÊ(Look and Feel)Àº ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀÇ ÀüüÀûÀÎ ¿Ü¾ç°ú ´À³¦À» ÁöÁ¤Çϴ Ŭ·¡½ºÀÔ´Ï´Ù. ·è¾ØÇÊÀ» »ç¿ëÇÏ¸é µ¿ÀÏÇÑ ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀÌ ÇöÀç ÁöÁ¤µÈ ·è¾ØÇÊ¿¡ µû¶ó ÀüÇô ´Ù¸¥ ´À³¦À» ÁÖ°Ô µË´Ï´Ù. ´ÙÀ½ ±×¸²Àº ·è¾ØÇÊ¿¡ µû¶ó ¼·Î ´Ù¸¥ ¸ð½ÀÀ¸·Î ³ªÅ¸³ª´Â µ¿ÀÏÇÑ ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀ» º¸¿©ÁÝ´Ï´Ù.
<±×¸²> ÀÚ¹Ù ·è¾ØÇÊ
<±×¸²> À©µµ¿ì ·è¾ØÇÊ
<±×¸²> ¸ðƼÇÁ ·è¾ØÇÊ
º°µµ·Î ·è¾ØÇÊÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ÀÚ¹Ù ·è¾ØÇÊÀÌ ±âº»À¸·Î ÁöÁ¤µË´Ï´Ù. ·è¾ØÇÊÀ» ÁöÁ¤ÇÒ ¶§¿¡´Â ´ÙÀ½°ú °°ÀÌ UIManager Ŭ·¡½º¸¦ »ç¿ëÇÕ´Ï´Ù. try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { System.err.println("Cannot set look and feel:"+e.getMessage()); } UIManager Ŭ·¡½ºÀÇ getCrossPlatformLookAndFeelClassName() ¸Þ½îµå´Â ÀÚ¹Ù ·è¾ØÇÊ Å¬·¡½º À̸§À» ¸®ÅÏÇÕ´Ï´Ù. getSystemLookAndFeelClassName() ¸Þ½îµå´Â ÇöÀç ÀÚ¹Ù ½ºÀ® ÄÄÆ÷³ÍÆ®°¡ ½ÇÇàµÇ°í Àִ ȯ°æ¿¡ µû¶ó ´Ù¸¥ Ŭ·¡½º À̸§À» ¸®ÅÏÇÕ´Ï´Ù. Áï, ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® À©µµ¿ì ½Ã½ºÅÛ¿¡¼ ½ÇÇàµÇ°í ÀÖ´Ù¸é À©µµ¿ì ·è¾ØÇÊ Å¬·¡½º À̸§À» ¸®ÅÏÇÏ°í, À¯´Ð½ºÀÇ X À©µµ¿ì ½Ã½ºÅÛ¿¡¼ ½ÇÇàµÇ°í ÀÖ´Ù¸é ¸ðƼÇÁ ·è¾ØÇÊ Å¬·¡½º À̸§À» ¸®ÅÏÇÒ °ÍÀÔ´Ï´Ù. |
´ÙÁß ¾²·¹µå ȯ°æÀÇ ½ºÀ® ÄÄÆ÷³ÍÆ® AWT ÄÄÆ÷³ÍÆ®¿Í´Â ´Þ¸® ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀ» ´ÙÁß ¾²·¹µå ȯ°æ¿¡¼ »ç¿ëÇÒ ¶§¿¡´Â ÁÖÀÇÇØ¾ß ÇÒ »çÇ×ÀÌ ÀÖ½À´Ï´Ù. AWT ÄÄÆ÷³ÍÆ®¿¡¸¸ Àͼ÷ÇØÀÖ´ø µ¶ÀÚ¶ó¸é ¸¹ÀÌ ³î¶ö °ÍÀÔ´Ï´Ù.
"ÀÏ´Ü ½ºÀ® ÄÄÆ÷³ÍÆ®°¡ ±¸ÇöµÈ ´ÙÀ½¿¡´Â ½ºÀ® ÄÄÆ÷³ÍÆ®ÀÇ »óŸ¦ º¯°æÇѴٰųª º¯°æµÈ »óÅ¿¡ µû¶ó ¾î¶² ÀÏÀ» ¼öÇàÇÏ°íÀÚ ÇÒ ¶§¿¡´Â ¹Ýµå½Ã À̺¥Æ® ó¸® ¾²·¹µå¿¡¼ ¼öÇàÇØ¾ß ÇÕ´Ï´Ù."
½ºÀ® ÄÄÆ÷³ÍÆ®´Â setVisible(true), show(), pack() µîÀÇ ¸Þ½îµå¸¦ »ç¿ëÇÏ¸é ±¸ÇöµË´Ï´Ù. ÀÌ ¶§, ±¸ÇöµÈ´Ù´Â Ç¥ÇöÀº ȸ鿡 º¸¿©Á®¼ paint() ¸Þ½îµå°¡ ÀÚµ¿À¸·Î È£ÃâµÇ°í À̺¥Æ®¸¦ ¹ÞÀ» Áغñ°¡ µÈ´Ù´Â ¶æÀÔ´Ï´Ù. ±×·± Àǹ̿¡¼ ´Ü¼øÈ÷ ÄÄÆ÷³ÍÆ® ¾È¿¡ Æ÷ÇÔµÈ ÄÄÆ÷³ÍÆ®µéÀ» ¿øÇÏ´Â Å©±â·Î ¹èÄ¡½ÃÅ°´Â Àϸ¸ ÇÏ´Â pack() ¸Þ½îµå°¡ È£ÃâµÉ ¶§¿¡µµ ½ºÀ® ÄÄÆ÷³ÍÆ®µéÀÌ ±¸ÇöµÈ´Ù´Â Á¡Àº ²À ±â¾ïÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·± ¸Þ½îµåµéÀ» È£ÃâÇÑ ´ÙÀ½¿¡´Â ÇØ´çÇÏ´Â ½ºÀ® ÄÄÆ÷³ÍÆ®¿Í ±× ¾È¿¡ Æ÷ÇÔµÈ ½ºÀ® ÄÄÆ÷³ÍÆ®µé¿¡ setText(), getText() µî°ú °°ÀÌ ÄÄÆ÷³ÍÆ®ÀÇ »óŸ¦ º¯°æÇÏ´Â ¸Þ½îµå¸¦ È£ÃâÇϸé À̺¥Æ® ó¸® ¾²·¹µå¿Í °æÀï Á¶°Ç¿¡ ºüÁú À§ÇèÀÌ ÀÖ½À´Ï´Ù. À̺¥Æ® ó¸® ¾²·¹µå´Â AWT À©µµ¿ì ½Ã½ºÅÛÀÇ À̺¥Æ®¸¦ ó¸®ÇÏ´Â ¾²·¹µå·Î paint() ¸Þ½îµå¸¦ ºñ·ÔÇÏ¿© actionPerformed() µî ¸ðµç À̺¥Æ® ó¸® ¸Þ½îµå¸¦ È£ÃâÇÏ´Â º°µµÀÇ ¾²·¹µåÀÔ´Ï´Ù. ÀÌ À̺¥Æ® ó¸® ¾²·¹µå¿¡°Ô ¿øÇÏ´Â ÀÏÀ» ¼öÇàÇϵµ·Ï ¿äûÇÏ·Á¸é javax.swing ÆÐÅ°ÁöÀÇ SwingUtilities Ŭ·¡½º°¡ Á¦°øÇÏ´Â static ¸Þ½îµåÀÎ invokeLater() ȤÀº invokeAndWait() ¸Þ½îµå¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. public static void invokeLater(Runnable obj); public static void invokeAndWait(Runnable obj) throws InterruptedException, InvocationTargetException; ÀÌ µÎ ¸Þ½îµå´Â invokeLater() ¸Þ½îµå°¡ ½ÇÇàÀ» ¿äûÇÑ ´ÙÀ½ ¹Ù·Î ´ÙÀ½À¸·Î ½ÇÇàÀÌ ³Ñ¾î°¡´Â ´ë½Å¿¡ invokeAndWait() ¸Þ½îµå´Â ÁöÁ¤ÇÑ RunnableÀÇ run() ¸Þ½îµå ½ÇÇàÀÌ Á¾·áÇÒ ¶§±îÁö ±â´Ù¸°´Ù´Â Á¡À» Á¦¿ÜÇÏ¸é µ¿ÀÏÇÑ ¿ªÇÒÀ» ÇÕ´Ï´Ù. ÀÌ ¸Þ½îµåµéÀ» »ç¿ëÇغ¾½Ã´Ù. JFrameÀÌ È¸é¿¡ º¸¿©Áö°í ³ ´ÙÀ½¿¡ ÇÁ·¹ÀÓ¿¡ ÀÖ´Â JTextFieldÀÇ °ªÀ» º¯°æÇÒ ¶§¿¡´Â ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù. JFrame frame = new JFrame("test frame"); ... frame.setVisible(true); // ¿©±âºÎÅÍ´Â GUI »óŸ¦ º¯°æ½ÃÅ°´Â ¸Þ½îµå¸¦ »ç¿ëÇؼ´Â ¾ÈµÈ´Ù. Runnable doSetText = new Runnable() { public void run() { text.setText("Setting text after setVisible"); } }; // ³ªÁß¿¡ À̺¥Æ® ¾²·¹µå¿¡¼ ÇØ´ç ÀÛ¾÷À» ¼öÇàÇϵµ·Ï ¿äûÇÑ´Ù. SwingUtilities.invokeLater(doSetText); |
1.5 ½ºÀ® ´ÙÁß ¹®¼ ÀÎÅÍÆäÀ̽º
´ÙÁß ¹®¼ ÀÎÅÍÆäÀ̽º(MDI, Multiple Document Interface)´Â ÇϳªÀÇ ÁÖ ÇÁ·¹ÀÓ À©µµ¿ì ¾È¿¡ ¿©·¯ °³ÀÇ ¹®¼ À©µµ¿ì¸¦ °ü¸®ÇÒ ¼ö ÀÖ´Â ÀÎÅÍÆäÀ̽º·Î ´ëºÎºÐÀÇ À©µµ¿ì¿ë ¿öµåÇÁ·Î¼¼¼³ª ½ºÇÁ·¹µå½ÃÆ® ÇÁ·Î±×·¥µéÀÌ Á¦°øÇÏ´Â ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù.
ÀÚ¹Ù ½ºÀ® ÄÄÆ÷³ÍÆ®´Â JInternalFrame ÄÄÆ÷³ÍÆ® Ŭ·¡½º¸¦ Á¦°øÇÏ¿© ÇÁ·¹ÀÓ ¾È¿¡ ³»ºÎ ÇÁ·¹ÀÓ À©µµ¿ì ÄÄÆ÷³ÍÆ®¸¦ ±¸ÇöÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇÕ´Ï´Ù. AWT À©µµ¿ì ½Ã½ºÅÛ¿¡¼´Â °¡´ÉÇÏÁö ¾Ê´ø ´ÙÁß ¹®¼ ÀÎÅÍÆäÀ̽º°¡ JInternalFrame ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÏ¿© ¼Õ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ°Ô µÈ °ÍÀÔ´Ï´Ù.
1.5.1 JLayeredPaneÀÇ Ãþµé
JRootPane ÄÄÆ÷³ÍÆ®´Â ³»ºÎ¿¡ Ãß°¡ÇÒ ½ºÀ® ÄÄÆ÷³ÍÆ®ÀÇ »óÇÏ Æ÷°³ÁüÀ» ó¸®ÇÒ ¼ö ÀÖ´Â JLayeredPane ÄÄÆ÷³ÍÆ®¸¦ °¡Áý´Ï´Ù. °¢ ½ºÀ® ÄÄÆ÷³ÍÆ®´Â ÀÚ½ÅÀÌ ¼ÓÇÑ Ãþ¿¡ µû¶ó »óÇÏ À§Ä¡°¡ Á¤ÇØÁö´Âµ¥ ÀÌ ÃþÀÇ °ªÀº Á¤¼ö·Î ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ³ôÀº Á¤¼ö°ªÀ» °¡Áø Ãþ¿¡ ¼ÓÇÑ ÄÄÆ÷³ÍÆ®°¡ ³·Àº Á¤¼ö°ªÀ» °¡Áø Ãþ¿¡ ¼ÓÇÑ ÄÄÆ÷³ÍÆ®º¸´Ù ÀÂÊ¿¡ À§Ä¡ÇÕ´Ï´Ù. ´ÙÀ½ ¿¹Á¦¿¡¼ ¹öÆ°Àº ·¹ÀÌºíº¸´Ù À§¿¡ À§Ä¡ÇÒ °ÍÀÔ´Ï´Ù.
JFrame frame = new JFrame(); JLayeredPane layeredPane = frame.getLayeredPane(); JButton button = new JButton("¹öÆ°"); JLabel label = new JLabel("·¹À̺í"); // ¹öÆ°Àº 20ÀÇ °ªÀ» °¡Áø Ãþ¿¡ ¼ÓÇÑ´Ù. layeredPane.add(button, new Integer(20)); // ·¹À̺íÀº 10ÀÇ °ªÀ» °¡Áø Ãþ¿¡ ¼ÓÇÑ´Ù. layeredPane.add(label, new Integer(10));
ÀÌ¿Í °°ÀÌ Á÷Á¢ Á¤¼ö°ªÀ» ÁöÁ¤ÇÏ¿© °¢ ÄÄÆ÷³ÍÆ®µéÀÌ ¼ÓÇÒ ÃþÀ» ÁöÁ¤ÇÒ ¼öµµ ÀÖ°ÚÁö¸¸ JLayeredPane¿¡¼´Â ÀÚÁÖ »ç¿ëµÇ´Â ÃþÀ» ¹Ì¸® ´Ù¼¸ °¡Áö·Î ºÐ·ùÇÏ¿© »ó¼ö·Î Á¦°øÇÕ´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì¿¡´Â ÀÌ »ó¼ö°ªµéÀ» »ç¿ëÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù.
¡Ü JLayeredPane.DEFAULT_LAYER : ±âº» Ãþ. Ưº°È÷ ÃþÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¸ðµÎ ±âº»°ªÀ¸·Î ÀÌ Ãþ¿¡ ¼ÓÇÏ°Ô µË´Ï´Ù. ÀϹÝÀûÀÎ °æ¿ì¿¡´Â ÀÌ ÃþÀ» »ç¿ëÇÕ´Ï´Ù.
¡Ü JLayeredPane.PALETTE_LAYER : ±âº» Ãþ À§¿¡ À§Ä¡ÇÏ´Â ÃþÀÔ´Ï´Ù. ´Ù¸¥ ÄÄÆ÷³ÍÆ®µéº¸´Ù ÀÂÊ¿¡ À§Ä¡ÇÏ°Ô ÇØÁֹǷΠ¸Þ´º¿¡¼ ºÐ¸®µÈ Åø¹Ù µî¿¡ »ç¿ëÇÕ´Ï´Ù.
¡Ü JLayeredPane.MODAL_LAYER : ¸ð´ú ´ëÈ»óÀÚ¿¡ ÁÖ·Î »ç¿ëÇÏ´Â ÃþÀÔ´Ï´Ù.
¡Ü JLayeredPane.POPUP_LAYER : ÅøÆÁÀ̳ª ÄÞº¸»óÀÚ µîÀÇ Æ˾÷ À©µµ¿ì¸¦ ³ªÅ¸³»´Â µ¥ ÁÖ·Î »ç¿ëÇÏ´Â ÃþÀÔ´Ï´Ù.
¡Ü JLayeredPane.DRAG_LAYER : ¾î¶² ÄÄÆ÷³ÍÆ®¸¦ ¸¶¿ì½º·Î µå·¡±ëÇÒ ¶§¿¡´Â µå·¡±ëµÇ´Â ÄÄÆ÷³ÍÆ®°¡ ´Ù¸¥ ¸ðµç ÄÄÆ÷³ÍÆ®µéº¸´Ù ¾ÕÀ¸·Î ³ª¿Íº¸¿©¾ß ÇÕ´Ï´Ù. ÄÄÆ÷³ÍÆ®¸¦ µå·¡±ëÇÏ´Â µµÁß¿¡ »ç¿ëµÇ´Â ÃþÀÔ´Ï´Ù.
´ëºÎºÐÀÇ ÄÄÆ÷³ÍÆ®µéÀº ÃþÀ» º°µµ·Î ÁöÁ¤ÇÏÁö ¾ÊÀ» ¶§ »ç¿ëµÇ´Â ±âº» Ãþ(DEFAULT_LAYER)¿¡ ¼ÓÇÏ°Ô µË´Ï´Ù. °°Àº Ãþ¿¡ ¼ÓÇÑ ÄÄÆ÷³ÍÆ®µé °£¿¡µµ ¼·ÎÀÇ À§Ä¡ °ü°è¸¦ ÁöÁ¤ÇÒ ¼ö Àִµ¥ JLayeredPane Ŭ·¡½ºÀÇ moveToFront(), moveToBack(), setPosition() ¸Þ½îµå´Â °¢°¢ °°Àº Ãþ ¾È¿¡¼ ÄÄÆ÷³ÍÆ®µé °£ÀÇ »ó´ë À§Ä¡¸¦ º¯°æ½Ãŵ´Ï´Ù.
7.2 JInternalFrame »ç¿ë ¹æ¹ý
ÀÌÁ¦ JInternalFrame ÄÄÆ÷³ÍÆ® »ç¿ë¹ýÀ» ¾Ë¾Æº¾½Ã´Ù. ¿©·¯ °³ÀÇ ³»ºÎ ÇÁ·¹ÀÓ ÄÄÆ÷³ÍÆ®´Â ¾î¶² Ãþ¿¡ ¼ÓÇÏ¿© ±× Ãþ¿¡ µû¶ó Æ÷°³ÁüÀÌ °áÁ¤µË´Ï´Ù. ³»ºÎ ÇÁ·¹ÀÓ ÄÄÆ÷³ÍÆ®¸¦ Ãß°¡ÇÒ ÄÄÆ÷³ÍÆ®´Â JLayeredPaneÀ» »ó¼ÓÇÏ´Â JDesktopPane ÄÄÆ÷³ÍÆ®ÀÔ´Ï´Ù. JDesktopPane Ŭ·¡½º´Â JLayeredPaneÀ» »ó¼ÓÇÏ¸é¼ JInternalFrame ÄÄÆ÷³ÍÆ®¸¸À» Àü´ãÇؼ °ü¸®Çϴ Ư¼öÇÑ ÄÄÆ÷³ÍÆ® Ŭ·¡½ºÀÔ´Ï´Ù.
´ÙÀ½ ¿¹Á¦ ÄÚµå´Â ³»ºÎ ÇÁ·¹ÀÓÀ» »ý¼ºÇؼ ÇÁ·¹ÀÓ¿¡ Ãß°¡ÇÏ´Â ¾ÆÁÖ °£´ÜÇÑ ÇÁ·Î±×·¥ÀÔ´Ï´Ù.
import java.awt.*; import javax.swing.*; class IFrame { public static void main(String args[]) { // ÇÁ·¹ÀÓ »ý¼º JFrame frame = new JFrame("³»ºÎ ÇÁ·¹ÀÓ Å×½ºÆ® ÇÁ·Î±×·¥"); // JDesktopPane »ý¼º JDesktopPane desktop = new JDesktopPane(); // ³»ºÎ ÇÁ·¹ÀÓ »ý¼º JInternalFrame iframe = new JInternalFrame("ù ¹ø° ³»ºÎ ÇÁ·¹ÀÓ", true /* Å©±âº¯°æ °¡´É */, true /* Á¾·á °¡´É */, true /* ÃÖ´ë Å©±â·Î °¡´É */, true /* ¾ÆÀÌÄÜÈ °¡´É */ ); desktop.add(iframe); // JDesktopPane ÄÄÆ÷³ÍÆ®¿¡ ³»ºÎ ÇÁ·¹ÀÓ Ãß°¡ // ÇÁ·¹ÀÓ À©µµ¿ìÀÇ contentPaneÀ» JDesktopPane ÄÄÆ÷³ÍÆ®·Î ÁöÁ¤ frame.setContentPane(desktop); // ³»ºÎ ÇÁ·¹ÀÓÀÇ À§Ä¡¿Í Å©±â ÁöÁ¤ iframe.setBounds(50, 50, 200, 100); iframe.setVisible(true); // JDK 1.3.xºÎÅÍ´Â ±âº»°ªÀÌ invisible. JDK 1.2.x¹öÀü±îÁö´Â ±âº»°ªÀÌ visible. frame.setSize(300,300); // ÇÁ·¹ÀÓÀÇ Å©±â ÁöÁ¤ frame.setVisible(true); } }<¿¹Á¦> ³»ºÎ ÇÁ·¹ÀÓÀ» ¸¸µå´Â ¾ÆÁÖ °£´ÜÇÑ ÇÁ·Î±×·¥
<±×¸²> ù ¹ø° ³»ºÎ ÇÁ·¹ÀÓ À©µµ¿ì ÇÁ·Î±×·¥
7.3 ³»ºÎ ÇÁ·¹ÀÓÀÇ À©µµ¿ì À̺¥Æ® ó¸®
³»ºÎ ÇÁ·¹ÀÓÀ» ¾ÆÀÌÄÜÈÇϰųª Á¾·áÇÏ´Â µî À©µµ¿ì »óŸ¦ º¯È½ÃÅ°¸é ÀÏ¹Ý À©µµ¿ìÀÇ WindowEvent À̺¥Æ®¿¡ ÇØ´çÇÏ´Â InternalFrameEvent À̺¥Æ®°¡ ¹ß»ýÇÕ´Ï´Ù. ÀÌ InternalFrameEvent¸¦ ó¸®ÇÏ·Á¸é InternalFrameListener ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϰųª InternalFrameAdapter Ŭ·¡½º¸¦ »ó¼ÓÇÏ¸é µË´Ï´Ù. WindowEvent À̺¥Æ®¸¦ ó¸®ÇÏ´Â ¹æ¹ý°ú Å©°Ô ´Ù¸£Áö ¾Ê½À´Ï´Ù.
InternalFrameListener ÀÎÅÍÆäÀ̽º¿¡ Á¤ÀÇµÈ ³»ºÎ ÇÁ·¹ÀÓ À̺¥Æ® ó¸® ¸Þ½îµåµéÀº ´ÙÀ½°ú °°½À´Ï´Ù.
¨ç public void internalFrameActivated(InternalFrameEvent e) : ³»ºÎ ÇÁ·¹ÀÓÀÌ È°¼ºÈµÉ ¶§
¨è public void internalFrameClosed(InternalFrameEvent e) : ³»ºÎ ÇÁ·¹ÀÓÀÌ ´Ý°åÀ» ¶§
¨é public void internalFrameClosing(InternalFrameEvent e) : ³»ºÎ ÇÁ·¹ÀÓÀÌ ´Ý±æ ¶§
¨ê public void internalFrameDeactivated(InternalFrameEvent e) : ³»ºÎ ÇÁ·¹ÀÓÀÌ ºñÈ°¼ºÈµÉ ¶§
¨ë public void internalFrameDeiconified(InternalFrameEvent e) : ³»ºÎ ÇÁ·¹ÀÓÀÌ ¾ÆÀÌÄÜȵǾú´Ù°¡ º¹±¸µÉ ¶§
¨ì public void internalFrameIconified(InternalFrameEvent e) : ³»ºÎ ÇÁ·¹ÀÓÀÌ ¾ÆÀÌÄÜ鵃 ¶§
¨í public void internalFrameOpened(InternalFrameEvent e) : ³»ºÎ ÇÁ·¹ÀÓÀÌ ¿¸± ¶§
2. ¸ð³ª¸®ÀÚ ±×¸®±â, ÀÚ¹Ù 2D
JDK 1.2 ¹öÀüÀÌ ³ª¿À±â Àü¿¡µµ ÀÚ¹Ù´Â ±×·¡ÇÈ ±â´ÉÀ» Á¦°øÇßÁö¸¸, Áö³ªÄ¡°Ô ±âº»ÀûÀÎ ±â´É¿¡ ÇÑÁ¤µÇ¾î ÀÚ¹Ù¸¦ »ç¿ëÇÑ °í±Þ ±×·¡ÇÈ ÇÁ·Î±×·¥Àº °ÅÀÇ ºÒ°¡´ÉÇß½À´Ï´Ù. ÇÏÁö¸¸ ÀÚ¹Ù 2 Áï, JDK 1.2ÀÇ µîÀå°ú ÇÔ²² ÀÌ·¯ÇÑ ºÒ¸¸À» °ÅÀÇ ÇؼÒÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. ÀÚ¹Ù 2¿¡ »õ·Î Æ÷ÇÔµÈ 2D ±â¼úÀº ±âÁ¸ ±×·¡ÇÈ ±â´ÉÀ» Å©°Ô È®Àå, °³¼±ÇÏ¿© µå·ÎÀ×, À̹ÌÁö ó¸®, ÅؽºÆ® ·»´õ¸µ, »ö±ò Á¤ÀÇ¿¡ À̸£±â±îÁö ±¤¹üÀ§ÇÑ ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù.
<±×¸²> 2D¸¦ »ç¿ëÇÑ ±×·¡ÇÈ ÇÁ·Î±×·¥ ¿¹Á¦
2.1 ±×·¡ÇÈ ÄÁÅؽºÆ® - Graphics¿Í Graphics2D
±×¸²À» ±×¸®±â À§Çؼ´Â ±×·¡ÇÈ ÀåÄ¡ ÄÁÅؽºÆ®¶ó´Â °ÍÀÌ ÇÊ¿äÇÕ´Ï´Ù. ÀÚ¹Ù¿¡¼´Â java.awt ÆÐÅ°ÁöÀÇ Graphics Ŭ·¡½º¿¡¼ ±×·¡ÇÈ ÀåÄ¡ ÄÁÅؽºÆ®¿Í ¿©·¯ °¡Áö ·»´õ¸µ¿¡ ÇÊ¿äÇÑ »óÅ Á¤º¸¸¦ ÀúÀåÇÏ´Â ±â´ÉÀ» Á¦°øÇÏ°í ÀÖ½À´Ï´Ù. µû¶ó¼, ÀÚ¹Ù¿¡¼ ±×¸²À» ±×¸± ¶§¿¡´Â ¹Ýµå½Ã Graphics °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶¸¦ ±¸ÇØ¾ß ÇÕ´Ï´Ù.
Graphics °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶´Â °¢ ÄÄÆ÷³ÍÆ®¿¡¼ getGraphics() ¸Þ½îµå¸¦ È£ÃâÇÏ¿© ¾òÀ» ¼ö ÀÖÀ¸¸ç ÀÚ¹ÙÀÇ AWT ½Ã½ºÅÛÀÌ ÀÎÀÚ·Î Graphics °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶¸¦ ÀÎÀÚ·Î ³Ñ°ÜÁÖ´Â paint() µîÀÇ ¸Þ½îµå ¾È¿¡¼ ¹Ù·Î »ç¿ëÇÏ¸é µË´Ï´Ù.
Áï, JPanel ÄÄÆ÷³ÍÆ® ¾È¿¡ ¼±À» ±×À¸·Á¸é ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
JPanel panel = new JPanel(); Graphics g = panel.getGraphics(); if (g==null) // ±×·¡ÇÈ ÄÁÅؽºÆ®¸¦ ¾ò´Â µ¥ ½ÇÆÐÇÑ °æ¿ì¸¦ ó¸® return; try { g.drawLine(10, 10, 10, 50); // ÆгΠÀ§¿¡ ¼±À» ±×¸°´Ù. } finally { // getGraphics()·Î ¾òÀº ±×·¡ÇÈ ÄÁÅؽºÆ®´Â ¹Ýµå½Ã ¸®¼Ò½º ÇØÁö g.dispose(); }
±×·¡ÇÈ ÄÁÅؽºÆ®´Â ½Ã½ºÅÛÀÌ Á¦°øÇÏ´Â ÇÑÁ¤µÈ ¸®¼Ò½ºÀ̹ǷΠ»ç¿ë ÈÄ¿¡´Â dispose()¸¦ ¸í½ÃÀûÀ¸·Î È£ÃâÇØÁà¾ß ÇÕ´Ï´Ù. ´Ù¸¸ paint()³ª update() ¸Þ½îµå¿¡¼Ã³·³ AWT ½Ã½ºÅÛÀÌ ÀÎÀÚ·Î ³Ñ°ÜÁÖ´Â ±×·¡ÇÈ ÄÁÅؽºÆ®´Â dispose()¸¦ È£ÃâÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù.
Graphics Ŭ·¡½º´Â ±âº»ÀûÀÎ µå·Î¿ì ±â´ÉÀ» Á¦°øÇÏ´Â ±×·¡ÇÈ ÄÁÅؽºÆ® Ŭ·¡½ºÀÔ´Ï´Ù. 2D ±×·¡ÇÈÀÇ È®ÀåµÈ ±â´ÉÀ» »ç¿ëÇϱâ À§Çؼ´Â Graphics2D Ŭ·¡½º °´Ã¼¸¦ ±¸ÇØ¾ß Çϴµ¥, Graphics2D °´Ã¼¸¦ ±¸ÇÏ´Â ¹æ¹ýÀº ¾ÆÁÖ °£´ÜÇÕ´Ï´Ù.
¸ÕÀú Graphics °´Ã¼¸¦ ±¸ÇÑ ´ÙÀ½ ¸í½ÃÀûÀ¸·Î Çüº¯È¯À» ÇØÁÖ¸é µË´Ï´Ù. Áï, ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÕ´Ï´Ù.
JPanel panel = new JPanel(); // ¸í½ÃÀûÀ¸·Î Çü º¯È¯ Graphics2D g2 = (Graphics2D) panel.getGraphics(); if (g2==null) // ±×·¡ÇÈ ÄÁÅؽºÆ®¸¦ ¾ò´Â µ¥ ½ÇÆÐÇÑ °æ¿ì¸¦ ó¸® return; try { BasicStroke stroke = new BasicStroke(10.0f); g2.setStroke(stroke); g2.drawLine(10, 10, 10, 50); // ÆгΠÀ§¿¡ ±½±â°¡ 10ÀÎ ¼±À» ±×¸°´Ù. } finally { // getGraphics()·Î ¾òÀº ±×·¡ÇÈ ÄÁÅؽºÆ®´Â ¹Ýµå½Ã ¸®¼Ò½º ÇØÁö g2.dispose(); }
ÆÁ : ÀÚ¹Ù 2D ÇÁ·Î±×·¥À» »ç¿ëÇϸé À©µµ¿ì 95°¡ Á×¾î¿ä À©µµ¿ì 95/98 ¿î¿µ üÁ¦ À§¿¡¼ ÀÚ¹Ù 2D ¿¹Á¦ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°´Ù º¸¸é ÀÌÀ¯¾øÀÌ ½Ã½ºÅÛÀÌ ¸ÔÅëÀÌ µÇ´Â °æ¿ì°¡ °£È¤ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº JDK 1.2ÀÇ ¹ö±× ¶§¹®À̹ǷΠJDK 1.2.1 ¹öÀüÀ¸·Î ¾÷±×·¹À̵åÇϸé Á¶±Ý ´õ ¾ÈÁ¤µË´Ï´Ù. ÇÏÁö¸¸, ±×·¡µµ Á¾Á¾ ½Ã½ºÅÛÀÌ ´Ù¿îµÇ´Â °ÍÀ» ¸¸³ª°Ô µË´Ï´Ù. À̶§¿¡´Â »ç¿ëÇÏ´Â ºñµð¿À Ä«µå Á¦Á¶È¸»çÀÇ À¥ÆäÀÌÁö¸¦ ã¾Æ°¡ ÃֽŠ¹öÀüÀÇ ºñµð¿À Ä«µå µå¶óÀ̹ö¸¦ ´Ù¿î·ÎµåÇÏ¿© ¼³Ä¡Çϸé Á¶±Ý °³¼±µË´Ï´Ù. 2D ±×·¡ÇÈ ±â´ÉÀÌ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® À©µµ¿ì ¿î¿µ üÁ¦¿¡¼´Â ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® »çÀÇ DirectDraw ±â¼úÀ» »ç¿ëÇÏ¿© ±¸ÇöµÇ¾î Àֱ⠶§¹®¿¡ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® »ç·ÎºÎÅÍ ÇÑ±Û DirectX ÃֽŠ¹öÀüÀ» ´Ù¿î·ÎµåÇÏ¿© ¼³Ä¡Çϸé Á¶±Ý ´õ ¾ÈÁ¤µÉ ¼ö ÀÖ½À´Ï´Ù. ±ÛÀ» ¾µ ´ç½Ã(1999³â 4¿ù) ÇÊÀÚÀÇ ÄÄÇ»ÅÍ È¯°æÀº ÆæƼ¾ö 75MHz, ÁÖ ¸Þ¸ð¸® 32MBÀε¥ ¸Þ¸ð¸® ºÎÁ·°ú ºñµð¿À Ä«µåÀÇ ¹®Á¦ µîÀÌ º¹ÇÕÀûÀ¸·Î ¾ôÇô ¾ÆÁ÷µµ JDK¿¡ Æ÷ÇԵǾî ÀÖ´Â ÀÚ¹Ù 2D ¿¹Á¦ ÇÁ·Î±×·¥°ú ½ºÀ® ¿¹Á¦ ÇÁ·Î±×·¥À» Á¦´ë·Î ½ÇÇà½ÃÅ°Áö ¸øÇß½À´Ï´Ù. Áö±ÝÀº ¾÷±×·¹À̵åÇßÁö¸¸, ¼ÒÇÁÆ®¿þ¾îÀÇ ¹ßÀüÀÌ ¿ä±¸ÇÏ´Â Çϵå¿þ¾îÀÇ ºñ¿ëÀ» ÂѾư¡´Â ÁöºÒÇÏ´Â °ÍÀÌ ±âºÐ ÁÁÀº Àϸ¸Àº ¾Æ´Ï´õ±º¿ä. |
2.2 µµÇü ±×¸®±â
2D ±×·¡ÇÈ ±â´ÉÀ» »ç¿ëÇÏ¿© ±×¸²À» ±×·Áº¾½Ã´Ù. ±×¸²À» ±×¸± ¶§¿¡´Â µµÇüÀÇ ¸ð¾ç°ú ½ºÆ®·ÎÅ©, ä¿ò µîÀÇ ¿ä¼Ò°¡ ÇÊ¿äÇÕ´Ï´Ù.
2.2.1 µµÇüÀÇ ¸ð¾ç
¸ÕÀú 2D ±×·¡ÇÈ¿¡¼´Â ±×·ÁÁú µµÇüÀÇ ÀϹÝÀûÀÎ ¸ð¾çÀ» Á¤ÀÇÇÏ´Â Shape ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÕ´Ï´Ù. ÀÌ Shape ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â ¿©·¯ °¡Áö µµÇü Ŭ·¡½ºµéÀÌ java.awt ÆÐÅ°Áö¿Í java.awt.geom ÆÐÅ°Áö¿¡ Á¤ÀÇ°¡ µÇ¾î ÀÖ½À´Ï´Ù.
⼗ GeneralPath - ÀϹÝÀûÀÎ ±âÇÏÇÐÀû µµÇü
⼗ Line2D - 2D API¸¦ »ç¿ëÇؼ ±×¸± ¼ö ÀÖ´Â ¼±. Line2D.Float ¹× Line2D.Double¿¡ ´ëÇÑ ºÎ¸ð Ŭ·¡½º
⼗ Rectangle - Á÷»ç°¢ÇüÀ» Á¤ÀÇÇÏ´Â java.awt Ŭ·¡½º
⼗ RectangularShape - Á÷»ç°¢ÇüÀ¸·Î µÑ·¯½Î¿©Áú ¼ö ÀÖ´Â µµÇü. Arc2D, Ellipse2D, Rectangle2D, RoundRectangle2DÀÇ ºÎ¸ð Ŭ·¡½º
⼗ Polygon - ´Ù°¢ÇüÀ» Á¤ÀÇÇÏ´Â java.awt Ŭ·¡½º
⼗ CubicCurve2D - 3Â÷ ÆĶó¹ÌÅÍ Ä¿ºêÀÇ ÀϺκÐ. CubicCurve2D.Float ¹× CubicCurve2D.DoubleÀÇ ºÎ¸ð Ŭ·¡½º
⼗ QuadCurve2D - 2Â÷ ÆĶó¹ÌÅÍ Ä¿ºêÀÇ ÀϺκÐ. QuadCurve2D.Float ¹× QuardCurve2D.Double¿¡ ´ëÇÑ ºÎ¸ð Ŭ·¡½º
⼗ Area - ´Ù¸¥ µµÇü °´Ã¼µé·Î ±¸¼ºµÈ ÀÓÀÇÀÇ ¿µ¿ª
À̸§ÀÌ 2D·Î ³¡³ª´Â µµÇü Ŭ·¡½ºµéÀº ³»ºÎ Ŭ·¡½º·Î °¢°¢ Float¿Í DoubleÀ» °¡Áö°í ÀÖÀ¸¸ç À̵é Áß Çϳª¸¦ ÅëÇØ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. Double Ŭ·¡½º¸¦ »ç¿ëÇϸé Floatº¸´Ù Á»´õ ¼¶¼¼ÇÏ°Ô µµÇüÀ» Á¤ÀÇÇÒ ¼ö ÀÖÁö¸¸ ¼Óµµ°¡ ´À·ÁÁö´Â °ÍÀ» °¨¼öÇØ¾ß ÇÕ´Ï´Ù. °¡·Î, ¼¼·Î 10ÀÇ Å©±â¸¦ °¡Áö°í ÁÂÇ¥°¡ (0, 0)ÀÎ 2Â÷¿ø »ç°¢Çü °´Ã¼´Â ´ÙÀ½°ú °°ÀÌ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
Rectangle2D rect = new Rectangle2D.Float(0.0f, 0.0f, 10.0f, 10.0f);
2.2.2 ½ºÆ®·ÎÅ©¿Í ä¿ò ¼Ó¼º
½ºÆ®·ÎÅ©(Stroke)´Â µµÇüÀÇ ¿Ü°û¼±À» ±×¸®´Â µ¥ »ç¿ëµÇ´Â ¿©·¯ °¡Áö ¼Ó¼ºµéÀ» ³ªÅ¸³»´Â Ç¥ÇöÀÔ´Ï´Ù. ÁÖ·Î µÎ²²³ª Á¡¼± ÆÐÅÏ, ¼±µéÀÌ ¸¸³¯ ¶§ÀÇ Ã³¸®, ¼±ÀÇ ³¡ ºÎºÐ ó¸® µîÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¡ÇÈ ÄÁÅؽºÆ®¿¡ ½ºÆ®·ÎÅ©¸¦ ÁöÁ¤ÇÒ ¶§¿¡´Â setStroke() ¸Þ½îµå¸¦ »ç¿ëÇÕ´Ï´Ù. ´ÙÀ½Àº ¼± µÎ²²¸¦ 10À¸·Î ÁöÁ¤ÇÕ´Ï´Ù.
BasicStroke stroke = new BasicStroke(10.0f); ((Graphics2D) g).setStroke(stroke);
ä¿ò ¼Ó¼º(Paint)Àº µµÇüÀÇ ³»ºÎ¸¦ ä¿ì´Â ¹æ¹ýÀ» ¸»ÇÕ´Ï´Ù. µ¿ÀÏÇÑ »öÀ¸·Î ä¿ì´Â ¹æ¹ý°ú, ±×¶óµð¾ðÆ®¸¦ ÁÖ´Â ¹æ¹ý, ÁöÁ¤µÈ ÆÐÅÏÀ» »ç¿ëÇÏ¿© ä¿ì´Â ¹æ¹ý µîÀÌ Áö¿øµË´Ï´Ù. µ¿ÀÏÇÑ »öÀ¸·Î ä¿ï ¶§¿¡´Â setColor() ¸Þ½îµå¸¦ »ç¿ëÇÏ¸ç ´Ù¸¥ °æ¿ì¿¡´Â setPaint() ¸Þ½îµå¸¦ »ç¿ëÇÕ´Ï´Ù. ´ÙÀ½Àº ±×¶óµð¾ðÆ® ¹æ½ÄÀ¸·Î ä¿ò ¼Ó¼ºÀ» ÁöÁ¤ÇÏ¿© »ç°¢ÇüÀ» ±×¸®´Â ¿¹ÀÔ´Ï´Ù.
GradientPaint gp = new GradientPaint(0.0f, 0.0f, Color.blue, 50.0f, 100.0f, Color.yellow); ((Graphics2D) g).setPaint(gp); g.fillRect(0, 0, 50, 100);
2.2.3 µµÇü º¯È¯
2D ±×·¡ÇȺÎÅÍ´Â µµÇüÀÇ º¯È¯À» Áö¿øÇÕ´Ï´Ù. ´ëĪ º¯È¯, ȸÀü º¯È¯, °æ»ç Áֱ⠵îÀÇ º¯È¯À» ÇÒ ¼ö ÀÖ½À´Ï´Ù. 2D ±×·¡ÇÈÀº µµÇüÀÇ º¯È¯À» ±×·ÁÁú µµÇüÀÇ ¼Ó¼ºÃ³·³ »ç¿ëÇϵµ·Ï ¼³°èµÇ¾î ÀÖÀ¸¹Ç·Î µµÇüÀ» ±×¸®±â Àü¿¡ setTransform() ¸Þ½îµå¸¦ »ç¿ëÇÏ¿© º¯È¯ ¹æ½ÄÀ» ÁöÁ¤ÇØÁÖ¸é µË´Ï´Ù. ´ÙÀ½Àº »ç°¢ÇüÀ» 45µµ ȸÀü½ÃÅ°´Â º¯È¯ÀÔ´Ï´Ù.
Rectangle2D rect = new Rectangle2D.Float(10.0, 10.0, 20.0, 30.0); AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI/4.0, 0.0, 0.0); ((Graphics2D) g).setTransform(rotate); ((Graphics2D) g).fill();
2.2.4 µµÇü ±×¸®±â
µµÇüÀ» ½ÇÁ¦ ±×¸®·Á¸é ¸ÕÀú µµÇüÀÇ ¸ð¾ç°ú °¢ ¼Ó¼ºÀ» ÁöÁ¤ÇÑ ´ÙÀ½, µµÇü ³»ºÎ¸¦ ä¿ï °ÍÀÎÁö ¿©ºÎ¿¡ µû¶ó ¿Ü°û¼±¸¸ ±×¸®´Â draw() ¸Þ½îµå¿Í ³»ºÎ¸¦ ä¿ì´Â fill() ¸Þ½îµå¸¦ È£ÃâÇÏ¸é µË´Ï´Ù.
java.awt.Graphics Ŭ·¡½º´Â 2D ±â¼úÀÌ ¼Ò°³µÇ±â Àü¿¡ ³ª¿Â drawRect(), fillRect()¿Í °°Àº ¿©·¯ °¡Áö ¸Þ½îµåµéÀ» Á¦°øÇÕ´Ï´Ù. À̵éÀº ¸ðµÎ draw()³ª fill() ¸Þ½îµå¸¦ »ç¿ëÇؼµµ ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
Áï,
fillRect(10, 10, 20, 30);
°ú
Rectangle2D rect = new Rectangle2D.Float(10.0, 10.0, 20.0, 30.0); ((Graphics2D) g).fill();Àº °ÅÀÇ °°Àº ÀÏÀ» ¼öÇàÇÏ°Ô µË´Ï´Ù.
2.3 2D µå·ÎÀ× ÇÁ·Î±×·¥ ¸¸µé±â
ÀÌÁ¦ µå·ÎÀ× ±â´ÉÀ» Àû¿ëÇÏ¿© ÇÁ·Î±×·¥À» ¸¸µé¾îº¼ ½Ã°£ÀÔ´Ï´Ù.
¸ð¾ç, ½ºÆ®·ÎÅ©, ä¿ò ¹æ½Ä, ±×¸®°í »ö±òÀ» ÁöÁ¤ÇÏ¿© ¸¶¿ì½º·Î ±×¸²À» ±×¸®µµ·Ï ÇÏ´Â °£´ÜÇÑ 2D µå·ÎÀ× ÇÁ·Î±×·¥À» ¸¸µé¾îº¾½Ã´Ù.
ÀÌ ÇÁ·Î±×·¥Àº Å©°Ô ³× °³ÀÇ Å¬·¡½º·Î ³ª´²º¼ ¼ö ÀÖ½À´Ï´Ù.
∙ Draw2D : JFrame Ŭ·¡½º¸¦ »ó¼ÓÇÑ ÁÖ Å¬·¡½º. µå·ÎÀ× ¼Ó¼ºÀ» ÁöÁ¤ÇÒ ¸Þ´º¸¦ Á¦°ø.
∙ DrawCanvas : JPanel Ŭ·¡½º¸¦ »ó¼ÓÇÏ¸ç ½ÇÁ¦ ±×¸²ÀÌ ±×·ÁÁö´Â ĵ¹ö½º ¿ªÇÒÀ» ÇÕ´Ï´Ù.
∙ DrawCanvas.UIController : Draw2D¿¡¼ ¸Þ´º ¼±Åà À̺¥Æ®°¡ ¹ß»ýÇϸé ó¸®ÇÏ¿© ĵ¹ö½º¿¡ ±×·ÁÁú µå·ÎÀ× ¼Ó¼ºÀ» º¯°æÇÕ´Ï´Ù.
∙ DrawCanvas.MouseController : ĵ¹ö½º À§ÀÇ ¸¶¿ì½º ¿òÁ÷ÀÓÀ» ó¸®Çϴ Ŭ·¡½º.
¸ÕÀú ÁÖ Å¬·¡½ºÀÎ Draw2D Ŭ·¡½º´Â ´ÙÀ½°ú °°ÀÌ ¸¸µé ¼ö ÀÖ½À´Ï´Ù.
class Draw2D extends JFrame { ExitController exiter = new ExitController(); // À©µµ¿ì Á¾·á ¸Þ½ÃÁö ó¸® °´Ã¼ DrawCanvas canvas = new DrawCanvas(); // ĵ¹ö½º ÄÄÆ÷³ÍÆ® // »ý¼ºÀÚ Draw2D(String title) { super(title); // ¸Þ´º¹Ù JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); JMenu shapeMenu = menuBar.add(new JMenu("Shape")); shapeMenu.setMnemonic('S'); ButtonGroup shapeBG = new ButtonGroup(); ... // ¿©±â¿¡ ¸Þ´º¸¦ ¸¸µå´Â ÄÚµåµéÀÌ »ý·«µÇ¾î ÀÖ½À´Ï´Ù. // ÇÁ·¹ÀÓÀÇ ±âº» ·¹À̾ƿô °ü¸®ÀÚ´Â BorderLayout canvas.setBackground(Color.white); getContentPane().add(canvas, BorderLayout.CENTER); // À©µµ¿ì Á¾·á À̺¥Æ® ó¸® addWindowListener(exiter); setSize(600, 500); pack(); setVisible(true); } // packÀÌ È£ÃâµÉ ¶§ »ç¿ëµÇ´Â Å©±â public Dimension getPreferredSize() { return new Dimension(500, 400); } // main ¸Þ½îµå public static void main(String args[]) { new Draw2D("Draw2D Program"); } // À©µµ¿ì Á¾·á ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â ³»ºÎ Ŭ·¡½º class ExitController extends WindowAdapter implements ActionListener { public void windowClosing(WindowEvent we) { Draw2D.this.dispose(); System.exit(0); } public void actionPerformed(ActionEvent ae) { Draw2D.this.dispose(); System.exit(0); } } // Draw2D.ExitController Ŭ·¡½º ³¡ }<¿¹Á¦> Draw2D Ŭ·¡½º
½ÇÁ¦ ±×¸²À» ±×¸®´Â ĵ¹ö½º Ŭ·¡½º´Â µµÇü¿¡ °ü·ÃµÈ ÇöÀç Á¤º¸µéÀ» ÀúÀåÇÕ´Ï´Ù.
class DrawCanvas extends JPanel { // µµÇüÀÇ ¸ð¾ç¿¡ °ü·ÃµÈ »ó¼ö final static int SHAPE_LINE = 0; final static int SHAPE_RECT = 1; final static int SHAPE_ROUND_RECT = 2; final static int SHAPE_ELLIPSE = 3; final static int SHAPE_ARC = 4; int shape=SHAPE_LINE; // ±âº» µµÇü ¸ð¾ç // ½ºÆ®·ÎÅ© final static int STROKE_NORMAL = 0; // ¼± µÎ²² 5 final static int STROKE_THIN = 1; // ¼± µÎ²² 1 final static int STROKE_THICK = 2; // ¼± µÎ²² 10 int stroke = STROKE_NORMAL; // ±âº» ½ºÆ®·ÎÅ© boolean dashed = false; // ±âº» °ªÀº ½Ç¼± ½ºÆ®·ÎÅ© // ä¿ò ¹æ½Ä final static int FILL_SOLID = 0; final static int FILL_GRADIENT = 1; final static int FILL_PATTERN = 2; int fill = FILL_SOLID; // ±âº» ä¿ò ¹æ½Ä boolean filled = true; // ±âº» °ªÀ¸·Î ä¿ì±â ¸ðµå // ¸¶¿ì½º À§Ä¡ À̵¿¿¡ µû¶ó µµÇüÀÇ ½ÃÀÛÁ¡°ú ³¡Á¡À» ÀúÀå Point startPoint=new Point(), savePoint=new Point(), endPoint=new Point(); Color fgColor=Color.black; // Àü°æ»ö Color bgColor=Color.white; // ¹è°æ»ö UIController controller = new UIController(); // ¹öÆÛ¸µÀ» À§ÇØ »ç¿ëÇÏ´Â ¿ÀÇÁ½ºÅ©¸° À̹ÌÁö BufferedImage offImage = null; Graphics2D offG2 = null; // ¿ÀÇÁ½ºÅ©¸° À̹ÌÁöÀÇ ±×·¡ÇÈ ÄÁÅؽºÆ® // »ý¼ºÀÚ DrawCanvas() { // ¸¶¿ì½º À̺¥Æ® 󸮱⠵î·Ï MouseController mouseController = new MouseController(); addMouseMotionListener(mouseController); addMouseListener(mouseController); } public void paint(Graphics g) { int width = getSize().width; int height = getSize().height; if (width <=0 || height <= 0) return; // ¿ÀÇÁ½ºÅ©¸° À̹ÌÁö°¡ ¾øÀ¸¸é »ý¼º if (offImage == null || offImage.getWidth() != width || offImage.getHeight() != height) createBufferImage(width, height); // ¿ÀÇÁ½ºÅ©¸° À̹ÌÁö°¡ Á¸ÀçÇÏ¸é ¿ÀÇÁ½ºÅ©¸° À̹ÌÁö¸¦ ĵ¹ö½º¿¡ µð½ºÇ÷¹ÀÌ if (offImage != null) ((Graphics2D) g).drawImage(offImage, 0, 0, this); } // ¿ÀÇÁ½ºÅ©¸° À̹ÌÁö¿Í ±×·¡ÇÈ ÄÁÅؽºÆ® »ý¼º void createBufferImage(int width, int height) { offImage = (BufferedImage) createImage(width, height); if (offImage != null) { offG2 = offImage.createGraphics(); offG2.setBackground(getBackground()); offG2.clearRect(0, 0, width, height); } } // ½ÇÁ¦ 2D¸¦ »ç¿ëÇÏ¿© ±×¸²À» ±×¸®´Â ·çƾ void draw(Graphics2D g, Point startPoint, Point endPoint) { // ½ºÆ®·ÎÅ© ÁöÁ¤ BasicStroke newStroke = null; float dash[]={10.0f}; switch (stroke) { case STROKE_THIN : if (dashed) newStroke = new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f); else newStroke = new BasicStroke(1.0f); break; case STROKE_THICK : if (dashed) newStroke = new BasicStroke(5.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f); else newStroke = new BasicStroke(5.0f); break; case STROKE_NORMAL : default : if (dashed) newStroke = new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f); else newStroke = new BasicStroke(3.0f); break; } g.setStroke(newStroke); // Àü°æ»ö ÁöÁ¤ g.setColor(fgColor); // ä¿ì±â¸¦ »ç¿ëÇÒ °æ¿ì ä¿ò ¹æ½Ä ÁöÁ¤ if (filled) { switch (fill) { case FILL_GRADIENT : // ±×¶óµð¾ðÆ® ä¿ì±â GradientPaint gp = new GradientPaint(startPoint, fgColor, endPoint, bgColor); g.setPaint(gp); break; case FILL_PATTERN : // ÆÐÅÏ Ã¤¿ì±â // ÀÛÀº ¿ÀÇÁ½ºÅ©¸° À̹ÌÁö¿¡ ÆÐÅÏÀ¸·Î »ç¿ëÇÒ À̹ÌÁö¸¦ ±×¸³´Ï´Ù. BufferedImage bi = new BufferedImage(5, 5, BufferedImage.TYPE_INT_RGB); Graphics2D big = bi.createGraphics(); try { big.setColor(fgColor); big.fillRect(0, 0, 5, 5); big.setColor(bgColor); big.fillOval(0, 0, 5, 5); } finally { big.dispose(); } Rectangle r = new Rectangle(0,0,5,5); TexturePaint texture = new TexturePaint(bi, r); g.setPaint(texture); break; case FILL_SOLID : // ¾Õ¿¡¼ setColor() ¸Þ¼Òµå¸¦ È£ÃâÇßÀ¸¹Ç·Î ó¸®ÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. default : break; } } Shape newShape = null; // ±×¸± µµÇüÀÇ ¸ð¾ç ÁöÁ¤ switch (shape) { case SHAPE_RECT : newShape = new Rectangle2D.Float( (float) startPoint.x, (float) startPoint.y, (float) endPoint.x-(float) startPoint.x, (float) endPoint.y-(float) startPoint.y); break; case SHAPE_ROUND_RECT : newShape = new RoundRectangle2D.Float( (float) startPoint.x, (float) startPoint.y, (float) endPoint.x-(float) startPoint.x, (float) endPoint.y-(float) startPoint.y, (endPoint.x-startPoint.x)/10.0f, (endPoint.y-startPoint.y)/10.0f ); break; case SHAPE_ELLIPSE : newShape = new Ellipse2D.Float( (float) startPoint.x, (float) startPoint.y, (float) endPoint.x-(float) startPoint.x, (float) endPoint.y-(float) startPoint.y); break; case SHAPE_ARC : newShape = new Arc2D.Float( (float) startPoint.x, (float) startPoint.y, (float) endPoint.x-(float) startPoint.x, (float) endPoint.y-(float) startPoint.y, 0.0f, 90.0f, Arc2D.PIE); break; case SHAPE_LINE : default : newShape = new Line2D.Float( (float) startPoint.x, (float) startPoint.y, (float) endPoint.x, (float) endPoint.y); break; } // ä¿ì±â ¸ðµåÀ̸é fill() ¸Þ½îµå È£Ãâ if (filled) g.fill(newShape); // ¿Ü°û¼±Àº Ç×»ó ±×¸³´Ï´Ù. g.draw(newShape); } ... // ´Ù¸¥ ³»ºÎ Ŭ·¡½º ¼±¾ðÀÌ ¿©±â¿¡ µé¾î°©´Ï´Ù. }<¿¹Á¦> DrawCanvas Ŭ·¡½º
´ÙÀ½Àº ¸¶¿ì½º À̺¥Æ®¸¦ ó¸®ÇÏ¿© ±×¸²À» ±×¸®´Â DrawCanvas.MouseController Ŭ·¡½ºÀÔ´Ï´Ù.
class MouseController extends MouseInputAdapter { // µå·¡±ëÇÒ ¶§ ¿òÁ÷ÀÌ´Â ÀÜ»óÀ» º¸¿©ÁÝ´Ï´Ù. public void mouseDragged(MouseEvent me) { Graphics2D g=(Graphics2D) getGraphics(); try { g.setXORMode( new Color(255-fgColor.getRed(), 255-fgColor.getGreen(), 255-fgColor.getBlue())); draw(g, startPoint, savePoint); endPoint = me.getPoint(); draw(g, startPoint, endPoint); savePoint=endPoint; } finally { g.dispose(); } } // ¸¶¿ì½º°¡ ´·ÁÁö¸é ½ÃÀÛÁ¡À» ÀúÀåÇÕ´Ï´Ù. public void mousePressed(MouseEvent me) { startPoint = me.getPoint(); savePoint = startPoint; } // ¸¶¿ì½º°¡ ³õ¿©Áö¸é ³¡Á¡À» ÀúÀåÇÏ°í // ÇöÀç ĵ¹ö½º¿Í ¿ÀÇÁ½ºÅ©¸° ¸ðµÎ¿¡ µµÇüÀ» ±×¸³´Ï´Ù. public void mouseReleased(MouseEvent me) { endPoint = me.getPoint(); Graphics2D g=(Graphics2D) getGraphics(); try { draw(g, startPoint, endPoint); if (offG2 != null) draw(offG2, startPoint, endPoint); } finally { g.dispose(); } } }<¿¹Á¦> DrawCanvas.MouseController Ŭ·¡½º
¸Þ´º À̺¥Æ®¸¦ ó¸®ÇÏ´Â DrawCanvas.UIController Ŭ·¡½º´Â »ý·«ÇÕ´Ï´Ù. Draw2D.javaÀÇ ¼Ò½º Äڵ带 ÂüÁ¶Çϱ⠹ٶø´Ï´Ù.
<±×¸²> Draw2D ÇÁ·Î±×·¥ ½ÇÇà ¸ð½À
ÀÚ¹Ù 2D´Â ´Ü¼øÇÑ µå·ÎÀ× ±â´É »Ó¸¸ ¾Æ´Ï¶ó ±Û²Ã ó¸®, À̹ÌÁö ó¸® ±â´É, Àμâ ó¸® ±â´É µî ´Ù¾çÇÑ ºÎºÐ¿¡ °ÉÃÄ ÀÖÁö¸¸ ¿©±â¿¡¼´Â µå·ÎÀ× ±â´É¿¡¸¸ ±¹ÇÑÇÏ¿´½À´Ï´Ù. °ü½ÉÀÖ´Â µ¶ÀÚµéÀº JFC ȨÆäÀÌÁö(http://java.sun.com/products/jfc)¿¡¼ ¸¹Àº Á¤º¸¸¦ ¸¸³¯ ¼ö ÀÖ½À´Ï´Ù.
ÇÙ½É Ã¼Å© ¢Â ½ºÀ® ÄÄÆ÷³ÍÆ®´Â ¼ø¼öÇÑ ÀÚ¹Ù ÄÚµå·Î ÀÛ¼ºµÈ °æ·® ÄÄÆ÷³ÍÆ®µéÀÔ´Ï´Ù. ¢Â ½ºÀ® ÄÄÆ÷³ÍÆ®´Â AWT ÄÄÆ÷³ÍÆ®¿¡¼ ã¾Æº¼ ¼ö ¾ø´Â ´Ù¾çÇÏ°í Æí¸®ÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÕ´Ï´Ù. ¢Â À̺¥Æ® ó¸® ¾²·¹µå°¡ ¾Æ´Ñ ¾²·¹µå¿¡¼ ÄÄÆ÷³ÍÆ®ÀÇ »óŸ¦ º¯È½ÃÅ°°íÀÚ ÇÒ ¶§¿¡´Â SwingUtilities.invokeLater() µîÀÇ ¸Þ½îµå¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ¢Â 2D ±×·¡ÇÈÀº ÀÚ¹Ù ±×·¡ÇÈÀÇ ±â´ÉÀ» Å©°Ô È®Àå½ÃÄÑ º¸´Ù ÀÚÀ¯·Ó°í ¼¶¼¼ÇÑ ±×·¡ÇÈ Ç¥ÇöÀ» °¡´ÉÇÏ°Ô ÇØÁÝ´Ï´Ù. |
¼Ò½º ÄÚµåµéÀº ¿©±â¿¡¼ ã¾Æº¼ ¼ö ÀÖ½À´Ï´Ù.
ÇÊÀÚ ¿¬¶ôó : yoonforh@yahoo.com