org.kwis.msp.lcdui
Class Display

java.lang.Object
  |
  +--org.kwis.msp.lcdui.Display

public class Display
extends Object

화면의 출력 관련 함수와 정보를 가지는 클래스입니다. 기본적으로 화면에 무언가를 출력하기 위해서 Display를 구한후에 Card를 생성하고, pushCard함수를 호출하여 DisplayCard를 등록 시킵니다. 이후에 Cardpaint함수에서 그려지는 내용이 화면에 출력됩니다.

한 화면(LCD)은 Display에 대응합니다. 응용프로그램은 Display을 여러개 가질 수 있습니다. 이는 휴대폰중에 듀얼 LCD가 있는 모델을 지원하기 위하여 JLet상에서 두 화면을 사용할 수도록 하기 위함입니다. Display를 얻어 오기 위해서는 getDisplay(java.lang.String)함수를 사용하여 가져옵니다.

한 화면을 여러개의 Card로 구성됩니다. Card는 맨 아래 Card부터 시작해서 하나씩 그려지며, 맨 마지막에는 스택 맨 상위에 있는 Card가 그려집니다. 이런 메커니즘으로 대화 상자등을 처리할 수 있도록 하였습니다.

입력은 반대 방향으로 맨 상위에 있는 Card에게 전달되며 이 Card는 자신이 이벤트를 처리했는지 않했는지 여부를 돌려줍니다. 만일 처리했다면, 더이상 이벤트는 하위 Card에게 전달되지 않지만, 처리하지 않았다면 하위 Card에게 전달되며, 다시한번 처리여부를 확인하게 되어 맨 아래 Card까지 전달 될 수도 있습니다. 실제로 InputMethodHandler에 의해서 생성되는 창이나 기타 대화 상자등은 이런 식으로 처리가 됩니다.

듀얼 LCD에 대응하는 Display에서는 사용자 입력 이벤트(키 이벤트, 포인터 이벤트)가 발생하지 않음을 유의하십시오.

See Also:
Card

Method Summary
 void addJletEventListener(JletEventListener qel)
          JletEvent를 받을 리스너를 등록합니다. key, repaint, point외에 발생하는 모든 이벤트가 발생시에 호출되는 리스너를 등록합니다.
 void callSerially(Runnable r)
          이벤트가 다 처리되고 난 후에 특정 Runnable의 함수 run을 호출하도록 합니다.
 void callSerially(Runnable r, int timeout)
          이벤트가 다 처리되고 난 후에 특정 Runnable의 함수 run을 호출하도록 합니다.
 int countCard()
          Display에 등록된 카드의 갯수를 가져옵니다.
 void flush()
          내부의 버퍼의 내용을 화면에 출력하도록 합니다.
 int getBitsPerPixel()
          화면의 한 픽셀당 차지하는 비트(bit)를 돌려줍니다.
static Display getDefaultDisplay()
          기본 Display를 얻어 옵니다.
static Display getDisplay(String str)
          문자열에 대응하는 Display를 얻어 옵니다.
 Card getDockedCard()
          붙여진 카드를 돌려줍니다.
static int getGameAction(int key)
          지정한 키 코드에 대응하는 게임키를 구합니다.
 int getHeight()
          화면의 높이를 돌려줍니다.
static int getKeyCode(int gameKey)
          게임키에 대응하는 키 코드값을 얻어 옵니다. gameKey는 EventQueue.UP, EventQueue.DOWN, EventQueue.LEFT, EventQueue.RIGHT, EventQueue.FIRE, EventQueue.GAME_A, EventQueue.GAME_B, EventQueue.GAME_C, EventQueue.GAME_D, 중 하나가 되며, 돌려주는 값은 실제적인 키 코드 값이 됩니다.
static String getKeyName(int key)
          키 코드에 대응하는 키 이름의 문자열을 돌려 받습니다.
 int getWidth()
          화면의 폭을 돌려줍니다.
 void grabKey(int key, JletEventListener qel)
          특정 키를 함수를 부르는 응용 프로그램에서 소유하게 합니다.
 boolean hasPointerEvents()
          시스템에 포인터 디바이스관련 이벤트가 있는지 여부를 돌려줍니다.
 boolean hasPointerMotionEvents()
          시스템에 포인터 움직임 디바이스 이벤트가 있는지 여부를 돌려줍니다.
 boolean hasRepeatEvents()
          키 반복 이벤트가 발생할 수 있는지 없는지 여부를 돌려줍니다.
 boolean isColor()
          화면이 컬러 색상을 지원하는지 여부를 돌려줍니다.
 boolean isDoubleBuffered()
          화면이 더블 버퍼링(double buffering)인지 여부를 돌려줍니다.
 int numColors()
          화면에서 사용할 수 있는 색상의 갯수를 돌려줍니다.
 Card popCard()
          카드를 꺼내옵니다.
 void pushCard(Card c)
          카드를 화면에 보일 수 있도록 합니다.
 void removeAllCards()
          모든 카드를 제거합니다.
 boolean removeCard(Card c)
          특정 카드를 제거합니다.
 void removeJletEventListener(JletEventListener qel)
          JletEvent를 받을 리스너를 삭제합니다.
 void setDockedCard(Card cd, int where)
           
 void setJletEventListener(JletEventListener qel)
           
 void ungrabKey(int key)
          grabKey로 인한 이벤트 소유를 이전 상태로 돌립니다.
static void where()
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getDefaultDisplay

public static Display getDefaultDisplay()
기본 Display를 얻어 옵니다. 기본 화면에 대응하는 Display를 얻어 옵니다. ql가 null이면 NullPointerException이 발생합니다.
Returns:
기본 display
Throws:
NullPointerException - ql이 null인 경우

getDisplay

public static final Display getDisplay(String str)
문자열에 대응하는 Display를 얻어 옵니다. 이때 문자열이 null이면 기본 Display를 얻어 오며, 폰에 따라서는 문자열을 "dual"로 넘겨주면 듀얼 lcd에 대응하는 Display를 얻어 올수 있습니다. 만일 해당하는 Display가 없는 경우에는 null을 돌려줍니다.
Parameters:
ql - Jlet
str - display를 가르키는 문자열
Returns:
display 객체
Throws:
NullPointerException - ql이 null인 경우

pushCard

public final void pushCard(Card c)
카드를 화면에 보일 수 있도록 합니다. 카드를 화면에 보여지도록 하며 사용자의 입력을 받으면 지정된 함수가 불러지도록 합니다. 카드는 화면 상위에 위치하여 다른 카드들이 다 그려진후 그려집니다.

만일 같은 카드가 이미 화면에 보여지고 있다면, 이 함수는 아무런 일도 하지 않습니다. 또한 c값이 null이면 아무런 동작도 하지 않습니다.

화면에 카드가 보여지게되면, 그리기 전에 showNotify함수를 호출합니다. 그리고 나서 repaint가 불리기 때문에 특정 시간 이후에 paint가 불려져 화면에 나타납니다.

이후로 isShown()이라는 함수는 항상 true를 돌려주도록 되어 있습니다.

응용 프로그램이 타 응용 프로그램을 수행한 후에 pushCard()를 하게 되면, 그 카드는 화면 맨 상단에 보여지지 않고, 타 응용 프로그램의 바로 아래에 위치하게 됩니다.

Parameters:
c - 화면에 맨 상위에 보여질 카드.
Throws:
NullPointerException - c가 null인 경우

popCard

public final Card popCard()
카드를 꺼내옵니다.

카드를 화면에서 제거하며, 그 카드를 가져옵니다. 만일 아무런 Card 도 없다면 null을 돌려줍니다. 카드는 현재 수행하고 있는 Jlet에서 생성한 카드만을 꺼내 옵니다.

만일 카드가 존재한다면, 그 카드의 showNotify()함수를 불러준 후에 카드를 화면에서 제거합니다.

이 함수 이후로 isShown()함수를 부르면 항상 false를 돌려줍니다.

Returns:
꺼내온 카드

removeCard

public final boolean removeCard(Card c)
특정 카드를 제거합니다. 카드를 화면에서 제거하며, 그 카드를 가져옵니다. popCard와는 카드를 지정하는 것외에 다른 점은 없습니다. 만일 c가 null이라면 false를 돌려줍니다.
Parameters:
c - 삭제할 카드
Returns:
성공적으로 스택에 카드를 제거했는지 여부

removeAllCards

public void removeAllCards()
모든 카드를 제거합니다. 현재 수행중인 Jlet이 생성한 모든 카드를 Display 에서 제거합니다. 각 카드의 showNotify()가 각각 불리며, 더 이상 카드는 화면에 나타나지 않습니다.

countCard

public final int countCard()
Display에 등록된 카드의 갯수를 가져옵니다. 현재 JletDisplay에 등록한 카드의 갯수를 가져옵니다.
Returns:
카드 스택에 있는 카드의 갯수

callSerially

public final void callSerially(Runnable r)
이벤트가 다 처리되고 난 후에 특정 Runnable의 함수 run을 호출하도록 합니다. 이벤트 큐 맨 뒤에 'Runnable'을 부르는 이벤트를 넣고, 곧바로 함수가 종료 됩니다. 이벤트 처리 쓰래드가 이 이벤트를 처리할 때에는 Runnable 클래스의 run을 수행하도록 되어 있습니다. 이런 구조로 인해서 r.run()은 될수 있으면 짧은 수행 시간을 가져야 합니다. 여기서 무한 루프나 상당히 많은 시간을 소모 하는 작업을 하면, 이벤트관련 처리를 못하므로, 프로그램이 사용자 입력을 제대로 처리하지 못합니다.
Parameters:
r - 수행할 runnable 객체
Throws:
NullPointerException - rnull인 경우

callSerially

public final void callSerially(Runnable r,
                               int timeout)
이벤트가 다 처리되고 난 후에 특정 Runnable의 함수 run을 호출하도록 합니다. 이벤트 큐 맨 뒤에 'Runnable'을 부르는 이벤트를 넣고, 곧바로 함수가 종료 됩니다. 이벤트 처리 thread가 이 이벤트를 처리할 때에는 Runnable 클래스의 run을 수행하도록 되어 있습니다. 이런 구조로 인해서 r.run()은 될수 있으면 짧은 수행 시간을 가져야 합니다. 여기서 무한 루프나 상당히 많은 시간을 소모 하는 작업을 하면, 이벤트관련 처리를 못하므로, 프로그램이 사용자 입력을 제대로 처리하지 못합니다. 이 함수는 특정 시간 이후에 rrun 을 부를 수 있도록 해줍니다. 만일 timeout이 0보다 작으면 0으로 간주합니다.
Parameters:
r - 수행할 runnable 객체
timeout - Runnable이 불려질 시간(밀리 세컨드 단위)
Throws:
NullPointerException - rnull인 경우
IllegalArgumentException - timeout이 음수인 경우

getDockedCard

public Card getDockedCard()
붙여진 카드를 돌려줍니다.

setDockedCard

public void setDockedCard(Card cd,
                          int where)

isColor

public final boolean isColor()
화면이 컬러 색상을 지원하는지 여부를 돌려줍니다.
Returns:
컬러 지원 여부

numColors

public final int numColors()
화면에서 사용할 수 있는 색상의 갯수를 돌려줍니다.
Returns:
색상 갯수

hasPointerEvents

public final boolean hasPointerEvents()
시스템에 포인터 디바이스관련 이벤트가 있는지 여부를 돌려줍니다.
Returns:
포인터 이벤트 여부

hasPointerMotionEvents

public final boolean hasPointerMotionEvents()
시스템에 포인터 움직임 디바이스 이벤트가 있는지 여부를 돌려줍니다.
Returns:
포인터 움직임 이벤트 여부

hasRepeatEvents

public final boolean hasRepeatEvents()
키 반복 이벤트가 발생할 수 있는지 없는지 여부를 돌려줍니다.
Returns:
키 반복 이벤트 여부

getWidth

public final int getWidth()
화면의 폭을 돌려줍니다. 화면의 픽셀단위의 폭을 돌려줍니다.
Returns:
화면의 폭

getHeight

public final int getHeight()
화면의 높이를 돌려줍니다. 화면의 픽셀단위의 높이을 돌려줍니다.
Returns:
화면의 높이

isDoubleBuffered

public boolean isDoubleBuffered()
화면이 더블 버퍼링(double buffering)인지 여부를 돌려줍니다. 대부분의 휴대폰은 더블 버퍼링을 지원합니다. 즉 화면의 Graphics에 그릴때 화면에 즉시 나타나는 것이 아니라, 특정 함수(flush)를 호출해야만 그린 내용이 화면에 나타납니다.
Returns:
double buffer 여부

getKeyCode

public static int getKeyCode(int gameKey)
게임키에 대응하는 키 코드값을 얻어 옵니다. gameKey는 EventQueue.UP, EventQueue.DOWN, EventQueue.LEFT, EventQueu