zoukankan      html  css  js  c++  java
  • 【Java】使用swing实现简易计算器

    这个计算器简单实现了加减乘除功能,平方、开根等额外功能可以自己再增加,每次输出只能计算一个等式,即只能计算2个操作数。

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    
    public class Calculator {
        public static void main(String[] args) {
            CalcuFrame f = new CalcuFrame("【小氢计算器】");
        }
    }
    class CalcuFrame extends JFrame implements java.awt.event.ActionListener{
        JTextField input;
        JButton[] btn = new JButton[16];
        JButton ACBtn = new JButton("清空");
        String[] name = {"7","8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "+", "0", ".", "=", "-"};
    
        public CalcuFrame(String str) {
            JPanel pNorth = new JPanel();
            JPanel pCenter=new JPanel();
    
    
            input = new JTextField("", 20);
            ACBtn.addActionListener(this);
    
    
            //将文本框与清空按钮加入pNorth
            ACBtn.setForeground(Color.RED);
            pNorth.add(input);
            pNorth.add(ACBtn, BorderLayout.EAST);
    
            //将数字、操作符按钮加入pCenter
            for(int i = 0; i < btn.length; i++) {
                btn[i] = new JButton(name[i]);
                btn[i].setForeground(Color.BLUE);
                if(i == 3 || i == 7 || i == 11 || i == 15) btn[i].setForeground(Color.GREEN);
                //btn[i].setBorder(new SoftBevelBorder(BevelBorder.RAISED));
                pCenter.add(btn[i]);
                btn[i].addActionListener(this); //添加事件监听器
            }
            pCenter.setLayout(new GridLayout(4, 4));
    
            //将pNorth、pCenter加入CalcuFrame
            add(pNorth, BorderLayout.NORTH);
            add(pCenter, BorderLayout.CENTER);
            //设置CalcuFrame的样式
            setTitle(str);
            setBounds(150,150,300,180);
            setVisible(true);
            validate();
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        }
    
        public void actionPerformed(ActionEvent e) {
            JButton b = (JButton)e.getSource();  //得到当前的按钮对象
            String s = b.getText(); //得到按钮对象上的标识字符
    
            if(s.equals("=")){   //如果是等号按钮,解析字符串并计算然后把结果显示在文本输入框
                String res = parseString(input.getText());
                if(res != null)
                {
                    input.setText(res);
                }
                return;
            }
            if(b == ACBtn){  //如果按下了清除按钮,则文本输入框清除为空
                input.setText("");
                return;
            }
            //如果是其他按钮(数字按钮或运算符号按钮)则把数字或运算符显示在文本框中
            String sTemp = input.getText();
            sTemp = sTemp + b.getText();
            input.setText(sTemp);
        }
        public String parseString(String s){
            String op1,op2;
            double o1,o2,re = 0;
            int p=s.indexOf('+'); //查找加号位置,如果找到(if(p!=-1))则取加号前面子串为操作数1,取加号后面子串为操作数2,
                                    // 转换操作数1和操作数2为浮点类型,并进行加法运算,最后把结果返回
            if(p == -1) p= s.indexOf('-');//查找减号号位置,.....(处理类同与加号)
            if(p == -1) p= s.indexOf('*');//查找乘号号位置,.....(处理类同与加号)
            if(p == -1) p= s.indexOf('/');//查找除号号位置,.....(处理类同与加号)
            if(p == -1) return "输入有误!";
    
            op1 = s.substring(0, p);
            op2 = s.substring(p+1);
            o1 = Double.parseDouble(op1);
            o2 = Double.parseDouble(op2);
    
            char c = s.charAt(p);
            if(c == '+') re = o1 + o2;
            else if(c == '-') re = o1 - o2;
            else if(c == '*') re = o1 * o2;
            else if(c == '/') {
                if(o2 == 0) return "输入有误!";
                else re = o1 / o2;
            }
            return String.valueOf(re);
        }
    }
    
  • 相关阅读:
    2440中断
    2440内存管理
    printf不定参数
    时钟体系
    Uart串口
    链接脚本与重定位
    指令速记
    OpenOCD-JTAG调试
    ATPCS规则
    ARM三级流水线
  • 原文地址:https://www.cnblogs.com/66ccffly/p/13922608.html
Copyright © 2011-2022 走看看