java学习之计算器基本实现

来源:互联网 发布:我欲封天时装进阶数据 编辑:程序博客网 时间:2024/05/22 01:55
package calculator;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class calculator extends JFrame{//文本框 private JTextField jtd=new JTextField("0");//清除按钮 private JButton reset = new JButton("CE");//退格按钮 private JButton back = new JButton("←");//计算器按钮编号 private final String[] str={ "7", "8", "9", "/", "4", "5", "6", "*", "1",           "2", "3", "-", ".", "0", "=", "+" }; //构造函数 private void init()  { //关闭方式 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //文本框显示方式jtd.setHorizontalAlignment(JTextField.RIGHT);Container c=getContentPane();JPanel jpl=new JPanel();JPanel jpl2=new JPanel();MyActionListener ma=new MyActionListener();c.add(jtd,BorderLayout.NORTH);c.add(jpl,BorderLayout.CENTER);c.add(jpl2,BorderLayout.SOUTH);jpl2.setLayout(new FlowLayout());jpl.setLayout(new GridLayout(4,4));jpl2.add(back);jpl2.add(reset);buttonSet(str,ma,jpl);back.addActionListener(ma);reset.addActionListener(ma); }//按钮添加方法public  void buttonSet(String[] b, ActionListener obj,JPanel jpl){JButton[] buttons=new JButton[b.length];for(int i=0;i<b.length;i++){buttons[i]=new JButton(b[i]);buttons[i].addActionListener(obj);jpl.add(buttons[i]);}}public calculator(){super("Calculator");        init();}class MyActionListener implements ActionListener{ private boolean isFirstDigit = true; // 计算的中间结果。 private double resultNum = 0.0; // 当前运算的运算符 private String operator = "="; // 操作是否合法 private boolean operateValidFlag = true;@Overridepublic void actionPerformed(ActionEvent e) {       String label = e.getActionCommand();       Object target = e.getSource();     //两种方式都可以       /* if (label.equals("CE"))           handleReset();       else if(label.equals("←"))       handleBackspace();       */       if (target == reset)           handleReset();       else if(target==back)       handleBackspace();       else if ("0123456789.".indexOf(label)>=0)           handleNumber(label);       else           handleOperator(label);    }private void handleReset(){// TODO Auto-generated method stub       jtd.setText("0");       isFirstDigit = true;       operator = "=";} /**     * 处理Backspace键被按下的事件     */    private void handleBackspace() {        String text = jtd.getText();        int i = text.length();        if (i > 0) {            // 退格,将文本最后一个字符去掉            text = text.substring(0, i - 1);            if (text.length() == 0) {                // 如果文本没有了内容,则初始化计算器的各种值                jtd.setText("0");                isFirstDigit = true;                operator = "=";            } else {                // 显示新的文本                jtd.setText(text);            }        }    }    private void handleNumber(String key) {        if (isFirstDigit) {            // 输入的第一个数字            jtd.setText(key);        } else if ((key.equals(".")) && (jtd.getText().indexOf(".") < 0)) {            // 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面            jtd.setText(jtd.getText() + ".");        } else if (!key.equals(".")) {            // 如果输入的不是小数点,则将数字附在结果文本框的后面            jtd.setText(jtd.getText() + key);        }        // 以后输入的肯定不是第一个数字了        isFirstDigit = false;    }    /**     * 处理运算符键被按下的事件     *     * @param key     */    private void handleOperator(String key) {        if (operator.equals("/")) {            // 除法运算            // 如果当前结果文本框中的值等于0            if (getNumberFromText() == 0.0) {                // 操作不合法                operateValidFlag = false;                jtd.setText("除数不能为零");            } else {                resultNum /= getNumberFromText();            }        } else if (operator.equals("+")) {            // 加法运算            resultNum += getNumberFromText();        } else if (operator.equals("-")) {            // 减法运算            resultNum -= getNumberFromText();        } else if (operator.equals("*")) {            // 乘法运算            resultNum *= getNumberFromText();        } else if (operator.equals("=")) {            // 赋值运算            resultNum = getNumberFromText();        }        if (operateValidFlag) {            // 双精度浮点数的运算            long t1;            double t2;            t1 = (long) resultNum;            t2 = resultNum - t1;            if (t2 == 0) {                jtd.setText(String.valueOf(t1));            } else {                jtd.setText(String.valueOf(resultNum));            }        }        // 运算符等于用户按的按钮        operator = key;        isFirstDigit = true;        operateValidFlag = true;    }     /**     * 从结果文本框中获取数字     *     * @return     */    private double getNumberFromText()     {        double result = 0;        try {            result = Double.valueOf(jtd.getText()).doubleValue();        } catch (NumberFormatException e) {        e.printStackTrace();        }        return result;    }   }public static void main(String[] args){calculator ca=new calculator();ca.setTitle("calculator");ca.setSize(400, 400);ca.setVisible(true);ca.pack();}}

_________________________________________________________________________________________________

计算器的界面搭建是自己完成的,但是内部的具体算法参考了别人的代码,自己的完成度基本就是ctrl+C和Ctrl+V,仅仅修改了适合自己的,没有独立思考。看来自己还需要继续努力。。不行啊。。。

嘎嘎嘎

致谢:

(1).点击打开链接

(2)点击打开链接

0 0
原创粉丝点击