[4th Seoul Workshop]»ç¿ëÀÚ interfaceÀÇ ±¸Çö(B15)

°­´ë¿õ
¼­¿ï ¿µµîÆ÷±¸ ¿©Àǵµµ¿ 11-11 ÇѼ­¿ÀÇǽºÅÚ 916È£
³ª¹«¼ÒÇÁÆ®
E-mail : gothic@star.elim.net
URL : http://www.namusoft.com/gothic.html
Abstract:
´ëÈ­Çü ÇÁ·Î±×·¥ÀÇ ÀÛ¼º½Ã ÇÊ¿äÇÑ »ç¿ëÀÚ interface¸¦ ¿¹Á¦ AppletÀÇ Source¸¦ ±Ù°£À¸·Î ¼³¸íÇÔ.
´Ù·ê ³»¿ëÀº Á¤º¸ÀÇ ÀԷ¿¡ ÇÊ¿äÇÑ event, Á¤º¸ÀÇ Ãâ·Â¿¡ ÇÊ¿äÇÑ Control, Panel, LayoutµîÀÓ
Keywords:
Java, Awt, Interface, Workshop, ³ª¹«¼ÒÇÁÆ®, °­´ë¿õ

1. °³¿ä

1.1 AWT(Abstract Window Tool Kit)

»ç¿ëÀÚ interface¸¦ À§ÇÑ event, componetµîÀÇ class·Î ±¸¼ºµÈ Package

1.2 ±¸¼º

  1. Component : ±×¸² 1 ÂüÁ¶
  2. Panel Manager
  3. µµÇü
  4. ±âŸ

component picture

±×¸² 1 : Component±¸¼º

2. Graphics

2.1 Component ÀÇ Graphic °ü·Ã Event

  1. paint : resize, restore, pageº¯°æµîÀ¸·Î È­¸éÀÌ ´Ù½Ã ±×·Á Á®¾ß µÉ ¶§ ºÒ¸®¿öÁü
  2. resize : windowÀÇ Å©±â°¡ º¯°æµÉ ¶§ ºÒ¸®¿ö Áø´Ù.(ScaleÀÇ ±¸Çö½Ã »ç¿ëÇϸé À¯¿ë)
  3. layout : LayoutÀÇ º¯È­°¡ ÀÖÀ» ¶§ ºÒ¸®¿öÁü
  4. update: repaintÇÔ¼ö°¡ ¼öÇàµÇ¸é ÀÌ ÇÔ¼ö°¡ ºÒ¸®¿ö Áø´Ù.
  5. repaint: »ç¿ëÀÚ°¡ È­¸éÀ» updateÇÏ°í ½ÍÀ» ¶§ ÀÌ ÇÔ¼ö¸¦ ºÎ¸§

2.2 Applet ¼öÇà½Ã event ¹ß»ý ¼ø¼­

  1. layout
  2. resize
  3. init
  4. resize
  5. layout
  6. paint

2.1 È­¸éÇ¥½ÃÀÇ ÀϹÝÀû ±¸Çö

½ÇÁö·Î È­¸éÀ» ±×¸®´Â ºÎºÐÀ» update method¿¡ ±¸ÇöÇϰí paintÇÔ¼ö´Â updateÇÔ¼ö¸¸ ºÎ¸£°Ô ÇÔÀ¸·Î½á system¿¡¼­ È­¸éÀ» ±×¸®´Â ºÎºÐ°ú »ç¿ëÀÚ°¡ repaint¸¦ »ç¿ëÇÏ¿© È­¸éÀ» ±×¸®´Â ºÎºÐÀ» µ¿ÀϽà ÇÑ´Ù.

2.2 Offscreen ImageÀÇ ±¸Çö

  1. ¹®Á¦ : µµÇüÀÚ·á ¼ö°¡ °¡ ¸¹¾Æ Áú¼ö·Ï È­¸é Àç»ý½Ã ±×¸®´Â °úÁ¤ÀÌ ´«¿¡ º¸¿© ÁöÀúºÐÇÑ ´À³¦À» ÁØ´Ù.
  2. ÇØ°á : Graphics¸¦ Çϳª ´õ ¸¸µé¾î »õ·Î ¸¸µç Graphics¿¡ ±×¸®±â ÀÛ¾÷À» Çϰí À̸¦ È­¸é Graphics¿¡ º¹»çÇÑ´Ù
  3. »ç¿ë¿¹
Dimension dm = size();
offImage = createImage(dm.width, dm.height);
offGraphics = offImage.getGraphics();
....
public void paint(Graphics g)
{ update(g); }
public void update(Graphics g) {
}

2.3 createImage Bug

    Windows95 ȯ°æ¿¡¼­ GDI Resource¸¦ Free½ÃÄÑÁÙ ¹æ¹ýÀÌ ¾ø´Ù.

3. Event

3.1 ±â´É:»ç¿ëÀÚÀÇ inputÀ» ¹Þ´Â´Ù

3.2 Event Method in Component

  1. handleEvent : ¸ðµç event¸¦ °ü¸®ÇÑ´Ù.
  2. mouse °ü·Ã
    1. mouseDown
    2. mouseDrag
    3. mouseEnter
    4. mouseDrag
    5. mouseMove
    6. mouseUp
  3. keyboard°ü·Ã
    1. keyDown
    2. keyUp
  4. focus°ü·Ã
    1. gotFocus
    2. lostFocus
  5. action : component dependentÇÑ event¸¦ ¹Þ´Â´Ù
  6. deliverEvent : sub componet¿¡°Ô event¸¦ ³Ñ±ä´Ù.
  7. postEvent : handle event¸¦ ¼öÇàÇÏ°Ô ÇÑ´Ù.

3.3 Event Routing

Event Routing Picture

±×¸² 2

3.4 handleEvent»ç¿ë½Ã ÁÖÀÇ »çÇ×

3.5 Source in Component

    public boolean handleEvent(Event evt){
      switch (evt.id) {
      case Event.MOUSE_ENTER: return mouseEnter(evt, evt.x, evt.y);
      case Event.MOUSE_EXIT: return mouseExit(evt, evt.x, evt.y);
      case Event.MOUSE_MOVE: return mouseMove(evt, evt.x, evt.y);
      case Event.MOUSE_DOWN: return mouseDown(evt, evt.x, evt.y);
      case Event.MOUSE_DRAG: return mouseDrag(evt, evt.x, evt.y);
      case Event.MOUSE_UP: return mouseUp(evt, evt.x, evt.y);
      case Event.KEY_PRESS: case Event.KEY_ACTION: return keyDown(evt, evt.key);
      case Event.KEY_RELEASE: case Event.KEY_ACTION_RELEASE: return keyUp(evt, evt.key);
      case Event.ACTION_EVENT: return action(evt, evt.arg);
      case Event.GOT_FOCUS: return gotFocus(evt, evt.arg);
      case Event.LOST_FOCUS: return lostFocus(evt, evt.arg);
      }
      return false;
    }

4.LayoutManager

4.1 ±â´É:Container¾È¿¡ Component¸¦ ¹èÄ¡ÇÏ´Â ¹æ¹ýÀ» Á¤ÇÑ´Ù.

4.2 Á¾·ù

Âü°í : http://www.javasoft.com/books/Series/Tutorial/ui/layout/using.html

  1. BorderLayout : ÄÄÆ÷³ÍÆ®¸¦ Á߽ɰú »óÇÏÁ¿쿡 ¹èÄ¡
  2. CardLayout : ÇÑ ÄÁÅ×À̳ʿ¡ ÄÄÆÛ³ÍÆ® ¼ÂÀÌ ¿©·¯°³ À϶§ »ç¿ë
  3. FlowLayout: Component¸¦ Á¿ì·Î ±æ°Ô ¹èÄ¡
  4. GridLayout: ÄÄÆ÷³ÍÆ®¸¦ ÀÏÁ¤ÇÑ Å©±â·Î ¹ÙµÏÆÇ ½ÄÀ¸·Î ¹èÄ¡
  5. GridBagLayout(GridBagConstraints)
  6. null : layout manager¸¦ »ç¿ëÇÏÁö ¾ÊÀ» ¶§, componet¸¦ ¿øÇÏ´Â À§Ä¡¿¡ ¹èÄ¡ ½Ãų¼ö ÀÖ´Ù.

4.3 LayoutManager Source

4.4 LayoutMangerÀÇ ±¸Çö

class¸¦ implement LayoutÇüÅ·Π¸¸µé°í LayoutManager¿¡ ÀÖ´Â 5°¡Áö method¸¦ ±¸ÇöÇØ ÁØ´Ù.

4.5 LayoutMangerÀÇ »ç¿ë

Container¿¡ component¸¦ addÇϱâÀü¿¡ setLayoutÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© Layoutmanager¸¦ ¼³Á¤ÇÑ´Ù.

5.Dialog

5.1 ¹®Á¦: AppletÀº FrameÀÌ·Î ºÎÅÍ »ó¼ÓÀ» ¹Þ¾Æ Dialog¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.

5.2 ÇØ°á: Dialog´ë½Å FrameÀÏ »ç¿ëÇϰí Frame À» »ç¿ëÇϴµ¿¾È AppletÀ» DisableÇÑ´Ù.

5.3 ¿¹Á¦

      SetSizeFrame frm = new SetSizeFrame(this, applet);
        frm.tfWidth.setText(Integer.toString(dimension.width));
        frm.tfHeight.setText(Integer.toString(dimension.height));
        frm.tfComment.setText(comment);
        frm.pack();
        frm.show();
        applet.disable();







6.ÀÀ¿ë(Scroll Panel)

6.1 ±â´É:ScrollÀÌ °¡´ÉÇÑ Panel

6.2 ±¸Çö

/**
 * A container class that can scroll area with scrollbar
 *
 * @version     1.0 03/24/96
 * @author          Kang, Dae Woong (namu@star.elim.net)
 */

class ScrollPanel extends Panel
{
    /**
     * The target panel that will be scrolled
     */
        WorkPanel target;
    /**
     * Scrollbars that will be displayed in south, east.
     */
        Scrollbar scbVertical, scbHorizontal;

    /**
     * Constructs a ScrollPanel with a WorkPanel
     * @param target that will be scrolled
     */
        public ScrollPanel(WorkPanel target)
        {
                this.target = target;
                setLayout(new BorderLayout());

                add("Center", target);
                add("South", scbHorizontal = new Scrollbar(Scrollbar.HORIZONTAL,
                    0, 100, 0, 200));
                add("East", scbVertical = new Scrollbar(Scrollbar.VERTICAL));
        }

    /**
     * set Scrollbar values
     */
        public void layout()
        {

                Dimension dm;
                super.layout();
                dm = target.size();

                if (dm.height < target.dimension.height)
                {
                        scbVertical.enable();
                        scbVertical.setValues(scbVertical.getValue(), dm.height, 0, 
                                              target.dimension.height);
                }
                else
                {
                        scbVertical.disable();
                }

                if (dm.width < target.dimension.width)
                {
                        scbHorizontal.enable();
                        scbHorizontal.setValues(scbHorizontal.getValue(), dm.width, 0, 
                                                target.dimension.width);
                }
                else
                {
                        scbHorizontal.disable();
                }
        }

    /**
     * handle Scrollbar event
     */
        public boolean handleEvent(Event e)
        {
                if (e.target == scbVertical || e.target == scbHorizontal)
                {
                        Scrollbar scr = (Scrollbar) e.target;
                        int val = 0;
                        int tmp;
                        boolean isDefault = false;
                        switch (e.id)
                        {
                        case e.SCROLL_ABSOLUTE:
                                val = ((Integer)e.arg).intValue();
                                break;
                        case e.SCROLL_LINE_DOWN:
                                tmp = scr.getValue() + scr.getVisible()/10;
                                scr.setValue((tmp  + scr.getVisible() > 
                                              scr.getMaximum()) ? scr.getMaximum()
                                                         - scr.getVisible() : tmp);
                                val = scr.getValue();
                                break;
                        case e.SCROLL_LINE_UP:
                                scr.setValue(scr.getValue() - scr.getVisible()/10);
                                val = scr.getValue();
                                break;
                        case e.SCROLL_PAGE_DOWN:
                                tmp = scr.getValue() + scr.getVisible();
                                scr.setValue((tmp + scr.getVisible() > 
                                              scr.getMaximum()) ? 
                                              scr.getMaximum()  - scr.getVisible() : tmp);
                                val = scr.getValue();
                                break;
                        case e.SCROLL_PAGE_UP:
                                scr.setValue(scr.getValue() - scr.getVisible());
                                val = scr.getValue();
                                break;
                        default:
                                isDefault = true;
                        }
                        if (!isDefault)
                        {
                                if (e.target == scbVertical)
                                        target.ptScroll.y = val;
                                else
                                        target.ptScroll.x = val;
                                target.repaint();
                                return true;
                        }
                }

                return super.handleEvent(e);
        }
} 


/**
 * A class where draw the drawing
 *
 * @version     1.0 03/24/96
 * @author          Kang, Dae Woong (namu@star.elim.net)
 */
class WorkPanel extends Panel
{
        Point ptScroll = new Point(0, 0);
        Dimension dm = size();                  

        public boolean handleEvent(Event e)
        {
                e.translate(ptScroll.x, ptScroll.y);

                return super.handleEvent(e);
        }

        public void paint(Graphics g)
        {
                update(g);
        }

        public void update(Graphics g)
        {
                Rectangle clipRect;

                g.clipRect(0, 0, dimension.width, dimension.height);
                clipRect = g.getClipRect();

                clipRect.translate(ptScroll.x, ptScroll.y);
                offGraphics.translate(-ptScroll.x, -ptScroll.y);

                offGraphics.setColor(getBackground());
                offGraphics.fillRect(clipRect.x, clipRect.y, clipRect.width, 
                                     clipRect.height);
                ....
        }
        .....
}

7.¹ÌÇØ°á Awt±â´É

7.1 How to Print ?

7.2 How to Scaling (Viewpoint, Window) ?

7.3 Set Line Width

7.4 ÇÑ±Û ÀÔ·Â


Âü°í¹®Çå

[WebDraw Source]
(http://www.namusoft.com/java/)

Last-Modified : Tuesday, 09-Dec-2014 17:26:16 UTC