`

手机J2ME程序开发(二)

阅读更多
上一篇文章介绍了一个简单的秒表程序,是使用J2ME提供的StringItem开发的,简单,但是不够美观,下面贴一个使用Canvas编写的秒表程序,就当做一个进阶的例子吧。

package midp.wallimn.com;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

/** *//**
 * 秒表程序的高级版本,使用Canvas,外观稍好。 <br/>
 * 
 * @version : V1.0<br/>
 * @author : (Email: wallimn@sohu.com QQ: 54871876)<br/>
 * @date : 2008-1-14 下午01:37:28<br/>
 */
public class StopWatchMIDlet extends MIDlet implements CommandListener ...{

 private MyCanvas mainForm;

 private Timer m_timer;// 定时器

 private Display display;

 private Command EXIT_CMD = new Command("退出", Command.EXIT, 1);

 private Command STOP_CMD = new Command("停止", Command.STOP, 1);

 private Command START_CMD = new Command("开始", Command.STOP, 1);

 private MyTimerTask timerTask;

 class MyTimerTask extends TimerTask ...{
  public int s = 0;// 秒

  public int m = 0;// 分

  public int h = 0;// 时

  public int ms = 0;// 1/100秒

  public MyTimerTask() ...{
  }

  public void init() ...{
   s = 0;
   m = 0;
   h = 0;
   ms = 0;
  }

  public void run() ...{
   if (ms == 9) ...{
    ms = 0;
    if (s == 59) ...{
     s = 0;
     if (m == 59) ...{
      m = 0;
      h++;
     } else ...{
      m++;
     }
    } else ...{
     s++;
    }
   } else ...{
    ms++;
   }
   mainForm.repaint();
  }

 }

 public StopWatchMIDlet() ...{
  display = Display.getDisplay(this);
  mainForm = new MyCanvas();
  mainForm.addCommand(EXIT_CMD);// 添加命令显示
  mainForm.addCommand(START_CMD);// 添加命令显示
  mainForm.setCommandListener(this);// 添加事件监听
 }

 protected void destroyApp(boolean arg0) ...{
 }

 protected void pauseApp() ...{

 }

 protected void startApp() throws MIDletStateChangeException ...{
  display.setCurrent(mainForm);
 }

 public void commandAction(Command c, Displayable s) ...{
  if (c == EXIT_CMD) ...{
   if (m_timer != null) ...{// 停止计时器,释放资源
    m_timer.cancel();
    m_timer = null;
   }
   destroyApp(false);
   notifyDestroyed();
  } else if (c == STOP_CMD) ...{
   this.m_timer.cancel();
   m_timer = null;
   mainForm.removeCommand(STOP_CMD);
   mainForm.addCommand(START_CMD);
  } else if (c == START_CMD) ...{
   // 初始化一个计时器,初始化一个任务
   m_timer = new Timer();
   timerTask = null;// 先释放旧的任务
   timerTask = new MyTimerTask();
   timerTask.init();
   m_timer.schedule(timerTask, new Date(), 100);
   mainForm.removeCommand(START_CMD);
   mainForm.addCommand(STOP_CMD);
  }
 }

 /** *//**
  * 日历显示输出 <br/>
  * 
  * @version : V1.0<br/>
  * @author : wallimn(Email: wallimn@sohu.com QQ: 54871876)<br/>
  * @date : 2008-1-22 下午04:19:51<br/>
  */
 class MyCanvas extends Canvas ...{

  int m_width, m_height;

  private Image numberImage = null;

  /** *//**
   * 数字的宽度
   */
  private final int numWidth = 11;

  /** *//**
   * 数字的高度
   */
  private final int numHeight = 15;
  /** *//**
   * 冒号的宽度
   */
  private final int colonWidth = 7;

  private int xPos, yPos;

  /** *//**
   * 数字的Y坐标
   */
  private int numStyle = 15;

  public MyCanvas() ...{
   try ...{
    numberImage = Image.createImage("/images/misc.png");
   } catch (Exception e) ...{
    return;
   }
   // 计算数字显示位置,以便使数字居中显示
   xPos = (this.getWidth() - numWidth * 9) / 2;
   yPos = (this.getHeight() - numHeight) / 2;
  }

  protected void paint(Graphics g) ...{
   g.setColor(0xFFFFFF);
   g.fillRect(0, 0, this.getWidth(), this.getHeight());

   drawMyFlag(g);
   
   int h = 0, m = 0, s = 0, ms = 0;
   if (timerTask != null) ...{
    h = timerTask.h;
    m = timerTask.m;
    s = timerTask.s;
    ms = timerTask.ms;
   }

   int x = xPos;
   drawNumber(g, x, yPos, h / 10, numStyle);
   x += numWidth;
   drawNumber(g, x, yPos, h % 10, numStyle);
   x += numWidth;
   drawNumber(g, x, yPos, 10, numStyle);

   x += colonWidth;
   drawNumber(g, x, yPos, m / 10, numStyle);
   x += numWidth;
   drawNumber(g, x, yPos, m % 10, numStyle);
   x += numWidth;
   drawNumber(g, x, yPos, 10, numStyle);

   x += colonWidth;
   drawNumber(g, x, yPos, s / 10, numStyle);
   x += numWidth;
   drawNumber(g, x, yPos, s % 10, numStyle);
   x += numWidth;
   drawNumber(g, x, yPos, 10, numStyle);

   x += colonWidth;
   drawNumber(g, x, yPos, ms, numStyle);

  }

  /** *//**
   * 输出图形格式的数字,这种方式利于数字的多样化 <br/> 编码:wallimn 时间:2008-1-22 下午04:22:55<br/>
   */
  private void drawNumber(Graphics g, int x, int y, int num, int ypos) ...{
   int wid = numWidth;
   if(num==10)wid =colonWidth;
   g.drawRegion(numberImage, num * numWidth, ypos, wid,
     numHeight, Sprite.TRANS_NONE, x, y, Graphics.HCENTER
       | Graphics.VCENTER);
  }

  private void drawMyFlag(Graphics g)...{
   g.drawRegion(numberImage, 0, 32, 118, 22,  Sprite.TRANS_NONE, 0, 0, Graphics.TOP
     | Graphics.LEFT);
  }
  protected void showNotify() ...{
  }

  protected void hideNotify() ...{
  }

  /** *//**
   * 按钮处理 功能描述: 编码时间:2008-1-22 下午04:23:14 参数及返回值:
   * 
   * @param kc
   * @see javax.microedition.lcdui.Canvas#keyPressed(int)
   */
  protected void keyPressed(int kc) ...{
   int ga = this.getGameAction(kc);
   if (ga == Canvas.FIRE || kc == Canvas.KEY_NUM5) ...{
    if (numStyle == 0) ...{
     numStyle = numHeight;
    } else if (numStyle == numHeight) ...{
     numStyle = 0;
    }
    repaint();
   }
  }

  protected void keyReleased(int arg0) ...{
   // 时间: 2008-1-22 上午10:40:00
  }
 }

}

/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:wallimn 电邮:wallimn@sohu.com 时间:2008-02-13
博客:http://blog.csdn.net/wallimn http://wallimn.iteye.com
网络硬盘:http://wallimn.ys168.com
/***********文章发表请与本人联系,作者保留所有权利*************/
分享到:
评论

相关推荐

    J2ME 手机程序开发

    **J2ME手机程序开发** Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机和平板电脑。它提供了开发和部署小型应用程序,称为MIDlets,的能力。J2ME在手机程序...

    手机J2ME程序编写教程

    **手机J2ME程序编写教程** Java Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机。本教程将带你深入理解如何利用J2ME技术来开发手机应用程序。 ### 一、J2ME概述 ...

    J2ME程序开发全方位基础讲解汇总

    **J2ME程序开发全方位基础讲解汇总** Java 2 Micro Edition (J2ME) 是Java平台的一个子集,主要用于嵌入式系统、移动设备和物联网(IoT)应用的开发,如手机、智能家电和车载信息系统等。本教程将全方位地讲解J2ME...

    J2ME开发 J2ME开发 J2ME开发

    J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如手机、智能电表、家庭自动化设备等。它提供了跨平台的开发环境,使得开发者可以编写一次代码,到处运行。J2ME由两大...

    j2me 手机程序入门,让你快速掌握j2me手机程序开发

    本教程将引导初学者深入理解J2ME手机程序开发,帮助你快速入门并掌握核心概念。 1. **J2ME概述** J2ME由Java ME配置(Configurations)和Java ME框架(Profiles)组成。配置定义了设备的基本能力,如内存大小和...

    手机j2me游戏开发

    网络的服务质量,Java已经从一种平台无关的编程语言演变成一种与厂商及平台无关的健壮的服务器端技术,促使IT业界深入发掘以Web为核心的应用程序的巨大潜力。J2ME 的出现使这一变化达到了一种新的高度。J2ME,简称...

    J2ME游戏程序开发实例详解.pdf

    J2ME的游戏程序开发则是利用J2ME平台开发可在手机等移动设备上运行的简单游戏。由于设备资源有限,J2ME游戏通常比PC游戏或游戏机游戏简单许多。下面将围绕J2ME游戏程序开发的关键知识点进行详细解释。 1. J2ME的...

    J2ME程序开发全方位基础讲解

    **J2ME程序开发全方位基础讲解** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专为资源有限的嵌入式设备和移动设备设计,如手机、智能手表和数字电视等。J2ME提供了一种标准化的方法来在不同设备上运行应用...

    j2ME游戏开发详解

    Java 2 Micro Edition(j2ME)是Oracle公司推出的用于开发和部署在小型设备、移动设备以及嵌入式系统上的应用程序的平台。它以其轻量级、跨平台的特性,成为了早期手机游戏开发的重要工具。本教程将深入探讨j2ME游戏...

    Eclipse开发J2ME手机程序

    【Eclipse开发J2ME手机程序】涉及到的关键知识点如下: 1. **J2ME (Java 2 Micro Edition)**: J2ME 是Java平台的一个子集,专为资源有限的嵌入式设备设计,如手机、PDA等。它由配置(Configuration)和简表...

    基于J2ME平台的手机应用程序研究与开发

    综上所述,基于J2ME平台的手机应用程序开发涉及了从基础的J2ME架构理解,到具体的MIDP组件使用,再到开发工具的选择和应用发布流程。开发者需要掌握这些核心概念和技术,才能有效创建出能在多种手机平台上运行的高效...

    j2me程序开发实用案例从入门到精通

    《J2ME程序开发实用案例从入门到精通》是一本专为Java初学者和开发者设计的教程,旨在帮助读者深入理解和掌握J2ME(Java 2 Micro Edition)平台的编程技术。J2ME是Java技术在移动设备和嵌入式系统上的应用版本,广泛...

    基于Eclipse环境的J2ME应用程序开发

    **基于Eclipse环境的J2ME应用程序开发** Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如手机、智能家电等。Eclipse作为流行的Java开发集成环境,提供了强大的工具支持,使得...

    我的第一个J2ME程序(计算器)

    【标题】"我的第一个J2ME程序(计算器)" 涉及到的知识点主要围绕Java Micro Edition (J2ME) 开发,特别是如何利用J2ME来创建一个基础的计算器应用。J2ME是Java平台的一个子集,专门用于嵌入式设备和移动设备,如早期...

    J2ME中文教程,J2ME手机程序开发

    **J2ME中文教程——开启手机程序开发之旅** Java 2 Micro Edition(J2ME)是Java平台的一个重要分支,专为资源有限的嵌入式设备设计,包括移动电话、智能家电、数字电视等。本教程将深入讲解J2ME在手机程序开发中的...

    j2me入门:J2ME程序开发新手入门九大要点

    ### J2ME程序开发新手入门九大要点详解 #### 一、J2ME中需要的Java基础知识 对于初学者而言,了解哪些Java基础知识是J2ME开发所必需的非常重要。这有助于学习者更高效地掌握核心技能,避免在不相关的领域浪费时间...

    j2me手机游戏开发技术详解

    ### j2me手机游戏开发技术详解 #### J2ME概述 **1.1 J2ME体系结构** **1.1.1 JAVA技术的版本** Java技术根据不同的应用场景分为三个主要版本: - **J2SE(Java 2 Platform, Standard Edition)**:标准版,面向...

Global site tag (gtag.js) - Google Analytics