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 (