想在计算器旁边加入一历史记录
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.
定义一个全局的变量用来存放历史记录。
在计算事件中,更新历史记录变量的值。
每次计算过程及结果都写进一个成员变量中,或者持久化写入文件。这样界面只负责读不就好了。