Java计算器的完整代码

用Java怎么写一个计算器啊,监听器不会,按钮用循环在运行时不能显示,键盘有字符的输入、、、、、、求完整代码

首先:你的有一个静态界面,其实就是普通的java图形化界面开发。
其次:你可以给按钮添加监听。
然后:触发计算加减乘除的函数,得到返回结果。并将结果append在应该显示的组件中。

关于监听的设置方法:

public class Login extends JFrame implements ActionListener

   //创建组件  
    jb1=new JButton("登录");  
    jb2=new JButton("重置");  
    //设置监听  
    jb1.addActionListener(this);  
    jb2.addActionListener(this);  


             @Override  
public void actionPerformed(ActionEvent e) {  

    if(e.getActionCommand()=="登录")  
    {  
        //如果选中教师登录  
        if(jrb1.isSelected())  
        {  
              tealogin();  
        }else if(jrb2.isSelected()) //学生在登录系统  
        {  
              stulogin();  
        }  

    }else if(e.getActionCommand()=="重置")  
    {  
              clear();  
    }             

}

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

import exampleFrame.Calculator2;

public class Calcutor4 extends JFrame implements ActionListener{

// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
private boolean firstDigit = true;
// 计算的中间结果。
private double resultNum = 0.0;
// 当前运算的运算符
private String operator = "=";
// 操作是否合法
private boolean operateValidFlag = true;

    JPanel contentPane;
    JPanel contentPane2;
    JPanel contentPane3;

    JTextField tex = new JTextField("0");
    JButton a1 = new JButton("MC");
    JButton a2 = new JButton("MR");
    JButton a3 = new JButton("MS");
    JButton a4 = new JButton("M+");
    JButton a5 = new JButton("M-");
    JButton b1 = new JButton("←");
    JButton b2 = new JButton("CE");
    JButton b3 = new JButton("C");
    JButton b4 = new JButton("±");
    JButton b5 = new JButton("√");
    JButton c1 = new JButton("7");
    JButton c2 = new JButton("8");
    JButton c3 = new JButton("9");
    JButton c4 = new JButton("/");
    JButton c5 = new JButton("%");
    JButton d1 = new JButton("4");
    JButton d2 = new JButton("5");
    JButton d3 = new JButton("6");
    JButton d4 = new JButton("*");
    JButton d5 = new JButton("½");
    JButton e1 = new JButton("1");
    JButton e2 = new JButton("2");
    JButton e3 = new JButton("3");
    JButton e4 = new JButton("-");
    JButton f1 = new JButton("=");
    JButton f2 = new JButton("0");
    JButton f3 = new JButton(".");
    JButton f4 = new JButton("+");


    public Calcutor4() {


        //主面板
        contentPane  = (JPanel)getContentPane();
        contentPane.setLayout(null);
        this.setResizable(false);
        setSize(310, 399);
        setTitle("计算器");

        tex.setEnabled(false);
        tex.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
        tex.setHorizontalAlignment(SwingConstants.RIGHT);
        tex.setEditable(false);
        tex.setBounds(new Rectangle(20, 10, 260, 30));
        //设置jpane2
        contentPane2 = (JPanel)new JPanel();
        contentPane2.setLayout(new GridLayout(4,5,5,5));
        contentPane2.setBounds(20,50,260, 200);

        a1.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        a2.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        a3.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        a4.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        a5.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        b1.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        b2.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        b3.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        b4.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        b5.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        c1.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        c2.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        c3.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        c4.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        c5.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        d1.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        d2.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        d3.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        d4.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        d5.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));

        contentPane2.add(a1);
        contentPane2.add(a2);
        contentPane2.add(a3);
        contentPane2.add(a4);
        contentPane2.add(a5);
        contentPane2.add(b1);
        contentPane2.add(b2);
        contentPane2.add(b3);
        contentPane2.add(b4);
        contentPane2.add(b5);
        contentPane2.add(c1);
        contentPane2.add(c2);
        contentPane2.add(c3);
        contentPane2.add(c4);
        contentPane2.add(c5);
        contentPane2.add(d1);
        contentPane2.add(d2);
        contentPane2.add(d3);
        contentPane2.add(d4);
        contentPane2.add(d5);

        //设置面板3
        contentPane3 = new JPanel();
        contentPane3.setLayout(null);
        contentPane3.setBounds(20,255,260, 200);

        e1.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        e2.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        e3.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        e4.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        f1.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        f2.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        f3.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));
        f4.setFont(new java.awt.Font("宋体", Font.PLAIN, 12));

        e1.setBounds(new Rectangle(0, 0, 48, 45));
        e2.setBounds(new Rectangle(53,0, 48, 45));
        e3.setBounds(new Rectangle(106, 0, 48, 45));
        e4.setBounds(new Rectangle(159, 0, 48, 45));
        f1.setBounds(new Rectangle(212, 0, 48, 100));
        f2.setBounds(new Rectangle(0, 53, 101, 45));
        f3.setBounds(new Rectangle(106, 53, 48, 45));
        f4.setBounds(new Rectangle(159, 53, 48, 45));

        contentPane3.add(e1);
        contentPane3.add(e2);
        contentPane3.add(e3);
        contentPane3.add(e4);
        contentPane3.add(f1);
        contentPane3.add(f2);
        contentPane3.add(f3);
        contentPane3.add(f4);

       //添加事件监听器

        c1.addActionListener(this);
        c2.addActionListener(this);
        c3.addActionListener(this);
        c4.addActionListener(this);
        d1.addActionListener(this);
        d2.addActionListener(this);
        d3.addActionListener(this);
        d4.addActionListener(this);
        e1.addActionListener(this);
        e2.addActionListener(this);
        e3.addActionListener(this);
        e4.addActionListener(this);
        b1.addActionListener(this);
        b3.addActionListener(this);
        f1.addActionListener(this);
        f2.addActionListener(this);
        f3.addActionListener(this);
        f4.addActionListener(this);




        contentPane.add(contentPane3);
        contentPane.add(contentPane2);
        contentPane.add(tex);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }




    public static void main(String[] args) {
        Calcutor4 calculator3 = new Calcutor4();
    }



    @Override
    public void actionPerformed(ActionEvent e) {
        // 获取事件源的标签
        String label = e.getActionCommand();

        System.out.println(label);
        if (label.equals("←")) {
            // 用户按了"Backspace"键
            handleBackspace();

        } else if (label.equals("C")) {
            // 用户按了"C"键
            handleC();
        } else if ("0123456789.".indexOf(label) >= 0) {
            // 用户按了数字键或者小数点键
            handleNumber(label);
        } else {
            // 用户按了运算符键
            handleOperator(label);
        }
    }

    private void handleBackspace() {
        String text = tex.getText();
        int i = text.length();
        if (i > 0) {
            // 退格,将文本最后一个字符去掉
            text = text.substring(0, i - 1);
            if (text.length() == 0) {
                // 如果文本没有了内容,则初始化计算器的各种值
                tex.setText("0");
                firstDigit = true;
                operator = "=";
            } else {
                // 显示新的文本
                tex.setText(text);
            }
        }
    }

    /**
     * 处理数字键被按下的事件
     * 
     * @param key
     */
    private void handleNumber(String key) {

        if (firstDigit) {
            // 输入的第一个数字
            tex.setText(key);
        } else if ((key.equals(".")) && (tex.getText().indexOf(".") < 0)) {
            // 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
            tex.setText(tex.getText() + ".");
        } else if (!key.equals(".")) {
            // 如果输入的不是小数点,则将数字附在结果文本框的后面
            tex.setText(tex.getText() + key);
        }
        // 以后输入的肯定不是第一个数字了
        firstDigit = false;
    }

    /**
     * 处理C键被按下的事件
     */
    private void handleC() {
        // 初始化计算器的各种值
        tex.setText("0");
        firstDigit = true;
        operator = "=";
    }

    /**
     * 处理运算符键被按下的事件
     * 
     * @param key
     */
    private void handleOperator(String key) {
        if (operator.equals("/")) {
            // 除法运算
            // 如果当前结果文本框中的值等于0
            if (getNumberFromText() == 0.0) {
                // 操作不合法
                operateValidFlag = false;
                tex.setText("除数不能为零");
            } else {
                resultNum /= getNumberFromText();
            }
        } else if (operator.equals("+")) {
            // 加法运算
            resultNum += getNumberFromText();
        } else if (operator.equals("-")) {
            // 减法运算
            resultNum -= getNumberFromText();
        } else if (operator.equals("*")) {
            // 乘法运算
        } else if (operator.equals("=")) {
            // 赋值运算
            resultNum = getNumberFromText();
        }
        if (operateValidFlag) {
            // 双精度浮点数的运算
            long t1;
            double t2;
            t1 = (long) resultNum;
            t2 = resultNum - t1;
            if (t2 == 0) {
                tex.setText(String.valueOf(t1));
            } else {
                tex.setText(String.valueOf(resultNum));
            }
        }
        // 运算符等于用户按的按钮
        operator = key;
        firstDigit = true;
        operateValidFlag = true;
    }

    /**
     * 从结果文本框中获取数字
     * 
     * @return
     */
    private double getNumberFromText() {
        double result = 0;
        try {
            result = Double.valueOf(tex.getText()).doubleValue();
        } catch (NumberFormatException e) {
        }
        return result;
    }

}