程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> J2ME學習筆記(5)—MIDlets中的圖形編程

J2ME學習筆記(5)—MIDlets中的圖形編程

編輯:JAVA編程入門知識
  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 (
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved