资源描述
目录
摘 要 II
第1章 绪论 - 1 -
第2章 J2ME计算器 - 2 -
2.1J2ME的基本概念 - 2 -
2.2J2ME平台的搭建 - 2 -
2.2.1构建J2ME平台 - 2 -
2.2.2计算器的实现 - 4 -
第3章 运行结果 - 7 -
3.1 运行和结果 - 7 -
3.1.1计算器演示 - 7 -
参考文献 - 9 -
附 录 - 10-
J2ME计算器设计
摘 要
本文简单介绍了J2ME技术,J2ME(Java 2 Micro Edition)是Java 2的一个组成部分,它与J2SE、J2EE并称。根据Sun的定义:J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话和可视电话、数字机顶盒、汽车导航系统等等。J2ME技术在1999年的JavaOne Developer Conference大会上正式推出,它将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。
本文通过介绍J2ME平台的搭建,从而能实现计算器的设计。
关键词:J2ME,搭建,实现设计
- 25 -
第1章 绪论
在今天计算已经无处不在。越来越多的人开始认为,经过了许多人共享一台计算机的大型主机时代,一人一台计算机的个人PC时代之后,下一个时代就是一人多台计算设备的普及计算时代(Ubiquitous Computing,IBM称之为Pervasive Computing)。计算设备将从单一的PC扩展到各种各样的大小和功能,从家庭消费电子产品,到个人随身携带,穿着,车载的各种移动信息处理设备,多样化是这个领域的最大特点。网络是这个领域最重要的增值特性。当手机可以随时随地无线上网,PDA可以和个人PC同步,车载PC可以获得网上GPS地图数据时,这些孤立的设备才能够发挥最大的作用。
而平台无关性和网络功能正是J2ME的设计目标和能力(事实上,Java最初的设计目标就是用于消费电子领域,但是后来在PC和服务器上得到了发展)。一次编写,到处运行的平台无关性,对网络,多重设备间联网的机制(JINI)显然对这个领域是至关重要的软件条件。这个领域内的Java标准就是J2ME。
明天的计算将进入普及计算时代。各种消费电子产品,包括智能手机,PDA,Web-TV,将来的信息家电等等将实现随时随地的计算。这是一个异常广阔和丰富多彩的领域,其设备极度多样化而且都将在网络中,Java技术的跨平台性和网络功能在这里大有用武之地。这就是J2ME,这一丰富多彩的领域中生机勃勃的技术。
第2章 J2ME计算器
2,1J2ME的基本概念
J2ME(Java 2 Micro Edition)是Java 2的一个组成部分,它与J2SE、J2EE并称。 Java2版本书籍
根据Sun的定义:J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话和可视电话、数字机顶盒、汽车导航系统等等。J2ME技术在1999年的JavaOne Developer Conference大会上正式推出,它将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。
2.2J2ME平台的搭建
2.2.1构建J2ME平台
1.从如下地址下载相关的软件。
J2SDK1.4.2_03+WTK2.1:
Eclipse3.0RC2 http://www.eclipse.org
EclipseME0.4.1
2. 按照顺序依次安装J2SDK1.4.2_03、WTK2.1、Eclipse3.0RC2和EclipseME0.4.1,安装完j2sdk后应该设置环境变量classpath、path和JAVA_HOME等环境变量。
接下来安装WTK2.1,和一般的应用程序安装一样。安装以后可以从KToolBar里面运行一下WTK2.1里面自带的一些Demo,如果正常运行表示WTK安装正确,下面我们要搭建Eclipse的开发环境了,Eclipse的安装很简单,你直接把Eclipse3.0RC2解压到c:\eclipse就可以了。直接运行Eclipse.exe这样你就可以看到Eclipse的运行界面了。如果没有用过Eclipse的话那么你可以看看帮助文档,自己做个小java项目运行一下。下面我们要安装EclipseME.0.4.1的插件了,关闭Eclipse然后解压EclipseME0.4.1到c:\eclipse\plugin里面,重新启动Eclipse,选择windows->preferences可以进行配置J2ME开发平台(图2.1)
图2.1 开发平台
选择Platform Components->Wireless Toolkits,右键选择add Wireless Toolkit会出现下面的界面。
图2.2 配置界面
2.2.2计算器的实现
1.简单计算器功能图
图2.3 功能图
2.简单计算器界面
把其放到到eclipse生产的工程目录的res目录下。
图2.4 界面
3.通过J2ME平台实现
新建一个项目来开发J2ME项目,选择file->new->others->J2ME ->J2ME MIDlet suite,然后填写项目的名字calc,选择下一步最后完成,这样就新建了一个J2ME项目了。
图2.5 新建
接下来从Package Explorer里面选择项目calc然后新建一个J2ME MIDlet名字命名为calc,然后使用Eclipse编译。启动 Eclipse,配置 EclipseME 插件。
要实现这个功能,请单击"Window"菜单,然后选择"Preferences"菜单项,然后在弹出的菜单中选择"J2ME"。然后执行以下步骤: 点击"Platform Components",见图2.6。
右键单击右边窗口"Wireless Toolkits",选择"Add Wireless Toolkit",此时会弹出窗口(见图2.7),"Wireless Toolkit Directory"设置为wtk_home对应的安装目录。
图2.6 EclipseME 插件配置界面
图2.7添加Wireless Toolkit
安装完成之后应该出现如图2.8的界面。
图2.8配置EclipseME 插件
图2.9
然后编译代码。
第3章 运行结果
3.1 运行和结果
3.1.1计算器演示
从菜单选择Run->run参照下图配置运行环境。
图 3.1 RUN
1. 加法运算
第一个操作数输入7,第二个操作数输入8,点击“=”。如图3.2所示
图3.2 加法
2.除法运算
第一个操作数输入20,第二个操作数输入2,点击“=”。如图3.3所示
图3.3 除法
3. 减法运算
第一个操作数输入100,第二个操作数输入55,点击“=”。如图3.4所示
图3.4 减法
4. 乘法运算
第一个操作数输入5,第二个操作数输入12,点击“=”。如图3.5所示
图3.5 乘法
参考文献
[1] Bruce Eckel著.侯捷译.Java编程思想[M]. 机械工业出版社出版社. 2009.35-40.
[2] Joshua Bloce著. 潘爱民译. Effective Java中文版[M].机械工业出版社. 2004.102-108.
[3] 飞思科技产品研发中心.J2EE应用开发[C].2005年6月第一版.电子工业出版社.2005.
附 录
程序1:CalcCanvas
package my.calc;
import com.nokia.mid.ui.FullCanvas;
import javax.microedition.lcdui.*;
import java.io.*;
/**
* 计算器界面
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @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);
//设置焦点的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;
}
//判断第一个数字是否输入
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;
}
}
}
}
程序2:CalcMIDlet
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;
}
}
展开阅读全文