1. 问答
  2. 问答详情

java计算器程序

import java.awt.*;
import java.awt.event.*;//包名

public class MyCalculator {//private为私有变量或私有方法
    private Frame f;//窗体对象
    private TextField tf = new TextField(30); //文本框,大小30
    private long result;//
    private boolean append = false;
    private char operator = '=';
    private Button[] btn = new Button[15];//1 5 个按钮

    public MyCalculator() {
        initComponent();
    }

    private void initComponent() {
        f = new Frame("My Calculator V1.0");//窗体名
        f.setLayout(new BorderLayout());//布局,可以省略。因为窗体的默认布局就是BorderLayout
        f.addWindowListener(new WindowAdapter() {//窗体适配器实现关闭功能
            public void windowClosing(WindowEvent evt) {
                System.exit(0);
            }
        });

        Panel centerPanel = new Panel();
        centerPanel.setLayout(new GridLayout(5, 3));//设置布局5*3的表格式
        NumberListener nl = new NumberListener();
        OperatorListener ol = new OperatorListener();//两个监视器对象
        btn[10] = new Button("+");
        btn[11] = new Button("-");
        btn[12] = new Button("*");
        btn[13] = new Button("/");
        btn[14] = new Button("=");
        for (int i = 0; i <= 9; i++) {
            btn[i] = new Button(String.valueOf(i));
            centerPanel.add(btn[i]);//以上均为给按钮分配内存
            btn[i].addActionListener(nl);// 添加监视器
            if (i % 2 == 1) {
                centerPanel.add(btn[(i + 19) / 2]);//给10以上的按钮分配内存
                btn[(i + 19) / 2].addActionListener(ol);//添加监视器
            }
        }
        f.add(centerPanel, BorderLayout.CENTER);
        Panel northPanel = new Panel();
        tf.setEditable(false);
        northPanel.add(tf);
        f.add(northPanel, BorderLayout.NORTH);
    }

    public void go() {//go方法
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        new MyCalculator().go();
    }

    class NumberListener implements ActionListener {//内部类实现NumberListener提供的接口
        public void actionPerformed(ActionEvent e) {
            if (!append) {
                tf.setText("");
                append = true;
            }
            String s = tf.getText();
            s += e.getActionCommand();
            tf.setText(s);
            if (!btn[10].isEnabled()) {
                for (int i = 10; i <= 14; i++)
                    btn[i].setEnabled(true);
            }
        }
    }

    class OperatorListener implements ActionListener {//实现接口
        public void actionPerformed(ActionEvent e) {
            if (!append)
                return;
            for (int i = 10; i <= 14; i++)
                btn[i].setEnabled(false);
            String s = tf.getText();
            long num = Long.parseLong(s);
            append = false;
            switch (operator) {//实现算法
                case '+':
                    result += num;
                    break;
                case '-':
                    result -= num;
                    break;
                case '*':
                    result *= num;
                    break;
                case '/': {
                    if (num == 0)
                        result = 0;
                    else
                        result /= num;
                    break;
                }
                case '=':
                    result = num;
                    break;
            }
            tf.setText(String.valueOf(result));// 显示技计算结果
            String op = e.getActionCommand();
            operator = op.charAt(0);
        }
    }
}


撰写答案

验证码
点击刷新