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