程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> MIDlets實現用戶界面(GUI)編程

MIDlets實現用戶界面(GUI)編程

編輯:J2ME
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 (Exception e){}
   }
   else if (label.equals("Back"))
   {
    if(currentMenu.equals("input") || currentMenu.equals("form"))
    {
     // go back to menu
     mainMenu();
    }
   }
   else
   {
    if (label.equals("OK"))
    {
     showForm();
    }
    else
    {
     List down = (List)display.getCurrent();
     switch(down.getSelectedIndex())
     {
      case 0: showForm();break;
      case 1: showForm();break;
      case 2: showTextBox();break;
     }
    }
   }
  }
 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved