J2ME应用实例——一个简单的计算器实现(附源代码)

J2ME应用实例——一个简单的计算器实现(附源代码)

<o:p> </o:p>

       使用低级用户界面做了一个基于Nokia S60系列的简单计算器程序,希望对大家有所帮助。本文只包含了程序代码,如果需要图片文件和源代码请给我发邮件:cqucyf@263.net

源代码如下

// CalcMIDlet.java

package my.calc;

<o:p> </o:p>

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

<o:p> </o:p>

public class CalcMIDlet extends MIDlet {

  private static CalcMIDlet instance;

  private CalcCanvas calc = new CalcCanvas();

<o:p> </o:p>

  /** Constructor */

  public CalcMIDlet() {

    instance = this;

  }

<o:p> </o:p>

  /** Main method */

  public void startApp() {

    Display.getDisplay(this).setCurrent(calc);

  }

<o:p> </o:p>

  /** Handle pausing the MIDlet */

  public void pauseApp() {

  }

<o:p> </o:p>

  /** Handle destroying the MIDlet */

  public void destroyApp(boolean unconditional) {

  }

<o:p> </o:p>

  /** Quit the MIDlet */

  public static void quitApp() {

    instance.destroyApp(true);

    instance.notifyDestroyed();

    instance = null;

  }

}

<o:p> </o:p>

// CalcCanvas.java

package my.calc;

<o:p> </o:p>

import com.nokia.mid.ui.FullCanvas;

import javax.microedition.lcdui.*;

import java.io.*;

/**

 * 计算器界面

 * <p>Title: 基于Nokia S60的计算器</p>

 * <p>Description: </p>

 * <p>Copyright: Copyright (c) 2005</p>

 * <p>Company: </p>

 * email:cqucyf@263.net

 * @version 1.0

 */

public class CalcCanvas extends FullCanvas{

  /**退出按钮*/

  private Command cmdExit;

  /**标题*/

  private String title = "Calculator";

  /**字体*/

  private Font f;

  /**显示的数字*/

  private long result = 0;

  /**焦点编号*/

  private int num = 0;

  /**焦点坐标*/

  private int focusX = 5;

  private int focusY = 52;

  /**按钮宽度间隔*/

  private int intervalWidth = 2;

  private int intervalHeight = 2;

  /**图片起点坐标*/

  private int x = 10;

  private int y = 70;

  /**按钮尺寸*/

  private int buttonWidth = 37;

  private int buttonHeight = 28;

  /**图片文件*/

  private Image image = null;

  /**存储控件代表的内容*/

  private char[] info = {'7','8','9','/',

                         '4','5','6','*',

                         '1','2','3','-',

                         '0','?','=','+'

                        };

  /**运算中的第一个数字*/

  private long firstNum = 0;

  /**运算中的第二个数字*/

  private long secondNum = 0;

  /**是否输入第一个数字,true代表已经输入,false代表未输入*/

  private boolean flag = false;

  /**存储按下的运算按钮的下标*/

  private int func = 0;

<o:p> </o:p>

  /**默认构造方法*/

  public CalcCanvas() {

    try{

      image = Image.createImage("/calc.png");

      //System.out.println(x);

    }catch(IOException e){

      //ignore

      System.out.println(e);

    }

  }

  /**

   * 绘制

   * @param g 图形对象

   */

  public void paint(Graphics g) {

    /**清除当前显示*/

    g.setColor(255,255,255);

    g.fillRect(0,0,getWidth(),getHeight());

    //恢复系统颜色

    g.setColor(0,0,0);

<o:p> </o:p>

    f = g.getFont();

    //绘制标题

    g.drawString(title,getWidth() / 2,f.getHeight() / 2,Graphics.TOP|Graphics.HCENTER);

    //绘制文本框

    g.drawRect(3,24,172,20);

    //绘制数字

    String temp = Long.toString(result);

    g.drawString(temp,getWidth() -  3,30,Graphics.TOP|Graphics.RIGHT);

    //绘制面板

    g.drawImage(image,2,50,Graphics.TOP|Graphics.LEFT);

    //绘制焦点

    drawFocus(g,num);

  }

  /**

   * 事件处理

   * @param keyCode 按钮值

   */

  public void keyPressed(int keyCode){

    //System.out.println(keyCode);

    //向左移动,如果移动到右边界,则移动到下一行

    if(keyCode == KEY_LEFT_ARROW){

      //判断是否到达最后一个

      if(num == 0){

        num = 15;

      }else{

        num--;

      }

    }

    //向右移动,如果移动到左边界,则移动到上一行末尾

    if(keyCode == KEY_RIGHT_ARROW){

      //判断是否到达第一个

      if(num == 15){

        num = 0;

      }else{

        num++;

      }

    }

    //向上移动,如果移动到上边界,则移动到下边界对应位置

    if(keyCode == KEY_UP_ARROW){

      //判断是否移动到上边界,如果是则移动到下边界的对应位置

      if(num - 4 < 0){

        num = 15 + num - 3;

      }else{

        num = num - 4;

      }

    }

    //向下移动,如果移动到下边界,则移动到上边界对应位置

    if(keyCode == KEY_DOWN_ARROW){

      //判断是否达到下边界,如果是则移动到上边界的对应位置

      if(num + 4 > 15){

        num = num + 3 - 15;

      }else{

        num = num + 4;

      }

    }

    //确定按钮

    if(keyCode == -5){

      //根据选择按钮的不同进行操作

      action();

    }

    //System.out.println("num : " + num);

    //绘图

    repaint();

  }

  /**

   * 绘制焦点矩形

   * @param g 图形对象

   * @param num 焦点编号

   */

  private void drawFocus(Graphics g,int num){

    //设置绘制颜色为红色

    g.setColor(255,0,0);

    //设置焦点的X和Y坐标

    setXandYByNum(num);

    //绘制选择框

    g.drawRect(focusX,focusY,buttonWidth,buttonHeight);

  }

  /**

   * 根据焦点编号,设置焦点的X和Y坐标

   * @param num 焦点编号

   */

  private void setXandYByNum(int num){

    focusX = 5 + (num % 4) * (buttonWidth + intervalWidth);

    focusY = 52 + (num / 4) * (buttonHeight + intervalHeight);

  }

  /**

   * 在用户按下确定按钮以后,根据选择按钮的不同进行操作

   */

  private void action(){

    //判断焦点按钮是否为数字

    if((num >=0 && num < 3) || (num > 3 && num < 7) || (num > 7 && num < 11) || (num == 12)){

      //如果是数字,则将原数字乘以10,再加上现在的数字

      result = result * 10 + (info[num] - '0');

    }

    //如果按下的是负号,则求当前数字的负数

    if(num == 13){

      result = -result;

    }

<o:p> </o:p>

    //判断第一个数字是否输入

    if(flag == true){

      secondNum = result;

      //处理功能按钮

      //按下=按钮,或者按下运算按钮时,进行运算

      if(num == 14 || (num % 4 == 3)){

        //根据运算按钮进行运算

        if(func == 3){

          //除法运算

          result = firstNum / secondNum;

        }else if(func == 7){

          //乘法运算

          result = firstNum * secondNum;

        }else if(func == 11){

          //减法运算

          result = firstNum - secondNum;

        }else if(func == 15){

          //加法运算

          result = firstNum + secondNum;

        }

        if(num == 14){

          //将运算结果赋给第一个数字

          firstNum = result;

          //将标志修改为false

          flag = false;

        }else{

          //记录运算按钮

          func = num;

          //将运算结果赋给第一个数字

          firstNum = result;

          //将显示清零

          result = 0;

        }

      }

    }else{

      //将当前值赋给第一个数字

      firstNum = result;

      //判断是否按下运算按钮,并存储按下的运算按钮

      if(num % 4 == 3){

        func = num;

        //设置第一个数字已输入,并将显示清零

        flag = true;

        result = 0;

      }

    }

  }

}

欢迎大家访问我的blog:http://blog.youkuaiyun.com/mailbomb<o:p></o:p>

j2me游戏源码 本资源属于j2me游戏源码,通过eclipse开发,源码测试可用,禁止商用,只提供学习使用,能否成功运行在于个人技术,如有侵权请联系作者删除,谢谢合作 立即下载

相关推荐

J2ME大量源代码,例子

J2ME大量源代码,例子 整套例子,由浅入深,基本全部功能都有

J2ME专区源代码

J2ME专区源代码

mobilechannel的专栏 1422

j2me源码

j2me源码j2me源码j2me源码

j2meframework源代码

j2meframework 是我一年多之前(大约2005年年底吧)顺手写的一个库,目的是简化自己开发JAVA手机应用程序。都是一些封装性的代码,没什么技术含量。我写的小游戏“扫雷(bombs,http://blog.csdn.net/liigo/archive/2005/12/15/553325.aspx)”和小工具“个人消费管理(MyCosts,http://blog.csdn.net/li

Liigo's blog 3189

【J2ME经典珍藏】48个推荐资料+40个经典源码——下载目录

小弟根据资料的热度和好评收集了88个J2ME精品资料,分享给研究J2ME开发的同学。内容包括6个J2ME专题和42个推荐资料以及40个经典源码。附件较多,无法一一分享,只能为大家整理一个下载目录了,可以保存以备后用,需要时选择性下载哈。部分资料需要下载豆,我共享了自己的帐号,有需要的资料可以用这个帐号下载。帐号共享出来了,大家不要私自改密码呀,发扬IT人的共享精神哦。

初识YUV,实战NV21格式数据转换为Bitmap

初识YUV,并使用YUV数据生成Bitmap图像一、初识YUV二、采样方式2.1、YUV 4:4:42.2、YUV 4:2:22.2、YUV 4:2:2 一、初识YUV 说到YUV我们就必须先从RGB说起了,如下图所示,请各位把每个色块当成一个像素点。通常一个像素点由RGB(Alpha我们先不考虑)三原色组成。 如下图中第一个像素点,其RGB值分别为(236,102,93),而这三个值就组成了我们看到的 红色 。 然而上图中除了RGB值外,我还标出了每个像素点的YUV的值,YUV的值是怎么来的呢?直接给公

乐翁龙 7128

J2ME游戏源代码—Eliminator Demo

Eliminator是我翻译的《J2ME游戏开发》中的实例,这里给出它的Demo版本,没有什么游戏性,但是演示了基于MIDP2.0的手机游戏开发中,游戏的基本框架。其可执行文件如下: 附件 Eliminator-没有敌人的版本(可执行文件).rarEliminator是一个垂直滚动背景的射击游戏,这里是它的Demo,包括了开机的启动界面、主界面、还有游戏运行场景,但是没有加入敌人。相关的界面如下: 如果你对这个游戏感兴趣,这里有它的工程文件,使用JBuilderX建立。工程文件如下:附件 Elimi

no pain no gain no Gavin 3044

【Benchmark 性能测试全指南:从核心原理到 CINEBENCH 实战解析】

本文深度拆解基准测试(Benchmark)的底层逻辑,详解数据集、工作负载、度量指标三大核心要素,分步演示测试流程与统计分析要点。结合 CINEBENCH R23 实战案例,揭秘 CPU 性能评估方法论,助你掌握系统性能量化与优化的核心技能。

rong_ha_ha的博客 6331

一个使用J2ME技术实现的计算器的代码

  一个使用J2ME技术实现的简单计算器作者:陈跃峰出自:http://blog.csdn.net/mailbomb          在实际学习的过程中,经常做一些小的项目,可以把学到的技术综合应用起来,获得一定的成就感,并锻炼逻辑思维能力。         本计算器代码的功能:1、 实现四则运算,其中除法实现的是整数除法2、 实现清楚输入功能实现该功能的核心思路:1、 对本程序的功能进行状态划

移动开发与培训 268

Flutter 直接调用so动态库,或调用C/C++源文件内函数

我把 .so 文件尝试放过好几个目录/lib/,最终都会报这个错误,现在才知道库文件需要放在你根本想象不到的地方!!!尝试了一些方法还是不行后我放弃了 ffi,想着用 Flutter 的 MethodChannel 桥接 android/ios 原生,再让原生去调 native 层。一顿操作把Android端的搞定了,当然中间涉及到 Kotlin和C++ 层的数据类型映射的痛苦,而且业务函数也不像一个 helloworld 那么简单,别提有多痛苦了。

开发以大橘为重 8353

用51单片机和LD3320语音模块DIY一个会说话的温度报警器(附完整代码)

本文详细介绍了如何使用51单片机和LD3320语音模块DIY一个智能温度报警器,包括硬件选型、电路设计、软件开发及核心功能实现。通过DS18B20温度传感器和语音模块的结合,实现温度超标时的语音报警功能,适合智能家居系统等应用场景。附完整代码,方便开发者快速复现。

weixin_42525632的博客 421
上一篇: J2ME学习(四)——将MIDlet和界面分离(比较基础)
下一篇: J2ME程序设计的几个原则
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值