import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Calculator extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
static JFrame frame=new JFrame("计算器");
JTextField display=new JTextField("0");
Font font=new Font("Consolas",Font.BOLD,40); //设置字体样式
Font font1=new Font("Consolas",Font.BOLD,20);
Image iconImage=(new ImageIcon("C:\\Study\\eclipse-workspace\\Calculator\\src\\计算器2.png")).getImage();
ImageIcon iconImage2=new ImageIcon("C:\\Study\\eclipse-workspace\\Calculator\\src\\删除.png");
actionlistener al=new actionlistener();//创建监听器action listener的对象
//计算器按键
JButton button_clear=new JButton("C");
JButton button_delete=new JButton(iconImage2);
JButton button_plus=new JButton("+");
JButton button_minus=new JButton("-");
JButton button_multiply=new JButton("*");
JButton button_divide=new JButton("/");
JButton button_spot=new JButton(".");
JButton button_is=new JButton("=");
JButton button_sin=new JButton("sin");
JButton button_cos=new JButton("cos");
JButton button_tan=new JButton("tan");
JButton button_log=new JButton("log");
JButton button_bracket_r=new JButton("(");
JButton button_bracket_l=new JButton(")");
JButton[] button=new JButton[10];
public Calculator()
{
super();
//设置按钮颜色字体和监听器
for (int i = 0; i < 10; i++)
{
button[i] = new JButton(""+i);
button[i].setBackground(Color.white);//设置按钮颜色
button[i].setFont(font1); //设置按钮字体
button[i].addActionListener(al); //注册监听器
}
//设置按钮颜色
button_plus.setBackground(Color.white);
button_is.setBackground(Color.pink);
button_minus.setBackground(Color.white);
button_multiply.setBackground(Color.white);
button_divide.setBackground(Color.white);
button_spot.setBackground(Color.white);
button_clear.setBackground(Color.white);
button_delete.setBackground(Color.white);
button_sin.setBackground(Color.white);
button_cos.setBackground(Color.white);
button_tan.setBackground(Color.white);
button_log.setBackground(Color.white);
button_bracket_r.setBackground(Color.white);
button_bracket_l.setBackground(Color.white);
//设置按键透明
button_sin.setOpaque(false);
button_cos.setOpaque(false);
button_log.setOpaque(false);
button_tan.setOpaque(false);
button_plus.setOpaque(false);
button_minus.setOpaque(false);
button_multiply.setOpaque(false);
button_divide.setOpaque(false);
button_spot.setOpaque(false);
//设置按钮字体
button_plus.setFont(font1);
button_is.setFont(font1);
button_minus.setFont(font1);
button_multiply.setFont(font1);
button_divide.setFont(font1);
button_spot.setFont(font1);
button_clear.setFont(font1);
button_delete.setFont(font1);
button_sin.setFont(font1);
button_cos.setFont(font1);
button_tan.setFont(font1);
button_log.setFont(font1);
button_bracket_r.setFont(font1);
button_bracket_l.setFont(font1);
//计算器界面布局
frame.setIconImage(iconImage);
display.setHorizontalAlignment(JTextField.RIGHT);
display.setFont(font);
display.setBackground(Color.white);
display.setEditable(false); //设置文本框不可编辑
JPanel pan1=new JPanel(); //设置文本框布局
pan1.setLayout(new GridLayout(1,1,5,5));
pan1.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5));
pan1.add(display);
JPanel panBody=new JPanel(); //将按键加入panBody中
panBody.setLayout(new GridLayout(6,4));
panBody.add(button_clear);
panBody.add(button_delete);
panBody.add(button_bracket_r);
panBody.add(button_bracket_l);
panBody.add(button_sin);
panBody.add(button_cos);
panBody.add(button_tan);
panBody.add(button_log);
panBody.add(button[7]);
panBody.add(button[8]);
panBody.add(button[9]);
panBody.add(button_plus);
panBody.add(button[4]);
panBody.add(button[5]);
panBody.add(button[6]);
panBody.add(button_minus);
panBody.add(button[1]);
panBody.add(button[2]);
panBody.add(button[3]);
panBody.add(button_multiply);
panBody.add(button_divide);
panBody.add(button[0]);
panBody.add(button_spot);
panBody.add(button_is);
panBody.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
//创建框架窗口
frame.setLayout(new BorderLayout()); //布局
frame.add(pan1,BorderLayout.NORTH);
frame.add(panBody,BorderLayout.CENTER);
frame.setSize(480, 380); //大小
frame.setLocation(260, 150); //位置
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//注册监听器
button_plus.addActionListener(al);
button_minus.addActionListener(al);
button_multiply.addActionListener(al);
button_divide.addActionListener(al);
button_is.addActionListener(al);
button_spot.addActionListener(al);
button_clear.addActionListener(al);
button_delete.addActionListener(al);
button_sin.addActionListener(al);
button_cos.addActionListener(al);
button_tan.addActionListener(al);
button_log.addActionListener(al);
button_bracket_r.addActionListener(al);
button_bracket_l.addActionListener(al);
//设置热键
button[0].setMnemonic(KeyEvent.VK_0);
button[1].setMnemonic(KeyEvent.VK_1);
button[2].setMnemonic(KeyEvent.VK_2);
button[3].setMnemonic(KeyEvent.VK_3);
button[4].setMnemonic(KeyEvent.VK_4);
button[5].setMnemonic(KeyEvent.VK_5);
button[6].setMnemonic(KeyEvent.VK_6);
button[7].setMnemonic(KeyEvent.VK_7);
button[8].setMnemonic(KeyEvent.VK_8);
button[9].setMnemonic(KeyEvent.VK_9);
button_delete.setMnemonic(KeyEvent.VK_BACK_SPACE);
button_clear.setMnemonic(KeyEvent.VK_CLEAR);
button_spot.setMnemonic(KeyEvent.VK_PERIOD);
button_is.setMnemonic(KeyEvent.VK_EQUALS);
button_plus.setMnemonic(KeyEvent.VK_ADD);
button_minus.setMnemonic(KeyEvent.VK_SUBTRACT);
button_multiply.setMnemonic(KeyEvent.VK_MULTIPLY);
button_divide.setMnemonic(KeyEvent.VK_SLASH);
}
//定义处理事件的类
public class actionlistener implements ActionListener
{
RPN rpn;
public String pre_display="";
public void actionPerformed(ActionEvent e)
{
Object click1=e.getSource(); //获得组件名称
String click2=e.getActionCommand(); //获得组件标签
if(click1==button_clear) //初始化文本框
{
pre_display="";
display.setText("0");
}
else if(click1==button_delete) //用handleClear()方法处理delete
{
if(!pre_display.equals(""))
display.setText(handleDelete(pre_display));
else
display.setText(handleDelete(display.getText()));
}
else if(click2=="=")
{
//计算表达式
rpn=new RPN(display.getText());
rpn.ListPreExpressionToListExpression();
if(rpn.Opera_ListExpr().equals("illegal!"))
display.setText("illegal!");
else if(rpn.Opera_ListExpr().equals("non-existent!"))
display.setText("non-existent!");
else
{
double result=Double.valueOf(rpn.Opera_ListExpr()).doubleValue();
//数据类型转换
long t1=(long)result;
double t2=result-t1;
if(t2==0)
display.setText(String.valueOf(t1));
else
display.setText(String.valueOf(result));
}
pre_display="";
}
else
{
if(click2=="tan")
click2="tan(";
else if(click2=="sin")
click2="sin(";
else if(click2=="cos")
click2="cos(";
else if(click2=="log")
click2="log(";
pre_display+=click2;
dis