⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calcform.java

📁 J2ME程序设计实例教程的源码
💻 JAVA
字号:
import javax.microedition.lcdui.*;

/**
 * 该类描述了计算器。
 * 实现了计算器的界面,及加、减、乘、除等计算功能。
 */
public class CalcForm extends Form implements CalcKeyboardListener { //
    private CalcScreen showArea;    //计算器的显示区
    private CalcKeyboard ckeyboard; //计算器键盘
    
    private boolean hasNewOperand = false;  //有新的操作数
    private boolean numInputing = false;
    private double acc = 0.0;  //累加器
    private String operator = "";    //运算符
    private double operand = 0.0;   //操作数
    
    public CalcForm() {
        super("计算器");
        showArea = new CalcScreen();            //创建计算器的显示区对象
        ckeyboard = new CalcKeyboard(4, 5);     //创建计算器的键盘
        ckeyboard.setCalcKeyboardListener(this);    //
        
        //布局
        showArea.setLayout(Item.LAYOUT_2|Item.LAYOUT_CENTER|Item.LAYOUT_NEWLINE_AFTER);
        append(showArea);
        append(new Spacer(this.getWidth(), 5));
        ckeyboard.setLayout(Item.LAYOUT_2|Item.LAYOUT_CENTER);
        append(ckeyboard);
        
        reset();
    }
    
    //按钮单击事件处理方法
    //如果设备支持触摸屏功能,当用户使用笔在按钮上单击后,
    //注册在键盘上的监视器将调用下面的方法,对单击事件进行处理。
    public void actionPerformmed(CalcKeyboard btn, String symbol) {
        if(symbol == CalcKeyboard.NUM_ZERO || symbol == CalcKeyboard.NUM_ONE || symbol == CalcKeyboard.NUM_TWO ||
            symbol == CalcKeyboard.NUM_THREE ||symbol == CalcKeyboard.NUM_FOUR ||symbol == CalcKeyboard.NUM_FIVE ||
            symbol == CalcKeyboard.NUM_SIX ||symbol == CalcKeyboard.NUM_SEVEN ||symbol == CalcKeyboard.NUM_EIGHT ||
            symbol == CalcKeyboard.NUM_NINE ) {
            //
            inputNum(symbol);
        }
        else if(symbol == CalcKeyboard.SYMBOL_DOT 
                && showArea.getText().indexOf(CalcKeyboard.SYMBOL_DOT) == -1) {
            //
            inputNum(symbol);
        }
        else if(symbol == CalcKeyboard.BACKSPACE) {
            String text = showArea.getText();
            if(text.length() > 0) {
                text = text.substring(0, text.length()-1);
                showArea.setText(text);
            }
        }
        else if(symbol == CalcKeyboard.CE) {
            showArea.setText("0.");
        }
        else if(symbol == CalcKeyboard.C) {
            //计算器归零
            reset();
        }
        else if(symbol == CalcKeyboard.ADD || symbol == CalcKeyboard.MINUS || 
                    symbol == CalcKeyboard.MULT || symbol == CalcKeyboard.DIVIDE ||
                    symbol == CalcKeyboard.EQUALS) {
            //
            numInputing = false;
            String s = showArea.getText();
            double d = Double.parseDouble(s);
            jisuan(d, symbol);
            showArea.setText(String.valueOf(acc));
        }
        else if(symbol == CalcKeyboard.SYMBOL_MINUS) {
            String str = showArea.getText();
            if(str.charAt(0) == '-') {
                showArea.setText(str.substring(1, str.length()));
            }
            else {
                showArea.setText("-" + str);
            }
        }
    }
    
    private void jisuan(double exp, String oper) {
        if(operator.equals("")) {
            acc = exp;
            operand = exp;
        }
        else {
            if(hasNewOperand) { //新的操作数
                operand = exp;
                if(operator.equals(CalcKeyboard.ADD)) {
                    acc += operand;
                }
                else if(operator.equals(CalcKeyboard.MINUS)) {
                    acc -= operand;
                }
                else if(operator.equals(CalcKeyboard.MULT)) {
                    acc *= operand;
                }
                else if(operator.equals(CalcKeyboard.DIVIDE)) {
                    acc /= operand;
                }
                
            }
            else {
                if(oper.equals(CalcKeyboard.EQUALS)) {
                    if(operator.equals(CalcKeyboard.ADD)) {
                        acc += operand;
                    }
                    else if(operator.equals(CalcKeyboard.MINUS)) {
                        acc -= operand;
                    }
                    else if(operator.equals(CalcKeyboard.MULT)) {
                        acc *= operand;
                    }
                    else if(operator.equals(CalcKeyboard.DIVIDE)) {
                        acc /= operand;
                    }
                    if(!oper.equals(CalcKeyboard.EQUALS)) {
                        operator = oper;
                    }
                }
            }
        }
        if(!oper.equals(CalcKeyboard.EQUALS)) {
            operator = oper;
        }
        hasNewOperand = false;
    }
    
    private void reset() {
        hasNewOperand = false;
        numInputing = false;
        acc = 0.0;
        operator = "";
        showArea.setText("0.");
    }
    
    private void inputNum(String str) {
        if(numInputing) {
            showArea.setText(showArea.getText() + str);
        }
        else {
            showArea.setText(str);
            numInputing = true;
        }
        hasNewOperand = true;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -