haslflafjl 2022-04-27 11:29 采纳率: 80%
浏览 191

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

  • 写回答

6条回答 默认 最新

  • 爱编程的大李子 Java领域新星创作者 2022-04-28 09:10
    关注

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

    评论

报告相同问题?

问题事件

  • 修改了问题 4月27日
  • 创建了问题 4月27日

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀