Windows Platform | ||||
(j2me_wireless_toolkit-1_0_4_02-windows.exe, 8.66 MB)
![]() |
< MIDP 1.0 APIs - MID Profile >
속성설명을 위한 웹페이지로 설치된 프로그램의 아래의 경로에 있다.
C:\WTK104\docs\api\index.html
■ MIDlet 개발단계
MIDlet : J2ME 플랫폼
Step 1: 코딩
Step 2: 컴파일 및 사전 검증
Step 3: Manifest 파일 작성
Step 4: 패키징 및 jad 생성
Step 5: 테스트
1) HelloWorld.java 파일 생성
C:\WTK104\apps\jungeun\src 이곳에 위치시킴
----------------------------------------------------------------
< HelloWorld.java >
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloWorld extends MIDlet
{
private Display display;
private TextBox mainScreen=null;
public HelloWorld()
{
display=Display.getDisplay(this);
mainScreen=new TextBox("TEXT BOX","Hello World",512,0);
}
public void startApp()
{
display.setCurrent(mainScreen);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
}
----------------------------------------------------------------
2) KToolBar
MIDlet의 컴파일, 사전검증, 패키징, 실행등의 번거로운 작업을 관리
J2ME Wireless Toolkit 에 포함
▶ New Project -> Project Name: jungeun -> MIDlet Class Name: HelloWorld (클래스이름)
< 프로젝트 생성결과 >
----------------------------------------------------------------
Creating project "jungeun"
Place Java source files in "c:\WTK104\apps\jungeun\src"
Place Application resource files in "c:\WTK104\apps\jungeun\res"
Place Application library files in "c:\WTK104\apps\jungeun\lib"
----------------------------------------------------------------
▶ MIDlet 수트의 필수 어트리뷰트 설정
Manifest, JAD 파일에 사용
▶ 선택적 어트리뷰트 설정
▶ 수트에 포함될 MIDlet 설정
▶ c:\WTK104\apps\jungeun\src 이 경로에 HelloWorld.java 파일을 위치시킴
▶ ‘build’ 버튼으로 컴파일, 사전검사, 패키징
3) Manifest 파일 작성
Manifest 파일 위치:
C:\WTK104\apps\demos\bin\MANIFEST.MF
패키징시 필요한 정보를 저장
MIDlet-1: HelloWorld, /Icon.png, HelloWorld
MIDlet-Name: KJava
MIDlet-Vendor: Kim Insu
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
4) 패키징 및 jad 생성
▶ Project - Package - Create Package 실행으로 생성시킴
< 패키징 생성결과 >
---------------------------------------------------
Project settings saved
Building "jungeun"
Wrote c:\WTK104\apps\jungeun\bin\jungeun.jar
Wrote c:\WTK104\apps\jungeun\bin\jungeun.jad
Build complete
---------------------------------------------------
5) 테스트
[Run] 버튼으로 MIDlet의 실행
[Run] 버튼 클릭해서 휴대폰 모양나오고 클래스 이름이 뜨면 OK
===================================================================================
■ Manifest, Descriptor의 속성알기
- 런타임시 MIDlet은 어플리케이션 패키지의 Manifest, Description의 속성을 사용가능
- Javax.microedition.midlet.MIDlet
- getAppProperty(String filename)
- Manifest와 Descriptor의 속성 중복시 Descriptor의 속성 적용
[예제]
ParamDemo.java
import java.io.*;
import javax.microedition.midlet.*;
public class ParamDemo extends MIDlet{ // 클래스 생성
public ParamDemo(){
}
public void startApp() throws MIDletStateChangeException{
// startApp() 안에 내가 할일을 생성 함
System.out.println("Retriving the properties :");
System.out.println("--------------------------");
String vendor=getAppProperty("MIDlet-Vendor");
// getAppProperty()는 뒤에 나온 이름의 MIDlet-Vendor의 property를 찾음
String desc=getAppProperty("MIDlet-Description");
String devices=getAppProperty("Target-Device");
String size=getAppProperty("Display-Size");
// desc, devices,size String 형 객체에 저장
System.out.println("MIDlet-Vendor: "+vendor);
System.out.println("MIDlet-Description: "+desc);
System.out.println("MIDlet-Devices: "+devices);
System.out.println("MIDlet-Size: "+size); // 4개의 String 형 객체를 호출함
System.out.println();
}
public void pauseApp(){
}
public void destroyApp(boolean unconditional){
}
}
Descriptor
Display-Size: 640x480
MIDlet-1: ParamDemo, , ParamDemo
MIDlet-Data-Size: 0
MIDlet-Description: Demo
MIDlet-Jar-Size: 3216
MIDlet-Jar-URL: Demo.jar
MIDlet-Name: Demo
MIDlet-Vendor: Sun Microsystems
MIDlet-Version: 1.0
Target-Device: Sun Java Phone
■ 실행모습
■ Form
- 이미지나 문자열등의 Item을 포함하는 Screen
자바의 container => Form
자바의component => Item
- Form(String title)
- Form(String title, Item[] items)
- size() : Form 내의 인덱스 갯수
- 주요 method
Int append(Image img)
Int append(item item)
Int append(String str)
Void delete(int itemNum)
Void insert(int itemNum, Item item)
void set(int itemNum, Item item)
- Get(int itemNum) : item 추출
- 하나의 item은 하나의 form에만 추가
■ Item
각각의 Item에는 레이블 포함
Choice Group, Gauge, DataField, TextField : focusable
String Item, ImageItem : unfocusable
■ StringItem
수정불가능한 문자열
StringItem(String label, String Text)
setText(),getText()로 값 처리
■ StringItem 을 이용한 실습
From의 역할 : Item 들을 모아서 한꺼번에 display 해줌
----------------------------------------------------------------
< StringTest.java >
import javax.microedition.midlet.*; -> 미들렛 패키지를 임폴트함
import javax.microedition.lcdui.*; -> High레벌 UI와 LOW레벌 UI를 포함하는 lcdui 를 임폴트함
public class StringTest extends MIDlet{
private Form form; -> Form은 클래스이름, form은 객체이름
private Display display;
public StringTest(){
form=new Form("StringTest");
display=Display.getDisplay(this);
form.append(new StringItem("StringItem","Test String.."));
}
public void startApp() throws MIDletStateChangeException{
display.setCurrent(form); -> Displayable 객체를 이용하여 만들어놓은 폼을 보여준다
}
public void pauseApp(){
}
public void destroyApp(boolean unconditional){
}
}
-------------------------------------------------------------------
-------------------------------------------------------------------
< StringTest01 >
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class StringTest01 extends MIDlet{
private Form form;
private Display display;
public StringTest01(){
form=new Form("StringTest");
display=Display.getDisplay(this);
form.append(new StringItem("StringItem","Test String.."));
form.append(new StringItem(" ","ABC")); -> " " 사이에 반드시 공백넣는다
form.append(new StringItem(" "," ")); -> " ", " " 한줄을 띄어주는 역할을 함
form.append(new StringItem(" ","GHI"));
form.append(new StringItem(" ","JKL"));
form.append(new StringItem(" ","MNO"));
}
public void startApp() throws MIDletStateChangeException{
display.setCurrent(form);
}
public void pauseApp(){
}
public void destroyApp(boolean unconditional){
}
}
< 결과 >
StringItem Test String..
ABC
GHI
JKL
MNO
-------------------------------------------------------------
■ Gauge
- 0부터 최대값까지의 막대그래프
- Gauge(String label, boolean interactive, int maxVolum, int initialValue)
- 주요 method
Int getMaxValue()
Int getValue()
Boolean isInteractive()
Void setMaxValue(int maxValue)
Void setValue(int value)
■ Gauge 를 이용한 실습
--------------------------------------------------------
< GaugeTest.java >
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class GaugeTest extends MIDlet implements CommandListener{
private Form form;
private List startmenu;
private String choices[]={"Interactive","Non-interactive"}; -> 메뉴선택
private Display display;
public GaugeTest(){
startmenu=new List("Choose a Gauge Type",List.IMPLICIT,choices,null);
startmenu.setCommandListener(this);
form=new Form("GaugeTest");
form.setCommandListener(this);
display=Display.getDisplay(this);
}
public void startApp() throws MIDletStateChangeException{
display.setCurrent(startmenu);
}
public void pauseApp(){
}
public void destroyApp(boolean unconditional){
}
public void commandAction(Command c, Displayable d){
if(d==startmenu&&c==List.SELECT_COMMAND){
if(form.size()>0) form.delete(0);
if(startmenu.getSelectedIndex()==0)
form.append(new Gauge("Interactive",true,10,4)); -> true이면 Interactive 선택
else
form.append(new Gauge("Non-interactive",false,10,4)); -> false이면 Non-interactive 선택
}
display.setCurrent(form);
}
}
-------------------------------------------------------------------
-------------------------------------------------------------------
< GaugeTest01.java >
List 를 없애고, setValue(int value), getValue() 사용하기
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
//public class GaugeTest01 extends MIDlet implements CommandListener{
public class GaugeTest01 extends MIDlet {
private Form form;
//private List startmenu;
//private String choices[]={"Interactive","Non-interactive"};
private Display display;
Gauge gauge;
public GaugeTest01(){
//startmenu=new List("Choose a Gauge Type",List.IMPLICIT,choices,null);
//startmenu.setCommandListener(this);
form=new Form("GaugeTest01");
//form.setCommandListener(this);
gauge = new Gauge("Non-interactive",false,10,4);
gauge.setValue(7);
System.out.println(gauge.getValue());
form.append(gauge);
display=Display.getDisplay(this);
}
public void startApp() throws MIDletStateChangeException{
//display.setCurrent(startmenu);
display.setCurrent(form);
}
public void pauseApp(){
}
public void destroyApp(boolean unconditional){
}
/*
public void commandAction(Command c, Displayable d){
if(d==startmenu&&c==List.SELECT_COMMAND){
if(form.size()>0) form.delete(0);
if(startmenu.getSelectedIndex()==0)
form.append(new Gauge("Interactive",true,10,4));
else
form.append(new Gauge("Non-interactive",false,10,4));
}
display.setCurrent(form);
}
*/
}
----------------------------------------------------------------
■ DateField
- 날짜와 시간정보를 표시
- 수정가능한 Item
- DateField(String label, int mode)
- DateField(String label, int mode, TimeZone timeZone)
- 입력모드
DATE : 날짜만 설정가능
TIME : 시간만 설정가능
DATE_TIME : 시간,날짜 설정가능
■ DateField 를 이용한 실습
----------------------------------------------------------------
< DateTest.java >
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.Date;
public class DateTest extends MIDlet {
private Form form;
private long date,time;
private long dayInMills=24*60*60*1000; -> 시, 분, 초, 밀리초
private Display display;
public DateTest(){
form=new Form("Date Test");
DateField df=new DateField("",DateField.DATE_TIME); -> " " 는 내용이 없는 lable String ,DateField.DATE_TIME 는 외부클래스
time=System.currentTimeMillis()%dayInMills; -> 시, 분, 초
date=System.currentTimeMillis()-time; -> 년, 월, 일
df.setDate(new Date(date+time)); -> DataField 에 data와 time를 셋팅해줌
form.append(df);
display=Display.getDisplay(this);
}
public void startApp() throws MIDletStateChangeException{
display.setCurrent(form);
}
public void pauseApp(){
}
public void destroyApp(boolean unconditional){
}
}
-------------------------------------------------------
■ Display와 Displayable
- Display
어떠한 Displayable을 보일지 결정
setCurrent() 로 Displayable 결정
getDisplay()로 초기화됨
- Displayable
화면에 표시될 수 있는 객체
■ TextBox
- TextField와 동일한 형태
- Item이 아니라 Screen 객체
- TextBox(String title, String text, int maxSize, int constraints)
- Constraints
ANY (어느 것이든지) : 0
EMAILADDR (이메일주소) : 1
NUMERIC : 2
PASSWORD (별로표시) : 3
PHONENUMBER : 4
URL : 5
■ TextBox 를 이용한 실습
-------------------------------------------------------------
< TextBoxTest.java >
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class TextBoxTest extends MIDlet
{
private Display display;
private TextBox mainScreen=null;
public TextBoxTest()
{
display=Display.getDisplay(this);
//TextBox(String title, String text, int maxSize, int constraints);
//mainScreen=new TextBox("TEXT BOX","Hello World",512,TextField.PASSWORD);
mainScreen=new TextBox("TEXT BOX","Hello World",512,0);
}
public void startApp()
{
display.setCurrent(mainScreen);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
}
------------------------------------------------------------
■ Resource 사용하여 파일소스 읽어들이기
Resource : MIDlet에서 사용하는 외부 파일
Text, Image, MultiMedia 등 다양
Java.lang.Class
getResourceAsStream(String filename)
< readme.txt >
위치: C:\WTK104\apps\jungeun\res
< ResourceDemo.java >
위치: C:\WTK104\apps\jungeun\src
import java.io.*;
import javax.microedition.midlet.*;
public class ResourceDemo extends MIDlet{
public ResourceDemo(){
}
public void startApp() throws MIDletStateChangeException{
System.out.println("Retriving the resourcr file-readme.txt");
System.out.println("--------------------------------------");
InputStream is=this.getClass().getResourceAsStream("readme.txt");
try{
if(is!=null){
int ch;
while((ch=is.read())!=-1) System.out.print((char)ch);
}
is.close();
}catch(IOException e){}
}
public void pauseApp(){
}
public void destroyApp(boolean unconditional){
}
}
< 결과 >
Toolkit 창에 readme.txt 파일 내용이 출력됨
-----------------------------------------------------------------------
< ResourceDemo02.java >
위치: C:\WTK104\apps\jungeun\src
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ResourceDemo02 extends MIDlet{
private Display display;
private TextBox mainScreen=null;
private int position=0;
public ResourceDemo02(){
display=Display.getDisplay(this);
mainScreen=new TextBox("TEXT BOX"," ",512,TextField.ANY);
}
public void startApp() throws MIDletStateChangeException{
//System.out.println("Retrinving the resource file-readme.txt");
//System.out.println("-------------------------------------");
InputStream is =this.getClass().getResourceAsStream("readme.txt");
try{
if(is != null){
int ch;
while((ch=is.read()) != -1) //System.out.print((char)ch);
mainScreen.insert((char)ch+"",position++);//<---읽어 들인readme파일을 lcd창에 추가
}
is.close();
}
catch(IOException e){}
display.setCurrent(mainScreen);
}
public void pauseApp(){
}
public void destroyApp(boolean uncondition){
}
}
< 결과 >
핸드폰 LCD 창에 readme.txt 파일 내용이 출력됨
--------------------------------------------------------------
[ Tip ]
1) 첫글자가 대문자: 클래스이름
첫글자가 소문자: 객체이름, 변수이름
합성어: String + Test = StringTest
상수: 대문자 표시
2) int : 데이터 타입
Integer : 클래스이고 메소드를 여러가지 가진다.
3) 글자를 String으로 바꾸려면 "글자" 처럼 쌍따옴표를 붙여준다.
- 모바일 교육원 -
'강남 IT교육센터(아이티윌) http://itmoya.net/prom/mobile_main.htm
- 신지소프트(GNEX) 플랫폼 지정 교육원