当前位置:文档之家› J2ME计算器源码

J2ME计算器源码

J2ME计算器源码import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Midlet extends MIDlet {
private Display display;
private CalcCanvas mycanvas;
public Midlet(){
display=Display.getDisplay(this);
mycanvas=new CalcCanvas();
}
public void startApp() {
display.setCurrent(mycanvas);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) { }
}
import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class CalcCanvas extends Canvas{
int status;
private Image image = null;
/**输入第一个数字状态*/
final int INPUT_FIRST = 1;
/**输入第二个数字状态*/
final int INPUT_SECOND = 3;
/**输入运算符号状态*/
final int INPUT_FLAG = 2;
界面图片/**绘制内容右下角的x坐标*/
int x = 50;
/**绘制内容右下角的x坐标*/
int y = 60;
/**行高*/
int lineHeight = 10;
/**第一个数字的值*/
int firstNum = 0;
/**第二个数字的值*/
int secondNum = 0;
/**运算符号,0无意义,1代表+,2代表减、3乘4除*/ int flag = 0;
/**屏幕宽度*/
int w;
/**屏幕高度*/
int h;
/**运算符数组*/
String[] sFlag = {"+","-","*","/"};
public CalcCanvas(){
try{
image = Image.createImage("/calc.png");
}catch(IOException e){
System.out.println(e);
}
//初始化状态为输入第一个数字状态
status = INPUT_FIRST;
//设置全屏幕
setFullScreenMode(true);
//获得屏幕高度和宽度
h = getHeight();
w = getWidth();
}
protected void paint(Graphics g) {
//清屏
g.setColor(0xffffff);
g.fillRect(0, 0, 255, 208);
g.setColor(255);
g.drawRect(5, 42, 170, 16); // 结果显示条
g.drawImage(image,2,60,Graphics.TOP|Graphics.LEFT);
//绘制按钮文字
g.drawString("=", w,h,
Graphics.RIGHT | Graphics.BOTTOM);
g.drawString("C", 0,h,
Graphics.LEFT | Graphics.BOTTOM);
//根据状态值确定绘制的内容和位置
switch(status){
case INPUT_FIRST:
//绘制第一个数字
g.drawString("" + firstNum, x, y,
Graphics.RIGHT | Graphics.BOTTOM);
break;
case INPUT_FLAG:
//绘制第一个数字
g.drawString("" + firstNum, x- lineHeight, y ,
Graphics.RIGHT | Graphics.BOTTOM);
//绘制运算符号
g.drawString(sFlag[flag - 1], x, y,
Graphics.RIGHT | Graphics.BOTTOM);
break;
case INPUT_SECOND:
//绘制第一个数字
g.drawString("" + firstNum, x- 2 * lineHeight, y ,
Graphics.RIGHT | Graphics.BOTTOM);
//绘制运算符号
g.drawString(sFlag[flag - 1], x- lineHeight, y ,
Graphics.RIGHT | Graphics.BOTTOM);
//绘制第二个数字
g.drawString("" + secondNum, x, y,
Graphics.RIGHT | Graphics.BOTTOM);
break;
}
}
public void keyPressed(int keyCode){
//按钮C的处理
if(keyCode == -6){ //左软键
//根据状态值确定清除的内容
switch(status){
case INPUT_FIRST:
firstNum /=10;
break;
case INPUT_FLAG:
//切换到输入第一个数字状态
status = INPUT_FIRST;
//清除运算符号
flag = 0;
break;
case INPUT_SECOND:
//清除第二个数字
secondNum /= 10;
//如果第二个数字为0,则切换到输入运算符状态
if(secondNum == 0){
status = INPUT_FLAG;
}
break;
}
}
if(keyCode == -7){ //按钮=的处理
//如果处于输入第二个数字状态,且第二个数字不是0
if((status == INPUT_SECOND) && (secondNum != 0)){
//计算结果,并把结果赋值给第一个数字
switch(flag){
case 1:
firstNum += secondNum;
break;
case 2:
firstNum -= secondNum;
break;
case 3:
firstNum *= secondNum;
break;
case 4:
firstNum /= secondNum;
break;
}
//恢复状态到输入第一个数字状态
status = INPUT_FIRST;
//清除运算符和第二个数字
flag = 0;
secondNum = 0;
}
}
//输入的是数字键
if((keyCode >= KEY_NUM0) && (keyCode <= KEY_NUM9)){
//如果是输入第一个数字状态
switch(status){
case INPUT_FIRST:
firstNum = firstNum * 10 + (keyCode - KEY_NUM0);
break;
case INPUT_SECOND:
secondNum = secondNum * 10 + (keyCode - KEY_NUM0);
break;
case INPUT_FLAG:
//切换到输入第二个数字状态
status = INPUT_SECOND;
//记忆输入的数字
secondNum = secondNum * 10 + (keyCode - KEY_NUM0);
break;
}
}
//按星号实现输入运算符号
if(keyCode == KEY_STAR){
//如果当前是输入第一个数字状态或输入运算符状态
if((status == INPUT_FIRST) || (status == INPUT_FLAG)){
//输入运算符
if(flag < 4){
flag++;
}else{
flag = 1;
}
//设置状态为输入运算符状态
status = INPUT_FLAG;
}
}
//重绘
repaint();
}
}。

相关主题