45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:J2ME应用实例有哪些?

J2ME应用实例有哪些?

2016-08-24 11:29:19 来源:www.45fan.com 【

J2ME应用实例有哪些?

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

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

源代码如下

// CalcMIDlet.java

package my.calc;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class CalcMIDlet extends MIDlet {

private static CalcMIDlet instance;

private CalcCanvas calc = new CalcCanvas();

/** Constructor */

public CalcMIDlet() {

instance = this;

}

/** Main method */

public void startApp() {

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

}

/** Handle pausing the MIDlet */

public void pauseApp() {

}

/** Handle destroying the MIDlet */

public void destroyApp(boolean unconditional) {

}

/** Quit the MIDlet */

public static void quitApp() {

instance.destroyApp(true);

instance.notifyDestroyed();

instance = null;

}

}

// CalcCanvas.java

package my.calc;

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;

/**默认构造方法*/

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);

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);

//设置焦点的XY坐标

setXandYByNum(num);

//绘制选择框

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

}

/**

* 根据焦点编号,设置焦点的XY坐标

* @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;

}

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

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;

}

}

}

}


本文地址:http://www.45fan.com/bcdm/66910.html
Tags: 一个 实例 J2ME
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部