欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java版计算器,java计算器,import java.

来源: javaer 分享于  点击 4567 次 点评:187

java版计算器,java计算器,import java.


import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;import java.awt.*;import java.math.BigDecimal;import java.math.MathContext;import java.math.RoundingMode;import java.awt.Color;/** * java版计算器 */public class Calculator extends JFrame {    final int WIN_W = 250, WIN_H = 250;    JPanel myPanel, panelSuper;    public Calculator() {        // 主面板        panelSuper = new JPanel();        panelSuper.setLayout(null);        // 设置窗口位置        double width = Toolkit.getDefaultToolkit().getScreenSize().width;        double height = Toolkit.getDefaultToolkit().getScreenSize().height;        this.setBounds((int) (width - WIN_W) / 2, (int) (height - WIN_H) / 2,                WIN_W, WIN_H);        // 窗口配置        this.setTitle("java版计算器");        this.validate();        this.setResizable(false);        this.setVisible(true);        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);        // 添加计算器按钮面板        myPanel = new MyPanel();        this.add(myPanel, BorderLayout.CENTER);    }    public static void main(String[] args) {        new Calculator();    }    /**     * 计算器按钮面板类     */    class MyPanel extends JPanel implements ActionListener {        JButton button1, button2, button3, button4, button5, button6, button7,                button8, button9, button0, buttonJia, buttonJian, buttonCheng,                buttonChu, buttonDeng, buttonDian, buttonC, buttonDel,                buttonZF, buttonGH;        JTextField jTextField; // 计算器显示屏        char oper; // 操作符        String key, allKey = "1234567890.±del", jjccKey = "+-*/";        BigDecimal d1, d2;        boolean first;        public MyPanel() {            // 设置布局            this.setLayout(new FlowLayout(FlowLayout.LEFT, 4, 5));            // 计算器显示屏            jTextField = new JTextField(21);            jTextField.setHorizontalAlignment(JTextField.RIGHT);            jTextField.setEditable(false);            jTextField.setBackground(new Color(255, 255, 255));            jTextField.setText("0");            this.add(jTextField);            // 计算器按钮            button1 = new JButton("1");            button2 = new JButton("2");            button3 = new JButton("3");            button4 = new JButton("4");            button5 = new JButton("5");            button6 = new JButton("6");            button7 = new JButton("7");            button8 = new JButton("8");            button9 = new JButton("9");            button0 = new JButton("0");            buttonJia = new JButton("+");            buttonJian = new JButton("-");            buttonCheng = new JButton("*");            buttonChu = new JButton("/");            buttonDeng = new JButton("=");            buttonDian = new JButton(".");            buttonDel = new JButton("del");            buttonC = new JButton("c");            buttonZF = new JButton("±");            buttonGH = new JButton("√");            button1.setPreferredSize(new Dimension(55, 30));            button2.setPreferredSize(new Dimension(55, 30));            button3.setPreferredSize(new Dimension(55, 30));            button4.setPreferredSize(new Dimension(55, 30));            button5.setPreferredSize(new Dimension(55, 30));            button6.setPreferredSize(new Dimension(55, 30));            button7.setPreferredSize(new Dimension(55, 30));            button8.setPreferredSize(new Dimension(55, 30));            button9.setPreferredSize(new Dimension(55, 30));            button0.setPreferredSize(new Dimension(55, 30));            buttonJia.setPreferredSize(new Dimension(55, 30));            buttonJian.setPreferredSize(new Dimension(55, 30));            buttonCheng.setPreferredSize(new Dimension(55, 30));            buttonChu.setPreferredSize(new Dimension(55, 30));            buttonDeng.setPreferredSize(new Dimension(55, 30));            buttonDian.setPreferredSize(new Dimension(55, 30));            buttonDel.setPreferredSize(new Dimension(55, 30));            buttonC.setPreferredSize(new Dimension(55, 30));            buttonZF.setPreferredSize(new Dimension(55, 30));            buttonGH.setPreferredSize(new Dimension(55, 30));            this.add(buttonDel);            this.add(buttonC);            this.add(buttonZF);            this.add(buttonGH);            this.add(button1);            this.add(button2);            this.add(button3);            this.add(buttonJia);            this.add(button4);            this.add(button5);            this.add(button6);            this.add(buttonJian);            this.add(button7);            this.add(button8);            this.add(button9);            this.add(buttonCheng);            this.add(button0);            this.add(buttonDian);            this.add(buttonDeng);            this.add(buttonChu);            buttonDel.addActionListener(this);            buttonC.addActionListener(this);            buttonZF.addActionListener(this);            buttonGH.addActionListener(this);            button1.addActionListener(this);            button2.addActionListener(this);            button3.addActionListener(this);            button4.addActionListener(this);            button5.addActionListener(this);            button6.addActionListener(this);            button7.addActionListener(this);            button8.addActionListener(this);            button9.addActionListener(this);            button0.addActionListener(this);            buttonJia.addActionListener(this);            buttonJian.addActionListener(this);            buttonCheng.addActionListener(this);            buttonChu.addActionListener(this);            buttonDeng.addActionListener(this);            buttonDian.addActionListener(this);            // 计算器初始化            init();        }        /**         * 计算器初始化         */        public void init() {            d1 = new BigDecimal("0");            d1 = new BigDecimal("0");            key = "=";            oper = '=';            jTextField.setText("0");            first = true; // 用于标记是否进行连续操作(例如按键顺序为“9*9====”,第一次等于first由true变为false,如果!first,按等号相当于用上一次的结果与第二个操作数相乘)        }        /**         * 按钮监听         */        public void actionPerformed(ActionEvent e) {            JButton b = (JButton) e.getSource();            if (b == buttonDian) { // 按下.                jTextField.setText(jTextField.getText() + ".");                if (first) {                    d2 = d1 = getNum();                } else {                    d2 = getNum();                }            } else if (b == buttonZF) {// 按下±                BigDecimal d = getNum();                d = new BigDecimal("0").subtract(d);                setFormatNum(d);                if (first) {                    d2 = d1 = getNum();                } else {                    d2 = getNum();                }            } else if (b == buttonDel) {// 按下del                if (jTextField.getText().length() == 1                        || jTextField.getText().length() == 2                        && jTextField.getText().startsWith("-")) {                    jTextField.setText("0");                } else {                    String s = jTextField.getText();                    s = s.substring(0, s.length() - 1);                    if (s.endsWith("E+") || s.endsWith("E-"))                        s = s.substring(0, s.length() - 2);                    jTextField.setText(s);                    if (first) {                        d2 = d1 = getNum();                    } else {                        d2 = getNum();                    }                }            } else if (b == buttonC) {// 按下c                init();            } else if (b == buttonJia) {// 按下+                BigDecimal s;                if (!first && allKey.indexOf(key) >= 0) {                    if (oper == '-' || oper == '/') {                        s = operate(d1, oper, d2);                    } else {                        s = operate(d2, oper, d1);                    }                    setFormatNum(s);                }// 如果不是第一次,且上一次操作是对数字进行操作                else {                    first = false;                }                d2 = d1 = getNum();                // System.out.print("111我执行啦\n");                oper = '+';            } else if (b == buttonJian) {// 按下-                BigDecimal s;                if (!first && allKey.indexOf(key) >= 0) {                    s = operate(d1, oper, d2);                    setFormatNum(s);                }// 如果不是第一次,且上一次操作是对数字进行操作                else {                    first = false;                }                d2 = d1 = getNum();                oper = '-';            } else if (b == buttonCheng) {// 按下*                BigDecimal s;                if (!first && allKey.indexOf(key) >= 0) {                    if (oper == '-' || oper == '/') {                        s = operate(d1, oper, d2);                    } else {                        s = operate(d2, oper, d1);                    }                    setFormatNum(s);                }// 如果不是第一次,且上一次操作是对数字进行操作                else {                    first = false;                }                d2 = d1 = getNum();                oper = '*';            } else if (b == buttonChu) {// 按下/                BigDecimal s;                if (!first && allKey.indexOf(key) >= 0) {                    s = operate(d1, oper, d2);                    setFormatNum(s);                }// 如果不是第一次,且上一次操作是对数字进行操作                else {                    first = false;                }                d2 = d1 = getNum();                oper = '/';            } else if (b == buttonGH) {// 按下平方根                if (jTextField.getText().startsWith("-")) {                    init();                    return;                }                BigDecimal d = getNum();                MathContext mc = new MathContext(10, RoundingMode.HALF_DOWN);                d = new BigDecimal(Math.sqrt(d.doubleValue()), mc);                setFormatNum(d);                if (first) {                    d2 = d1 = getNum();                } else {                    d2 = getNum();                }            } else if (b == buttonDeng) {// 按下=                BigDecimal s = null;                d2 = getNum();                if (!key.equals("=")) {                    s = operate(d1, oper, d2);                } else {                    s = operate(d2, oper, d1);                }                if (oper != '=' && !key.equals("=")) {// 上一次操作为 +-*/                    d1 = getNum();                }                setFormatNum(s);                first = true;            } else { // 按下其他按钮                if (this.jTextField.getText().equals("0")                        || allKey.indexOf(key) == -1) {                    this.jTextField.setText(b.getText());                } else {                    this.jTextField.setText(jTextField.getText() + b.getText());                }                if (first) {                    d2 = d1 = getNum();                } else {                    d2 = getNum();                }// d2作被加数:d2+d1            }            key = b.getText();        }        /**         * 获取操作数         *          * @return 操作数         */        public BigDecimal getNum() {            BigDecimal d = new BigDecimal(jTextField.getText());            return d;        }        public void setFormatNum(BigDecimal dd) {            MathContext mc = new MathContext(18, RoundingMode.HALF_DOWN);            BigDecimal d = new BigDecimal(dd.toString(), mc);            String num = d.toString();            if (num.endsWith(".0"))                num = num.replaceAll("\\.0", "");            this.jTextField.setText(num);        }        /**         * 计算         *          * @param a1         *            操作数1         * @param c         *            操作符         * @param a2         *            操作数2         * @return         */        public BigDecimal operate(BigDecimal a1, char c, BigDecimal a2) {            MathContext mc = new MathContext(10, RoundingMode.HALF_DOWN);            switch (c) {            case '+':                return a1.add(a2);            case '-':                return a1.subtract(a2);            case '*':                return a1.multiply(a2);            case '/':                if (a2.compareTo(new BigDecimal("0")) == 0) {                    init();                    return new BigDecimal("0");                }                return a1.divide(a2, mc);            default:                return a2;            }        }    }}
相关栏目:

用户点评