服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

j2me学习笔记(5)―midlets中的图形编程


  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 (

扫描关注微信公众号