J2ME学习笔记(五)-----MIDlets中GUI(图形)编程 huanghui22 [原作]

 

MIDletsGUI(图形)编程<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1.  概述

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

 

2.  MIDP GUI

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

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

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

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

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

 

3.  MIDP GUI中主要的类

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

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

2)  Displayable-----是一个抽象类 ,Displayable对象处理MIDletGUI输出.它有两个派生类javax.microedition.lcdui.Canvasjavax.microedition.lcdui.Screen

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

4)        Screen-----是高级UIFormListTextBoxAlert类都是它的派生类。

 

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.代码如下:

// 导入lcduiMidlet

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;

                                     }

                     }

                }

  }

}

注:所有类及方法的说明可以查看J2ME doc.路径为x:/WTK104/docs/api

阅读更多
个人分类: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭