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.hcenter|graphics.top);
try
{
//绘画出图像
image image=image.createimage("myimage.png");
g.drawimage(image,0,0,graphics.hcenter|graphics.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 (
闽公网安备 35060202000074号