Java实现简单计算器

package SHILI;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

import Mycalulator.Mycalulator;

@SuppressWarnings("unused")
public class Mycalulator extends JFrame implements ActionListener{

    /**
     * 
     */

    private static final long serialVersiouUID = 1L;
    private static boolean Firstdigit1 = false;
    private JTextField textField;
    private final String[]KEYS = {"7","8","9","+","4","5","6","-","1","2","3","*","0",".","=","/"};
    private final String[]Command = {"delete一位","归0"};
    private JButton[] keys = new JButton[KEYS.length];
    private JButton[] coms = new JButton[Command.length];
    private JTextField text = new JTextField("0");
    private boolean Firstdigit = true;
    private double result = 0.0;
    private String operator = "=";
    private boolean operateValidFlag = true;//判断操作是否合法
    
    public Mycalulator() {
        init();
        this.setTitle("计算器");
        //this.setLocationRelativeTo(null);//确定窗口位置
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //this.pack();//这个方法就是依据你放置的组件设定窗口的大小 使之正好能容纳你放置的所有组件
        setBounds(100,100,500,500);//确定窗口的位置和大小
    }
    
    private void init() {
        text.setHorizontalAlignment(JTextField.RIGHT);//设置文本框中的内容右对齐
        text.setEditable(false);
        text.setBackground(Color.WHITE);
        text.setPreferredSize(new Dimension(12,50));
        text.setColumns(10);
        JPanel keyspanel = new JPanel();
        JPanel comspanel = new JPanel();
        keyspanel.setLayout(new GridLayout(4,4,3,3));
        comspanel.setLayout(new GridLayout(1,2,3,3));
        for(int i = 0;i             keys[i] = new JButton(KEYS[i]);
            keyspanel.add(keys[i]);
        }
        for(int i = 0;i             coms[i] = new JButton(Command[i]);
            comspanel.add(coms[i]);
        }
        JPanel panel1 = new JPanel();
        panel1.setLayout(new BorderLayout(3,3));
        panel1.add("North",comspanel);
        panel1.add("Center",keyspanel);
        
        getContentPane().setLayout(new BorderLayout(3,5));
        getContentPane().add("North",text);
        
        getContentPane().add("Center", panel1);
        for(int i = 0;i             keys[i].addActionListener(this);
        }
        for(int i = 0;i             coms[i].addActionListener(this);
        }
    }
    

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        String label = e.getActionCommand();
        if(label == Command[0]) {
            handledelete();
        }
        else if(label == Command[1]) {
            handleC();
        }
        else if("0123456789.".indexOf(label) >= 0) {
            //"0123456789.".indexOf(label)的意思就是通过调用"0123456789."这个String对象的indexOf方法找到匹配label这个字符的索引位置
            //如果找不到匹配字符时返回-1
            handlenumber(label);
        }
        else {
            handleOperator(label);
        }
    }
    
    private void handleOperator(String label) {
        if(operator.equals("/")) {
            if(text.getText() == "0") {
                text.setText("除数不能为零");
                operateValidFlag = false;
            }
            else {
                result /= Double.valueOf(text.getText());
            }
        }
        else if(operator.equals("*")) {
            result *= Double.valueOf(text.getText());
        }
        else if(operator.equals("+")) {
            result += Double.valueOf(text.getText());
        }
        else if(operator.equals("-")) {
            result -= Double.valueOf(text.getText());
        }
        else if(operator.equals("=")) {
            result = Double.valueOf(text.getText());//取得这个文本框里面填的数字值。
        }
        if(operateValidFlag) {
            text.setText(String.valueOf(result));
        }
        operator = label;
        Firstdigit1 = true;
        operateValidFlag = true;
    }
    
    private void handlenumber(String label) {
        if(Firstdigit1) {
            if(label.equals(".")) {
                text.setText(text.getText()+".");
            }
            else {
                text.setText(label);
            }
        }
        else if(label.equals(".")&&text.getText().indexOf(".")<0) {
            text.setText(text.getText()+".");
        }
        else if(!label.equals(".")) {
            text.setText(text.getText()+label);
        }
        Firstdigit1 = false;
    }
    
    private void handleC() {
        text.setText("0");
        Firstdigit1 = true;
        operator = "=";
    }
    
    private void handledelete() {
        if(text.getText().length()>1) {
            text.setText(text.getText().substring(0, text.getText().length()-1));
        }
        else if(text.getText().length() == 1) {
            text.setText("0");
        }
    }
    
       public static void main(String args[]) {  
            Mycalulator calculator1 = new Mycalulator();  
             
//            Mycalulator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        }  
}
 

你可能感兴趣的:(java)