分享
 
 
 

J2ME学习笔记(5)—MIDlets中的图形编程

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

1.概述

MIDP为运行在MIDP容器中的MIDP应用定义了一个API,此API本身是建立在CLDC API之上的。MIDP用户接口API的Java类设计不是基于Java Abstract Window Toolkit(AWT)类的,而是为移动电话这类小型移动信息设备非凡设计的。这类设备只有有限的屏幕尺寸和键盘性能。当程序员采用MIDP编写图形应用时,他们只能使用MIDP或CLDC API。

2.MIDP GUI类

1)所有MIDP GUI类都是javax.microedition.lcdui包的组成部分。

2)MIDP用户接口的基本抽象图形是屏幕,Screen类对面向设备的图形和用户交互进行了封装。每次应用只能显示一个屏幕。

3)MIDP API具有”高级(high-level)”和”低级(low-level)”UI类。

高级UI-----例如Form,List,TextBox,TextField,Alert和Ticker具有设备适配功能,它对图象,文本,文本域以及单选按钮等进行支持。

低级UI-----例如Canvas类答应操作者任意绘画。

3.MIDP GUI中主要的类

1)Graphics类-----提供了用来绘画2D几何对象的Graphics对象。

javax.microedition.lcdui.Graphics类不是在MIDlet中显式创建的,表示抽象画面的Canvas类在MIDP GUI编程中提供了paint()方法,piant()方法取类型为Graphics的一个参数,用此参数实现MIDlet中Graphics类的功能。

2)Displayable类-----是一个抽象类 ,Displayable对象处理MIDlet的GUI输出.它有两个派生类javax.microedition.lcdui.Canvas和javax.microedition.lcdui.Screen。

3)Canvas类-----Canvas类答应操作者任意绘画,与Graphics类都是低级UI.由Graphics类类提供的方法总是在Canvas类的派生类中使用的。

4)Screen类-----是高级UI,Form,List,TextBox,Alert类都是它的派生类。

4.下面是Graphics类用法的一段代码

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class MidpGraphics extends MIDlet implements CommandListener

{

Display display;

testCanvas canvas;

public MidpGraphics()

{

display=Display.getDisplay(this);

canvas=new testCanvas();

}

public void startApp() throws MIDletStateChangeException

{

display.setCurrent(canvas);

}

public void pauseApp()

{

}

public void destroyApp(boolean unconditional) throws MIDletStateChangeException

{

}

public void commandAction(Command c,Displayable d)

{

}

}

class testCanvas extends Canvas

{

public void paint(Graphics g)

{

//创建字体对象

Font font=Font.getFont

(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDIUM);

//设定字体对象

g.setFont(font);

//绘画出文本

g.drawString("Hello MIDP",getWidth()/2,getHeight()/2,Graphics.HCENTERGraphics.TOP);

try

{

//绘画出图像

Image image=Image.createImage("myimage.png");

g.drawImage(image,0,0,Graphics.HCENTERGraphics.TOP);

}

catch(Exception e)

{

}

}

}

运行效果就是在屏幕的中心显示文本”Hello MIDP”。

5.用MIDlet编程来实现SaveMyMoney银行应用的不同图形用户界面实例代码:

1) 任务陈述:第一屏幕显示包含名为Balance Enquiry(当前余额),Fixed Deposit Enquiry(定期储蓄),Check Status Enquiry(支票状况)项的菜单

当用户选择Balance Enquiry应显示进度指示器

当用户选择Fixed Deposit Enquiry应显示进度指示器

当用户选择Check Status Enquiry应显示打入支票号的TextBox

当用户打入支票号后应显示进度指示器

2.代码如下:

// 导入lcdui和Midlet包

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

// 定义扩展MidpGui类的MIDlet类

public class MidpGui extends MIDlet implements CommandListener

{

// 由Display类创建显示治理器

Display display;

// 定义窗体对象

Form form = new Form("Container Form");

// Screen类派生的

// 定义列表(主菜单)

List menu;

// 定义文本框

TextBox input;

// Item类的组件 (Gauge类表示显示屏幕上的一个条形图)

Gauge gauge = new Gauge("Your enquiry is being processed", false, 100, 30);

// 定义来自Command类的命令

static final Command okCommand = new Command("OK",Command.OK,1);

static final Command backCommand = new Command("Back",Command.BACK,0);

static final Command exitCommand = new Command("Exit", Command.STOP,2);

String currentMenu; // 定义串变量以标识当前的窗体名

public MidpGui()

{

}

/**

* The startApp() starts the MIDlet, creates a list of items and

* Uses the EXIT command */

public void startApp() throws MIDletStateChangeException

{

// 得到display对象

display = Display.getDisplay(this);

// 创建初始菜单并加入项

menu = new List("Enquiries", Choice.IMPLICIT);

menu.append("Current Balance ", null);

menu.append("Fixed Deposit ", null);

menu.append("Check Status ", null);

// 加入Exit命令到窗体

menu.addCommand(exitCommand);

menu.setCommandListener(this);

// 调用mainmenu方法,设置初始屏幕

mainMenu();

// 加入计量组件到窗体

form.append(gauge);

}

// mainMenu 方法

void mainMenu()

{

display.setCurrent(menu);

currentMenu = "Main";

}

public void pauseApp() {

form = null;

display = null;

menu = null;

input = null;

gauge = null;

}

// 当MIDlet被撤消是调用

public void destroyApp(boolean unconditional) throws MIDletStateChangeException

{

notifyDestroyed();

}

//显示TextBox组件

public void showTextBox()

{

input = new TextBox ("Enter the Check Number:", "", 20, TextField.ANY);

input.addCommand(backCommand);

input.addCommand(okCommand);

input.setCommandListener(this);

input.setString("");

display.setCurrent(input);

currentMenu = "input";

}

//显示进度指示器屏幕

public void showForm()

{

form.addCommand(backCommand);

form.setCommandListener(this);

display.setCurrent(form);

currentMenu = "form";

}

//命令激活

public void commandAction(Command c, Displayable d)

{

String label = c.getLabel();

if (label.equals("Exit"))

{

try{

destroyApp(true);}

catch (

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有