Java简易计算器和问题

提问:
计算器在计算完一次数据后,在textfield展示结果的时候,点击任意数字键会对上次计算结果产生编辑(比如上次计算结果为255,然后点击数字键3,结果上次的结果就变成了2553),请问如何解决?
全部代码

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Calculator2 implements ActionListener{
    JFrame frame;
    JTextField textfield;
    JPanel panel;
    JButton[] numberButtons=new JButton[10];
    JButton[] functionButtons=new JButton[8];
    JButton addBn,subBn,mulBn,divBn;
    JButton decBn,equBn,delBn,clrBn;
    
    Font font=new Font(null,Font.BOLD,30);
    double num1=0,num2=0,result=0;
    char operator;
    
    Calculator2(){
        frame=new JFrame("Calculator");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,500);
        frame.getContentPane().setBackground(Color.black);
        frame.setResizable(false);
        frame.setLayout(null);
        
        //TextField--
        textfield=new JTextField();
        textfield.setBounds(20,20,340,50);
        textfield.setBorder(null);
        textfield.setFont(font);
        textfield.setForeground(Color.white);
        textfield.setBackground(Color.gray);
        textfield.setEditable(false);
        //--TextField
        
        //Buttons--
        addBn=new JButton("+");
        subBn=new JButton("-");
        mulBn=new JButton("*");
        divBn=new JButton("/");
        decBn=new JButton(".");
        equBn=new JButton("=");
        delBn=new JButton("Del");
        clrBn=new JButton("Clear");
        functionButtons[0]=addBn;
        functionButtons[1]=subBn;
        functionButtons[2]=mulBn;
        functionButtons[3]=divBn;
        functionButtons[4]=decBn;
        functionButtons[5]=equBn;
        functionButtons[6]=delBn;
        functionButtons[7]=clrBn;
        for(int i=0;i<8;i++) {
            functionButtons[i].addActionListener(this);
            functionButtons[i].setFocusable(false);
            functionButtons[i].setFont(font);
            functionButtons[i].setForeground(Color.white);
            functionButtons[i].setBackground(Color.black);
        }
        for(int i=0;i<10;i++) {
            numberButtons[i]=new JButton(String.valueOf(i));
            numberButtons[i].addActionListener(this);
            numberButtons[i].setFocusable(false);
            numberButtons[i].setFont(font);
            numberButtons[i].setForeground(Color.white);
            numberButtons[i].setBackground(Color.black);
        }
        delBn.setBounds(20,400,160,50);
        clrBn.setBounds(200,400,160,50);
        //--Buttons
        
        //Buttons in Panel--
        panel=new JPanel();
        panel.setBackground(Color.black);
        panel.setBounds(20,90,340,300);
        panel.setLayout(new GridLayout(4,4,5,5));
        panel.add(numberButtons[1]);
        panel.add(numberButtons[2]);
        panel.add(numberButtons[3]);
        panel.add(addBn);
        panel.add(numberButtons[4]);
        panel.add(numberButtons[5]);
        panel.add(numberButtons[6]);
        panel.add(subBn);
        panel.add(numberButtons[7]);
        panel.add(numberButtons[8]);
        panel.add(numberButtons[9]);
        panel.add(mulBn);
        panel.add(decBn);
        panel.add(numberButtons[0]);
        panel.add(equBn);
        panel.add(divBn);
        //--Buttons in Panel
        
        frame.add(textfield);
        frame.add(panel);
        frame.add(delBn);
        frame.add(clrBn);
        frame.setVisible(true);
    }
    public static void main(String [] args) {
        Calculator2 c1=new Calculator2();
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        //TextField interactive--
        for(int i=0;i<10;i++) {
            if(e.getSource()==numberButtons[i]) {
                textfield.setText(textfield.getText().concat(String.valueOf(i)));
            }
        }
        if(e.getSource()==decBn) {
            textfield.setText(textfield.getText().concat(String.valueOf(".")));
        }
        if(e.getSource()==addBn) {
            num1=Double.parseDouble(textfield.getText());
            operator='+';
            textfield.setText("");    
        }
        if(e.getSource()==subBn) {
            num1=Double.parseDouble(textfield.getText());
            operator='-';
            textfield.setText("");    
        }
        if(e.getSource()==mulBn) {
            num1=Double.parseDouble(textfield.getText());
            operator='*';
            textfield.setText("");    
        }
        if(e.getSource()==divBn) {
            num1=Double.parseDouble(textfield.getText());
            operator='/';
            textfield.setText("");    
        }//--TextField interactive
        
        //show result--
        if(e.getSource()==equBn) {
            num2=Double.parseDouble(textfield.getText());
            switch(operator) {
            case'+':
                result=num1+num2;
                break;
            case'-':
                result=num1-num2;
                break;
            case'*':
                result=num1*num2;
                break;
            case'/':
                result=num1/num2;
                break;
            }
            textfield.setText(String.valueOf(result));
        }//--show result
        
        //set clear button--
        if(e.getSource()==clrBn) {
            textfield.setText("");
        }//--set clear button
        
        //set del button--
        if(e.getSource()==delBn) {
            String string=textfield.getText();
            textfield.setText("");
            for(int i=0;i<string.length()-1;i++) {
                textfield.setText(textfield.getText()+string.charAt(i));
            }
        }
    }

}

运行:

img

提供一个思路吧,当结果展示完后,当点击任意数字键就先清空上次结果再进行新的运算. 如果点击的是一些+,-,*就不用清空,直接拿来运算

你那个Clear按钮不是已经注册事件了么,可以清空TextField的。
另外,可以实现这样一个逻辑,在按=按钮之后,下次再输入数字的话,默认先清空TextField,如果是输入运算符,则在上一次运算结果的基础上再运算

1,写一个计算器使用指南---》》每次操作后要清除上次操作才能进行;

2,操作之后判断下一个字符是否是加减乘除,不是的话则清除上一次结果;

再添加一个if 计算出来一次结果 下次再点击数字按键 就先Clear 就可以了啊

这不是个问题吧,你打开手机计算器看看,计算完之后,再输入数字就会在结果后面