Java简单计算器如何写出历史记录

问题遇到的现象和发生背景

想在计算器旁边加入一历史记录

问题相关代码,请勿粘贴截图

package studentManager;
import javax.swing.;
import java.awt.
;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener {
int c;
private static final long serialVersionUID = 1L;
private JPanel jf_top =new JPanel();
private JTextField input_text = new JTextField();
private JButton btn_c = new JButton("C");
private JPanel jf_center = new JPanel();

public static final int FRAME_W = 500 ;
public static final int FRAME_H = 500 ;
public static final int SCREEN_W = Toolkit.getDefaultToolkit().getScreenSize().width;
public static final int SCREEN_H = Toolkit.getDefaultToolkit().getScreenSize().height;
 
public static final int FRAME_X = (SCREEN_W-FRAME_W)/2;
public static final int FRAME_Y = (SCREEN_H-FRAME_H)/2;

public Calculator() {
    this.init();
    this.addNorthComponent();
    this.addCenterButton();
}

public void init() {
    JMenuBar menubar=new JMenuBar();
    this.setTitle("李某人的计算器");
    this.setSize(FRAME_W,FRAME_H);
    this.setLocation(FRAME_W,FRAME_H);
    JMenu menu1=new JMenu("查看(V)");
    JMenu menu2=new JMenu("编辑(E)");
    JMenu menu3=new JMenu("帮助(H)");
    menubar.add(menu1);
    menubar.add(menu2);
    menubar.add(menu3);
    this.setJMenuBar(menubar);
    this.setLayout(new BorderLayout());
    this.setResizable(false);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
}    

private void addNorthComponent() {
    this.input_text.setPreferredSize(new Dimension(360,40));
    jf_top.add(input_text);
    
    this.btn_c.setForeground(Color.blue);
    btn_c.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            input_text.setText("");
        }
    });
    jf_top.add(btn_c);
    this.add(jf_top,BorderLayout.NORTH);
}

private void addCenterButton() {
    jf_center.setLayout(new GridLayout(5,4,6,6));
    String[] names = {"9","8","7","*","6","5","4","-","3","2","1","+","sqrt","0","//","/","^","%",".","="};
    String regex = "[\\+\\-*/.%^=]";
    for (int i=0;i<20;i++) {
        Button btn =new Button(names[i]);
        if(names[i].matches(regex)) {
            btn.setFont(new Font("黑体",Font.BOLD,20));
            btn.setForeground(Color.blue);
        }
        btn.addActionListener(this);
        
        jf_center.add(btn);
    }
    this.add(jf_center);
}

String firstInput = null;
String operator = null;
public void actionPerformed(ActionEvent e) {
    String btn_text = e.getActionCommand();
    if(".0123456789".indexOf(btn_text)!=-1) 
     {
        this.input_text.setText(input_text.getText()+btn_text);
        this.input_text.setHorizontalAlignment(JTextField.RIGHT);
     }
    else if(btn_text.matches("[\\+\\-*%^/]{1}")) 
     {
        operator = btn_text;
        firstInput = this.input_text.getText();
        this.input_text.setText("");
     }
    else if(btn_text.matches("[//]{2}")) 
     {
        operator = btn_text;
        firstInput = this.input_text.getText();
        this.input_text.setText("");
     }
    else if(btn_text.matches("[sqrt]{4}")) 
     {
        operator = btn_text;
        firstInput = this.input_text.getText();
        this.input_text.setText("");
     }
    else if(btn_text.equals("=")) 
     {
        Double a = Double.valueOf(firstInput);
        Double b = Double.valueOf(this.input_text.getText());
        Double result = null;
        switch(operator) {
        case"+":
            result = a + b;
            break;
        case"-":
            result = a - b;
            break;
        case"*":
            result = a * b;
            break;
        case"/":
            result = a / b;
            break;
        case"%":
            result = a % b;
            break;
        case"^":
            result = Math.pow(a, b);
            break;
        case"sqrt":
            result = Math.pow(a,1/b);
            break;
        case"//":
            c=(int)(a/b);
            result =(double)c;
            break;
        }
        this.input_text.setText(result.toString());
    }
    
}
public static void main(String[] args) {
    Calculator calculator = new Calculator();
    calculator.setVisible(true);
}

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

在计算器旁边加入一历史记录

1.

定义一个全局的变量用来存放历史记录。
在计算事件中,更新历史记录变量的值。

每次计算过程及结果都写进一个成员变量中,或者持久化写入文件。这样界面只负责读不就好了。