请问这个java计算器怎么实现等于、退格和清除功能?

package jsq;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.*;
public class calculator {
    JFrame f=new JFrame("Calculator");

    JPanel p1=new JPanel();
    JPanel p2=new JPanel();
    JTextField tf=new JTextField(20);

    JButton b0=new JButton("0");
    JButton b1=new JButton("1");
    JButton b2=new JButton("2");
    JButton b3=new JButton("3");
    JButton b4=new JButton("4");
    JButton b5=new JButton("5");
    JButton b6=new JButton("6");
    JButton b7=new JButton("7");
    JButton b8=new JButton("8");
    JButton b9=new JButton("9");
    JButton b10=new JButton("0");
    JButton b11=new JButton("+");
    JButton b12=new JButton("-");
    JButton b13=new JButton("*");
    JButton b14=new JButton(".");
    JButton b15=new JButton("=");
    JButton b16=new JButton("/");
    JButton b17=new JButton("Backspace");
    JButton b18=new JButton("C");
    double output1=0,output2=0;
    boolean outflag1=false,outflag2=false,opflag=false;//outflag1,outflag2表示output1,output2是否有操作数。opflag表示op是否有运算符。
    private int op = 0,add = 1,sub = 2,mul = 3,div = 4;
    boolean firstpress=false;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        calculator calc=new calculator();
        calc.bevent();
    }
    public calculator(){

        p1.setLayout(new FlowLayout(FlowLayout.CENTER));
        p1.add(tf);
        f.add(p1,BorderLayout.NORTH);
        p2.setLayout(new GridLayout(5,5));
        p2.add(b1);
        p2.add(b2);
        p2.add(b3);
        p2.add(b11);
        p2.add(b4);
        p2.add(b5);
        p2.add(b6);
        p2.add(b12);
        p2.add(b7);
        p2.add(b8);
        p2.add(b9);
        p2.add(b13);
        p2.add(b10);
        p2.add(b14);
        p2.add(b15);
        p2.add(b16);
        p2.add(b17);
        p2.add(b18);
        tf.setBackground(Color.PINK);



        f.add(p2,BorderLayout.CENTER);
        tf.setText(tf.getText()+"0");
        tf.setEditable(false);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);

    }
    public void bevent(){
        b10.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {


                if(!(tf.getText().length()==1 && tf.getText().contains("0")))

                    tf.setText(tf.getText()+"0");

            }
        });
        b1.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                addnum("1"); }

        });
        b2.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                addnum("2");
            }

        });
        b3.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                addnum("3");
            }

        });
        b4.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                addnum("4");
            }

        });
        b5.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                addnum("5");
            }

        });
        b6.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                addnum("6");
            }

        });
        b7.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                addnum("7");
            }

        });
        b8.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                addnum("8");
            }

        });
        b9.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                addnum("9");
            }

        });
        b14.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                if(!tf.getText().contains("."))
                    tf.setText(tf.getText()+".");
            }

        });
        b11.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                opbutton(add);
            }
        });
        b12.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                opbutton(sub);
            }
        });
        b13.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                opbutton(mul);
            }
        });
        b16.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                opbutton(div);
            }
        });

    }
    public void addnum(String x){

        if((tf.getText().length()==1 && tf.getText().contains("0")))
            tf.setText(x);
        else
            tf.setText(tf.getText()+x);

        if (opflag==true && firstpress==false){
            tf.setText(x);
            firstpress=true;
        }

    }

    private double stringToDouble(String x){
        double y = Double.parseDouble(x);
        return y;
    }
    private void operate(){
        switch (op){
            case 0:
                output1 = output1+0;
                break;
            case 1:
                output1 = output1+output2;
                tf.setText(String.valueOf(output1));
                break;
            case 2:
                output1 = output1-output2;
                tf.setText(String.valueOf(output1));
                break;
            case 3:
                output1 = output1*output2;
                tf.setText(String.valueOf(output1));
                break;
            case 4:
                if(output2!=0){
                    output1 = output1/output2;
                    tf.setText(String.valueOf(output1));
                }else{
                    output1=0;
                    tf.setText(String.valueOf(output1));
                }
                break;
        }
    }

    void opbutton(int x){
        if (outflag1==false){
            output1=stringToDouble(tf.getText());
            outflag1=true;


        }
        if(opflag==false){
            op=x;
            opflag=true;
            firstpress=false;
        }
        else {

            output2=stringToDouble(tf.getText());
            operate();
            outflag1=true;
            op=x;
            opflag=true;
            outflag2=false;
            firstpress=false;
        }
    }
}

 

思路:你的实现都是可以通过事件来控制组件内容显示的,如清除,直接将组件内容清空即给“”


import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

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

public class Calc extends JFrame implements ActionListener,KeyListener{

	JTextField txtResult;
	JButton btn0,btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9;
	JButton btnAdd,btnSub,btnTimes,btnDiv,btnEquals,btnDot;
	JButton btnClear,btnExit;
	JPanel centerPanel,southPanel;
	double num1=0,num2=0,result=0;
	String opr= "+";
	public Calc() {
		setTitle("计算器2016");
		txtResult = new JTextField("0.0");
		//只读
//		txtResult.setEditable(false);
		
		centerPanel = new JPanel(new GridLayout(4,4,5,5));
		southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
		add(txtResult,BorderLayout.NORTH);
		txtResult.addKeyListener(this);
		add(centerPanel);
		btn0 = new JButton("0");
		btn1 = new JButton("1");
		btn2 = new JButton("2");
		btn3 = new JButton("3");
		btn4 = new JButton("4");
		btn5 = new JButton("5");
		btn6 = new JButton("6");
		btn7 = new JButton("7");
		btn8 = new JButton("8");
		btn9 = new JButton("9");
		btnAdd = new JButton("+");
		btnSub = new JButton("-");
		btnTimes = new JButton("*");
		btnDiv = new JButton("/");
		btnDot = new JButton(".");
		btnEquals = new JButton("=");
		centerPanel.add(btn7);
		centerPanel.add(btn8);
		centerPanel.add(btn9);
		centerPanel.add(btnDiv);
		centerPanel.add(btn4);
		centerPanel.add(btn5);
		centerPanel.add(btn6);
		centerPanel.add(btnTimes);
		centerPanel.add(btn1);
		centerPanel.add(btn2);
		centerPanel.add(btn3);
		centerPanel.add(btnSub);
		centerPanel.add(btn0);
		centerPanel.add(btnDot);
		centerPanel.add(btnEquals);
		centerPanel.add(btnAdd);
		
		
		
		add(southPanel,BorderLayout.SOUTH);
		btnClear = new JButton("清除");
		btnExit = new JButton("关闭");
		southPanel.add(btnClear);
		southPanel.add(btnExit);
		
		//监听
		btn0.addActionListener(this);
		btn1.addActionListener(this);
		btn2.addActionListener(this);
		btn3.addActionListener(this);
		btn4.addActionListener(this);
		btn5.addActionListener(this);
		btn6.addActionListener(this);
		btn7.addActionListener(this);
		btn8.addActionListener(this);
		btn9.addActionListener(this);
		btnAdd.addActionListener(this);
		btnSub.addActionListener(this);
		btnTimes.addActionListener(this);
		btnDiv.addActionListener(this);
		btnDot.addActionListener(this);
		btnEquals.addActionListener(this);
		btnClear.addActionListener(this);
		btnExit.addActionListener(this);
		
		
		setSize(300, 300);
		setVisible(true);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}
	public static void main(String[] args) {
		new Calc();
	}
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==btnClear){
			txtResult.setText("0");
		}else if(e.getSource()==btnExit){
			System.exit(0);
		}else if(e.getSource()==btn0){
			setText("0");
		}else if(e.getSource()==btn1){
			setText("1");
		}else if(e.getSource()==btn2){
			setText("2");
		}else if(e.getSource()==btn3){
			setText("3");
		}else if(e.getSource()==btn4){
			setText("4");
		}else if(e.getSource()==btn5){
			setText("5");
		}else if(e.getSource()==btn6){
			setText("6");
		}else if(e.getSource()==btn7){
			setText("7");
		}else if(e.getSource()==btn8){
			setText("8");
		}else if(e.getSource()==btn9){
			setText("9");
		}else if(e.getSource()==btnDot){
			setText(".");
		}else if(e.getSource()==btnAdd){
			opr = "+";
			operator();
			//清空内容
			txtResult.setText("");
		}else if(e.getSource()==btnSub){
			opr = "-";
			operator();
			//清空内容
			txtResult.setText("");
		}else if(e.getSource()==btnTimes){
			opr = "*";
			operator();
			//清空内容
			txtResult.setText("");
		}else if(e.getSource()==btnDiv){
			opr = "/";
			operator();
			//清空内容
			txtResult.setText("");
		}else if(e.getSource()==btnEquals){
			operator();
			txtResult.setText(result+"");
			num1=num2=result=0;
		}
		
	}
	public void setText(String s){
		//获取文本框的值
		String str = txtResult.getText().trim();
		//如果文本框里面的值是0,那么初始化为空值
		if(str.equals("" ) || Double.parseDouble(str)==0){
			str = "";
		}
		str += s;
		//设置文本框的值
		txtResult.setText(str);
	}
	public void operator(){
		if(txtResult.getText().equals("")){
			num1=0;
		}else{
			num1 = Double.parseDouble(txtResult.getText().trim());
		}
		System.out.println("num1="+num1+";num2="+num2);
		if(opr.equals("+")){
			result = num1+num2;
		}else if(opr.equals("-")){
			result = num2-num1;
		}else if(opr.equals("*")){
			result = num1*num2;
		}else if(opr.equals("/")){
			result = num2/num1;
		}
		num2=num1;
	}
	String m_temp;
	public void keyPressed(KeyEvent e) {
		m_temp = txtResult.getText();
		
		
	}
	public void keyReleased(KeyEvent e) {
		try{
			Double.parseDouble(txtResult.getText());
		}catch(Exception ex){
			txtResult.setText(m_temp);
		}
	}
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
}

 

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632