用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

计算器

2017-12-20 作者: zyydfhlw举报

[java]代码库

    package calframe; 
       
    import java.awt.BorderLayout; 
    import java.awt.Color; 
    import java.awt.Dimension; 
    import java.awt.GridLayout; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.util.Arrays; 
       
    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 
    import javax.swing.JTextField; 
       
    public class CalFrame extends JFrame { 
        /**
         * 计算器的外观设计
         */ 
        private static final long serialVersionUID = 1L; 
        private final static int PRE_WIDTH = 500
        private final static int PRE_HEIGHT = 400
           
        private JTextField text = null
        private JButton button = null; //存储标记 
           
        private String[] nOp = {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="}; 
        private String[] mOp = {"MC","MR","MS","M+"}; 
        private String[] rOp = {"Back","CE","C"}; 
        private CalService service = new CalService(); 
           
        public CalFrame(){ 
            this.setTitle("计算器"); 
            this.setSize(PRE_WIDTH, PRE_HEIGHT); 
            this.setLocationRelativeTo(null); 
            this.setResizable(false); 
               
            //添加底层  
            JPanel panel = new JPanel(); 
            panel.setLayout(new BorderLayout(10,1)); 
            panel.add(getTextField(), BorderLayout.NORTH); 
            panel.setPreferredSize(new Dimension(PRE_WIDTH, PRE_HEIGHT)); 
               
            //WEST 
            JButton[] mButton = getMButton(); 
            JPanel panel1 = new JPanel(); 
            panel1.setLayout(new GridLayout(5,1,0,5)); 
            for(JButton b : mButton ){ 
                panel1.add(b); 
            
            panel.add(panel1,BorderLayout.WEST); 
            // 
            JButton[] rButton = getRButton(); 
            JPanel panel2 = new JPanel(); 
            panel2.setLayout(new BorderLayout(1,5)); 
            JPanel panel21 = new JPanel(); 
            panel21.setLayout(new GridLayout(1,3,3,3)); 
            for(JButton b : rButton){ 
                panel21.add(b); 
            
            panel2.add(panel21,BorderLayout.NORTH); 
               
            JButton[] nButton = getNButton(); 
            JPanel panel22 = new JPanel(); 
            panel22.setLayout(new GridLayout(4,5,3,5)); 
            for(JButton b : nButton){ 
                panel22.add(b); 
            
            panel2.add(panel22,BorderLayout.CENTER); 
            panel.add(panel2,BorderLayout.CENTER); 
               
            this.add(panel); 
            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
            this.setVisible(true); 
       
               
        
        //返回显示框 
        private JTextField getTextField(){ 
            text = new JTextField("0",10); 
            //text.setSize(480, 50); 
            return text; 
        
        //返回数字键 
        private JButton[] getNButton(){ 
            String[] redButton = {"/","*","-","+","="}; 
            JButton[] nbutton = new JButton[nOp.length]; 
            for(int i = 0; i < this.nOp.length; i++){ 
                JButton b = new JButton(this.nOp[i]); 
                b.addActionListener(getActionListener()); 
                   
                Arrays.sort(redButton); 
                if(Arrays.binarySearch(redButton, nOp[i]) >= 0){ 
                    b.setForeground(Color.red); 
                }else
                    b.setForeground(Color.blue); 
                
                nbutton[i] = b; 
            
            return nbutton; 
        
        //返回操作健 
        private JButton[] getMButton(){ 
            JButton[] mbutton = new JButton[mOp.length + 1]; 
            mbutton[0] = getButton(); 
            for(int i = 0; i < this.mOp.length; i++){ 
                JButton b = new JButton(this.mOp[i]); 
                b.addActionListener(getActionListener()); 
                b.setForeground(Color.red); 
                mbutton[i+1] = b; 
            
            return mbutton; 
        
        private JButton[] getRButton(){ 
            JButton[] rbutton = new JButton[rOp.length]; 
            for(int i = 0; i < this.rOp.length; i++){ 
                JButton b = new JButton(this.rOp[i]); 
                b.addActionListener(getActionListener()); 
                b.setForeground(Color.red); 
                rbutton[i] = b; 
            
            return rbutton; 
        
        private JButton getButton(){ 
            button = new JButton(); 
            return button; 
        
        private ActionListener getActionListener(){ 
            ActionListener actionListener = new ActionListener() { 
                   
                @Override 
                public void actionPerformed(ActionEvent e) { 
                    String cmd = e.getActionCommand(); 
                    String result = null
                    try
                        result = service.callMethod(cmd, text.getText()); 
                    } catch (Exception e2) { 
                        System.out.println(e2.getMessage()); 
                    
                    if(cmd.indexOf("MC") == 0){ 
                        button.setText(""); 
                    }else if(cmd.indexOf("M") == 0){ 
                        button.setText("M"); 
                    
                    //显示计算结果 
                    if(result != null){ 
                        text.setText(result); 
                    
                   
                
            };  
            return actionListener; 
        
        public static void main(String[] args) { 
            new CalFrame(); 
        
    
 
    package calframe; 
       
    import java.math.BigDecimal; 
       
    public class MyMath { 
        /**
         * 为一个double类型创建BigDecimal对象
         */ 
        private static BigDecimal getBigDecimal(double number){ 
            return new BigDecimal(number); 
        
        public static double add(double num1, double num2) { 
            BigDecimal first = getBigDecimal(num1); 
            BigDecimal second = getBigDecimal(num2); 
            return first.add(second).doubleValue(); 
        
        public static double subtract(double num1, double num2) { 
            BigDecimal first = getBigDecimal(num1); 
            BigDecimal second = getBigDecimal(num2); 
            return first.subtract(second).doubleValue(); 
        }    
        public static double multiply(double num1, double num2) { 
            BigDecimal first = getBigDecimal(num1); 
            BigDecimal second = getBigDecimal(num2); 
            return first.multiply(second).doubleValue(); 
        }    
        public static double divide(double num1, double num2) { 
            BigDecimal first = getBigDecimal(num1); 
            BigDecimal second = getBigDecimal(num2); 
            return first.divide(second,3,BigDecimal.ROUND_HALF_UP).doubleValue(); 
        
    
 
 
最后处理按钮的事件,我们定义了一个CalService类处理业务逻辑:
 
[java] view plain copy
 
    package calframe; 
       
    public class CalService { 
        private boolean isSecondNum = false
        private String lastOp; 
        private String firstNum = "0"
        private String secondNum = "null"
        private double store; 
        private String numString = "0123456789."
        private String opString = "+-*/"
       
        public String catNum(String cmd, String text) { 
            String result = cmd; 
            // 如果text不等于0 
            if (!"0".equals(text)) { 
                if (isSecondNum) { 
                    isSecondNum = false
                } else
                    result = text + cmd; 
                
            
            if (result.indexOf(".") == 0) { 
                result = "0" + result; 
            
            return result; 
        
       
        public String setOp(String cmd, String text) { 
            this.lastOp = cmd; 
            this.firstNum = text; 
            this.secondNum = null
       
            this.isSecondNum = true
            return null
        
       
        public String cal(String text, boolean isPercent) { 
            double secondResult = secondNum == null ? Double.valueOf(text) 
                    .doubleValue() : Double.valueOf(secondNum).doubleValue(); 
                       
            //除数为0 
            if(secondResult == 0 && this.lastOp.equals("/")){ 
                return "0"
            
               
            //有% 
            if(isPercent){ 
                secondResult = MyMath.multiply(Double.valueOf(firstNum), MyMath.divide(secondResult, 100)); 
            
            if(this.lastOp.equals("+")){ 
                firstNum = String.valueOf(MyMath.add(Double.valueOf(firstNum),secondResult)); 
            }else if (this.lastOp.equals("-")) { 
                firstNum = String.valueOf(MyMath.subtract(Double.valueOf(firstNum),secondResult)); 
            }else if (this.lastOp.equals("*")) { 
                firstNum = String.valueOf(MyMath.multiply(Double.valueOf(firstNum),secondResult)); 
            }else if (this.lastOp.equals("/")) { 
                firstNum = String.valueOf(MyMath.divide(Double.valueOf(firstNum),secondResult)); 
            
               
            secondNum = secondNum == null ? text :secondNum; 
            this.isSecondNum = true
            return firstNum; 
        
        //求开方 
        public String sqrt(String text){ 
            this.isSecondNum = true
            return String.valueOf(Math.sqrt(Double.valueOf(text))); 
        
        //求倒数 
        public String setReciprocal(String text){ 
            if (text.equals("0")){ 
                return text; 
            }else
                this.isSecondNum = true
                return String.valueOf(MyMath.divide(1, Double.valueOf(text))); 
            
        
        //存储 
        public String mCmd(String cmd,String text){ 
            if(cmd.equals("M+")){ 
                store = MyMath.add(store, Double.valueOf(text)); 
            }else if (cmd.equals("MC")) { 
                store = 0
            }else if (cmd.equals("MR")) { 
                isSecondNum = true
                return String.valueOf(store); 
            }else if (cmd.equals("MS")) { 
                store = Double.valueOf(text).doubleValue(); 
            
            return null
        
           
        public String backSpace(String text){ 
            return text.equals("0") || text.equals("") ? "0" :text.substring(0,text.length()-1); 
        
           
        public String setNegative(String text){ 
            if(text.indexOf("-") == 0){ 
                return text.substring(1,text.length()); 
            }else
                return "-" + text; 
            
        
        public String clearAll(){ 
            this.firstNum = "0"
            this.secondNum = null
            return this.firstNum; 
        
        public String clear(String text){ 
            return "0"
        
           
        public String callMethod(String cmd, String text){ 
            if(cmd.equals("C")){ 
                return clearAll(); 
            }else if(cmd.equals("CE")){ 
                return clear(text); 
            }else if (cmd.equals("Back")) { 
                return backSpace(text); 
            }else if (numString.indexOf(cmd) != -1) { 
                return catNum(cmd, text); 
            }else if (opString.indexOf(cmd) != -1) { 
                return setOp(cmd, text); 
            }else if (cmd.equals("+/-")) { 
                return setNegative(text);  //设置正负号 
            }else if(cmd.equals("1/x")){ 
                return setReciprocal(text); 
            }else if (cmd.equals("sqrt")) { 
                return sqrt(text); 
            }else if(cmd.equals("%")){ 
                return cal(text, true); 
            }else if(cmd.equals("=")){ 
                return cal(text, false); 
            }else
                return mCmd(cmd, text); 
            
        
    }


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...