org.kwis.msp.lcdui
Class Card

java.lang.Object
  |
  +--org.kwis.msp.lcdui.Card
Direct Known Subclasses:
ProxyCard, TextComponent.ModeViewer

public abstract class Card
extends Object

화면에 출력될 수 있는 하나의 단위 클래스입니다.

이 클래스는 화면에 출력할 수 있는 단위가 되며 한 화면은 여러 카드가 쌓인 스택으로 구성됩니다. 스택에 싸인 여러 카드는 한 화면(Display)에 보여집니다. 한 카드는 여러 화면에 넣을 수는 없습니다.

카드는 화면상에서의 위치와 크기를 가지고 있습니다. moveresize함수를 이용하여 그 위치나 크기를 변경할 수 있습니다.

repaint라는 함수를 사용하게 되면, 카드의 일부분에 대해서 다시 이벤트 처리 쓰레드에 의해서 paint 함수가 불려서 화면에 내용이 나타나도록 되어 있습니다.

카드는 사용자 입력을 받을 수 있습니다. keyNotify, pointerNotify, 등의 사용자에 의해서 불려지는 함수가 있으며, 모든 이벤트는 일단 스택 상위의 Card로 전달됩니다. 전달된 이벤트가 그 카드에서 처리를 한다면 위의 불려지는 함수는 true를 돌려주며, 그러면, 하위 Card는 이벤트를 받지 못합니다. 그러나 반대로 false 를 돌려주면, 하위 카드에게 이벤트를 전달하며, 같은 식으로 이벤트를 받은 하위 카드는 true, false를 돌려줍니다. 이 과정은 맨 하위 Card까지 반복이 됩니다.

카드가 입력받은 키는 기본적으로 ITU-Key '0'부터 '9' 그리고 '#', '*' 이 가능합니다. 이 키들은 휴대폰에 꼭 존재하는 키입니다. 그외의 키들은 게임키로 판별이 가능합니다. 지원되는 키들은 EventQueue.UP, EventQueue.DOWN, EventQueue.LEFT, EventQueue.RIGHT, EventQueue.FIRE등이며, EventQueue.SOFT1, EventQueue.SOFT2도 있지만, 이 경우에는 폰에서 지원하지 않는 경우가 있으므로 유의해서 사용하십시오. 게임 키로 판별할 경우에는 Display.getGameAction(int)Display.getKeyCode(int)라는 함수로 키 코드와 게임 키로의 서로의 변환이 가능합니다.

카드가 pushCard, popCard에 의해서 보여지거나, 보이지 않게되는 경우에 showNotify라는 함수가 불립니다.

좌표체계는 화면 좌측 상단이 원점이 되고, 밑으로 가면 y축의 값이 증가하고, 오른쪽으로 가면 x축의 값이 증가하도록 되어 있습니다.


Field Summary
protected  boolean bTrans
          Card가 투명한지 아닌지 여부.
protected  int h
          Card의 화면상의 높이.
protected  int w
          Card의 화면상의 폭.
protected  int x
          card의 화면상의 x축 좌표.
protected  int y
          Card의 화면상의 y축 좌표.
 
Constructor Summary
Card()
          화면 크기 만큼의 카드를 생성합니다.
Card(boolean bTrans)
           
Card(Display d)
          화면 크기의 카드를 생성합니다.
Card(Display d, int x, int y, int w, int h)
          지정한 display를 위해서 지정한 크기와 위치로 카드를 생성합니다.
Card(Display d, int x, int y, int w, int h, boolean bTrans)
           
Card(int x, int y, int w, int h)
          지정한 크기와 위치로 카드를 생성합니다.
 
Method Summary
 Display getDisplay()
          카드의 display를 돌려줍니다.
 int getHeight()
          카드의 높이를 얻어 옵니다.
 int getWidth()
          카드의 폭을 얻어 옵니다.
 int getX()
          카드의 x축 위치를 얻어 옵니다.
 int getY()
          카드의 y축 위치를 얻어 옵니다.
 boolean isShown()
          Card가 화면에 보이는지 안 보이는지 여부를 돌려줍니다.
protected  boolean keyNotify(int type, int key)
          사용자 키 입력이 생성되면 불립니다.
 void move(int x, int y)
          카드의 화면상의 위치를 변경합니다.
protected abstract  void paint(Graphics g)
          Card의 내용을 그려줍니다.
protected  boolean pointerNotify(int type, int x, int y)
          사용자 포인팅 디바이스의 입력이 생성되면 불립니다.
 void repaint()
          Card전체 영역을 다시 그려줍니다.
 void repaint(int x, int y, int w, int h)
          지정된 영역을 다시 그려줍니다.
 void resize(int w, int h)
          카드의 크기를 변경합니다. w, h 둘중 하나가 0보다 작거나 같은 경우에는 IllegalArgumentException 오류를 발생 시킵니다.
 void serviceRepaints()
          repaint영역을 다시 그리고, 화면에 출력합니다. repaint할 영역을 강제적으로 그립니다.
protected  void showNotify(boolean bShow)
          이 카드가 보이기 바로 직전이나, 카드가 화면에서 삭제되는 경우에 불립니다.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

x

protected int x
card의 화면상의 x축 좌표.

y

protected int y
Card의 화면상의 y축 좌표.

w

protected int w
Card의 화면상의 폭.

h

protected int h
Card의 화면상의 높이.

bTrans

protected boolean bTrans
Card가 투명한지 아닌지 여부. 이 옵션을 사용하면, 현재 카드 바로 하위 컴포넌트가 그린후에 카드가 그려지므로, 알파 블랜딩이나 다양한 형태의 카드를 그릴 수 있습니다.
Constructor Detail

Card

public Card()
화면 크기 만큼의 카드를 생성합니다. 기본적으로 화면의 크기 만큼의 카드를 생성합니다. 이때 Display.getDefaultDisplay함수가 돌려주는 Display의 크기로 잡힙니다.

Card

public Card(boolean bTrans)

Card

public Card(Display d)
화면 크기의 카드를 생성합니다. 카드는 지정된 디스플레이에서만 사용할수 있습니다. 확인합니다.
Parameters:
d - 카드를 생성할 display

Card

public Card(int x,
            int y,
            int w,
            int h)
지정한 크기와 위치로 카드를 생성합니다. Display.getDefaultDisplay함수를 통해서 기본 Display를 얻어와서 그 Display를 위한 Card를 만듭니다. 이때에는 인수로 넘어오는 값으로 위치와 그 크기를 결정합니다.
Parameters:
x - Card의 display상에서의 x축 좌표
y - Card의 display상에서의 y축 좌표
w - Card의 폭
h - Card의 높이
Throws:
IllegalArgumentException - w나 h가 0 이하인 경우

Card

public Card(Display d,
            int x,
            int y,
            int w,
            int h)
지정한 display를 위해서 지정한 크기와 위치로 카드를 생성합니다. 지정된 Display를 위한 Card를 만듭니다. 이때에는 인수로 넘어오는 값으로 위치와 그 크기를 결정합니다.
Parameters:
d - 카드를 생성할 display.
x - Card의 display상에서의 x축 좌표
y - Card의 display상에서의 y축 좌표
w - Card의 폭
h - Card의 높이
Throws:
IllegalArgumentException - w나 h가 0 이하인 경우

Card

public Card(Display d,
            int x,
            int y,
            int w,
            int h,
            boolean bTrans)
Method Detail

move

public void move(int x,
                 int y)
카드의 화면상의 위치를 변경합니다. 지정된 x, y값으로 화면상의 위치를 변경합니다.
Parameters:
x - Card의 display상에서의 x축 좌표
y - Card의 display상에서의 y축 좌표

resize

public void resize(int w,
                   int h)
카드의 크기를 변경합니다. w, h 둘중 하나가 0보다 작거나 같은 경우에는 IllegalArgumentException 오류를 발생 시킵니다.
Parameters:
w - 카드의 폭
h - 카드의 높이
Throws:
IllegalArgumentException - w나 h가 0 이하인 경우

getWidth

public int getWidth()
카드의 폭을 얻어 옵니다. 카드의 화면상의서의 폭을를 얻어 옵니다.
Returns:
카드의 폭

getHeight

public int getHeight()
카드의 높이를 얻어 옵니다. 카드의 화면상의서의 높이를 얻어 옵니다.
Returns:
카드의 높이

getX

public int getX()
카드의 x축 위치를 얻어 옵니다. 카드의 x축 상에서의 위치를 얻어 옵니다.
Returns:
카드의 x축 상의 좌표

getY

public int getY()
카드의 y축 위치를 얻어 옵니다. 카드의 y축 상에서의 위치를 얻어 옵니다.
Returns:
카드의 y축 상의 좌표

showNotify

protected void showNotify(boolean bShow)
이 카드가 보이기 바로 직전이나, 카드가 화면에서 삭제되는 경우에 불립니다. 화면에서 이 카드 보이기 바로 직전에는 bShow파라미터가 true가 되어서 호출되며, 카드가 화면에 사라지기 전에는 bShowfalse가 되어서 호출됩니다. 상속하는 클래스에서 이 함수내에 애니메이션이나 타이머를 등록하거나 삭제하는 기능을 넣으시면 됩니다.
Parameters:
bShow - 보이는지 안보이는지 여부

keyNotify

protected boolean keyNotify(int type,
                            int key)
사용자 키 입력이 생성되면 불립니다. 사용자가 키를 누르거나 뗄때 포커스를 가지는 컴포넌트의 이 함수가 불립니다.

키를 누르거나 뗄때에는 param1이 키 코드 값이 되고, type에는 KEY_PRESSEDKEY_RELEASED등과 같은 내부 서브 이벤트 타입값이 넘어 옵니다.

이 함수는 리턴 값으로 false를 넘기면 이벤트가 하위 카드로 전달됩니다. 만일 true를 넘기면 이벤트는 더 이상 하위 카드로 전달되지 않습니다.

Parameters:
type - KEY_PRESSEDKEY_RELEASED, KEY_TYPED, KEY_REPEATED중 하나
key - keyCode값; 자세한 키코드는 EventQueue를 참조
Returns:
하위 카드에 이벤트 전달하려면 true, 그렇지 않으면 false

pointerNotify

protected boolean pointerNotify(int type,
                                int x,
                                int y)
사용자 포인팅 디바이스의 입력이 생성되면 불립니다. 사용자가 키를 누르거나 뗄때, 혹은 포인팅 디바이스의 입력이 있는 경우 불립니다.

typePOINT_PRESSED, POINT_RELEASED, POINT_DRAGGED중 하나가 되며, 포인팅 디바이스의 x, y축값은 Card상에서의 좌표체계 값이 됩니다.

이 함수가 리턴 값으로 false를 넘기면 이벤트는 하위 카드로 전달됩니다. 만일 true를 넘기면 이벤트는 더이상 하위 카드로 전달되지 않습니다.

키 코드 값은 기본 ITU 키인 경우에는 대응하는 ASCII 코드 값이 되며, 그렇지 않은 경우에는 모두 음수값으로 넘어 옵니다. 제어 키인 경우에는 Display.getGameAction(int)으로 해당하는 키인지를 판별합니다.

Parameters:
type - POINT_PRESSEDPOINT_RELEASED, POINT_DRAGGED중 하나
key - 키 코드 값
Returns:
하위 Card에 이벤트 전달하려면 true, 그렇지 않으면 false

paint

protected abstract void paint(Graphics g)
Card의 내용을 그려줍니다. 응용 프로그램은 이 함수를 꼭 구현해 주어야 합니다. 이때 인수로 넘어오는 gCard에 맞도록 클리핑 되어 있습니다. translate, setClip에 의해서 클리핑 영역을 변경하게 되면, Card가 지정하는 이상의 부분을 칠하게 되어 있으므로 유의해서 사용해야 합니다. 그릴 내용은 Graphics객체를 사용하여 그리게 됩니다.
Parameters:
g - 칠해질 graphics

repaint

public void repaint(int x,
                    int y,
                    int w,
                    int h)
지정된 영역을 다시 그려줍니다. x, y로 시작해서 폭 w, 높이 h만큼의 사각형의 내용을 다시 그려줍니다. 이 함수는 직접 paint함수를 부르지 않고, 다만 특정 시간 이후에 paint함수가 이벤트 처리 쓰레드에서 부릅니다.

paint함수를 부를때 넘어오는 Graphics 객체는 다시 칠할 영역으로 클리핑되어 넘어 옵니다. 클리핑 영역은 이 함수를 부르기전까지의 칠할 영역을 모두 합하므로 repaint한 영역 보다 클 수 있습니다.

다시 칠해지는 영역은 Card의 영역을 벗어 날 수 없습니다.

Parameters:
x - 특정영역을 가르키는 Card상에서의 x축 좌표
y - 특정영역을 가르키는 Card상에서의 y축 좌표
w - 특정영역을 넓이
h - 특정영역을 폭

repaint

public void repaint()
Card전체 영역을 다시 그려줍니다. repaint(0, 0, getWidth(), getHeight())을 부르는것과 마찬가지 효과입니다.

serviceRepaints

public void serviceRepaints()
repaint영역을 다시 그리고, 화면에 출력합니다. repaint할 영역을 강제적으로 그립니다. 이 함수 내에서 직접 paint 함수를 부릅니다.

isShown

public boolean isShown()
Card가 화면에 보이는지 안 보이는지 여부를 돌려줍니다. CardDisplaypushCard함수로 등록되어야만 화면에 출력됩니다.
Returns:
보이는지 안 보이는 지 여부

getDisplay

public Display getDisplay()
카드의 display를 돌려줍니다.
Returns:
카드의 disp

repaint

public void repaint(int x,
                    int y,
                    int w,
                    int h)
吏€