J2ME(Java 2 Micro Edition) 무선 장치용 UI의 핵심 컴포넌트 인공지능연구실
MIDP UI(User Interface) API High-Level API 이식성을 요구하는 일반 애플리케이션 제작에 사용되는 API 컴포넌트를 비쥬얼하게 보여주기 어렵다 High-Level의 UI 이벤트에만 접근가능 Low-Level API 개발자가 게임 같은 애플리케이션에서 명확한 배치와 그래픽 요소의 제어와 Low-Level 입력 이벤트의 접근 등 특정한 목적에 맞게 제작할 때 사용되는 API 장치에 의존적이기 때문에 이식성이 떨어진다 애플리케이션 개발시 High-Level API와 Low-Level API의 특성을 적절히 고려하여 사용
lcdui package(1) 모든 MIDP UI 클래스들은 lcdui 패키지에 있다 UI 클래스를 사용하기 위해, MIDlets은 다음과 같이 패키지를 import해야 한다 import javax.microedition.lcdui.*;
lcdui package(2) interface 설명 Choice 미리 정의된 선택할 개수의 항목에서 선택하는 사용자 인터페이스 구성 요소를 위해 API를 정의한다 CommandListener 구현된 컴포넌트에서 High-Level 이벤트를 받을 필요가 있는 어플리케이션에 의해 사용된다 Alert 사용자에게 data를 보여주고, 다음 스크린까지 가기 전에 일정한 시간동안 기다리는 스크린 ItemStateListener 상호 작용적인 항목의 내부 상태 변화를 가리키는 이벤트를 받을 수 있는 어플리케이션에 의해 사용된다 AlertType alert의 본질을 가리킨다 ChoiceGroup 한 Form에 있는 선택 가능한 요소들의 집합 Font fonts와 font metrics를 나타낸다 Command 행동의 의미적인 정보를 캡슐화 한 구조물 Graphics 기하학의 단순한 2D를 제공한다 Displayable Display위에 자리 할 수 있는 능력을 가진 객체 Display Display매니저와 시스템의 입력장치를 나타낸다 DateField 달력이나 시간정보를 보여줄 수 있는 편집 가능한 component이며, Form안에 위치한다 Form 항목(images, text, text fields, choice groups)들의 혼합을 포함하는 스크린 TextField Form에 놓일 수 있는 편집 가능한 text component gauge Form에서 사용하기 위하여 bar graph를 구현 ImageItem 이미지 객체가 Form 또는 Alert에 추가될 때 layout을 다룰 수 있게 한다 Screen 모든 High-Level 사용자 인터페이스 클래스의 슈퍼클래스 Item Form 또는 Alert에 추가될 수 있는 component를 위한 슈퍼클래스 Image 그래픽의 이미지 List 선택의 목록을 포함하고 있는 스크린 StringItem String를 포함할 수 있는 항목 TextBox 사용자를 입력하고, 편집할 수 있는 스크린 Canvas Low-Level의 이벤트를 취급하고, 그리기 위해 그래픽을 부르는 어플리케이션을 쓰기 위한 Base class Ticker Display에 관계없이 연속적으로 실행하는 ticker-type의 조각 글, Canvas를 제외한 모든 스크린 타입에 붙여질 수 있다
Displayable(1) Midp의 주요 추상클래스 특정 장치용 그래픽 렌더링을 은닉하고 디스플레이에 나타날 수 있는 객체
Displayable(2) Screen Method Summary Canvas High-Level API를 구현한 Displayable의 sub class로 Alert, Form, List, TextBox의 super class Screen 객체는 제목과 ticker-tape(화면을 가로질러 연속적으로 움직이는 텍스트 조각)을 포함할 수 있다 Method Summary Ticker getTicker() String getTitle() void setTicker(Ticker ticker) void setTitle(String s) Canvas Low-Level API를 구현한 Displayable의 sub class 애플리케이션에서 표현 대상과 표현 방법을 모두 제어할 수 있다
Display(1) Display Method Summary Display class는 디스플레이 매니저를 의미한다 장치로부터 속성을 얻어 오거나 객체들을 장치에 표시되도록 하는 메소드들이 정의 되어 있다 미들릿마다 Display의 인스턴스는 오직 하나만 생성되어야 한다 getDisplay() 메소드를 사용하여 이 인스턴스 레퍼런스를 획득 Method Summary Displayable getCurrent() static Display getDisplay(MIDlet m) boolean isColor() int numColors() //현재 Color의 수를 return void setCurrent(Alert alert, Displayable nextDisplayable) void setCurrent(Displayable nextDisplayable)
Display(2) current Displayable Display 클래스에는 현재의 Displayable 객체를 추출하는 getCurrent() 메소드와 현재의 Displayable을 설정하는 setCurrent() 메소드가 있다 void setCurrent(Displayable nextDisplayable) void setCurrent(Alert alert, Displayable nextDisplayable) 어플리케이션에서는 현재의 Displayable을 제어할 수 있고 Display.setCurrent() 메소드를 언제나 사용할 수 있다
ScreenTest1.java 두개의 Form, 하나의 Ticker를 생성한다 setCurrent() 메소드를 사용하여 2초마다 현재의 Displayable을 전환한다. public void run() { while(true) try{ Thread.sleep(2000); //2초각격으로 Thread를 sleep시킨다 if(display.getCurrent()==s1) //getCurrent와 setCurrent를 이용하여 display전환 display.setCurrent(s2); } else{ display.setCurrent(s1); }catch(Exception e){}
Event와 Event Handling J2ME의 UI(User Interface) Displayable, Display Event, Event Handling 사용자의 조작에 의해 Event가 발생하면 Event Handler에서 Event를 처리한다 UI의 Event High-Level Event Low-Level Event
High-Level Event와 Event Handling(1) High-Level Event 모델은 J2SE의 AWT 1.1이상에서처럼 delegation 모델에 기반을 두었다 Event가 발생하면 Event Source가 Event Listener에 전달된다 Listener의 Event를 처리하는 메소드에서 Event Handling을 한다 High-Level Event Command Event – CommandListener ItemStateChange - ItemStateListener High-Level의 Event Handling 모델
High-Level Event와 Event Handling(2) Command Event의 정보만을 은닉한 클래스 Command 객체의 3가지 정보 Label : Command의 정보를 나타내는 문자열 - String getLabel() Type : Command의 의미를 나타내는 정수 SCREEN(1), BACK(2), CANCEL(3), OK(4), HELP(5), STOP(6), EXIT(7), ITEM(8)이 정의 되어 있다 - int getCommandType() Priority : 같은 화면에서 다른 Command와 비교했을 때의 중요도 Command의 우선순위를 나타내는 숫자가 작을수록 우선순위가 높다 - int getPriority()
High-Level Event와 Event Handling(3) Command Type MIDP에서 Command를 매핑하기 위한 정보만을 제공 MIDP에서는 Command를 특정한 버튼에 매핑하여 원래의 Exit 기능을 수행하게 한다 s1 = new Form("screen with Exit"); Command exitCommand = new Command("종료",Command.EXIT, 1); s1.addCommand(exitCommand); //Form에 Command추가
High-Level Event와 Event Handling(4) Command의 Priority MIDP의 UI에는 Command와 관련된 레이아웃 매니저가 없다 먼저 Command의 Priority에 따라 그 위치를 선택하고 Priority가 높은 Command를 사용자가 직접 누를수 있는 위치에 배치한다 모든 Command가 같은 Priority를 가지고 있다면 먼저 추가된 Command가 처음 선택된다 CommandListener CommandListener는 Command의 이벤트를 처리하는 void CommandAction(Command c, Displayable d)메소드를 정의한 인터페이스이다
Low-Level Event와 Event Handling(1) key-pressed Event key-released Event paint Event Canvas는 Low-Level API를 구현한 Displayable의 sub Class이다 Low-Level Event Handling 모델은 AWT 버전 1.0과 1.02에서 사용하던 inheritance-based Event모델과 비슷하다 Event를 처리 하기 위해서는 컴포넌트 클래스를 상속하고 적절한 Event Handling 루틴을 오버라이딩해야 한다
Low-Level Event와 Event Handling(2) Low-Level Event의 Handling low-level input event를 access하기 위해서나 graphic을 화면에 그리기 위하여 Canvas class를 사용해야 할 때 사용한다 Game application에 action 과 key event를 다룰 수 있는 method를 제공하는 Canvas class를 많이 사용한다 key event는 device의 key code의 정보를 가지고 있다 Key Events KEY_NUM0 ~ KEY_NUM9(0~9), KEY_STAR(*), KEY_POUND(#) Game Actions DOWN, LEFT, RIGHT, FIRE, GAME_A, GAME_B, GAME_C