编写程序Calculater.java,实现一个简单的计算器
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JCalculator extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private class WindowCloser extends WindowAdapter { //关闭窗口
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
int i;
private final String[] str = { "7", "8", "9", "/", "4", "5", "6", "*", "1",
"2", "3", "-", ".", "0", "=", "+" };
JButton[] buttons = new JButton[str.length];
JTextField display = new JTextField("0"); //建一个文本区来显示结果
public JCalculator() { //构造函数
super("计算器");
// 添加一个面板
JPanel panel1 = new JPanel(new GridLayout(4, 4)); // 网格布局
// 设置布局
for (i = 0; i < str.length; i++) { //布局添加内容(组件)
buttons[i] = new JButton(str[i]);
panel1.add(buttons[i]);
}
JPanel panel2 = new JPanel(new BorderLayout()); // 边界布局
panel2.add("Center", display); // 文本框的东西
getContentPane().setLayout(new BorderLayout());
getContentPane().add("North", panel2);
getContentPane().add("Center", panel1);
// 给按钮添加监听器
for (i = 0; i < str.length; i++)
buttons[i].addActionListener(this);
// 给文本区添加监听器
display.addActionListener(this);
// X 使关闭窗口
addWindowListener(new WindowCloser());
setSize(300, 300);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
String label = e.getActionCommand(); //根据内容决定操作
if ("0123456789.".indexOf(label) > 0) //匹配
handleNumber(label);
else
handleOperator(label);
}
boolean isFirstDigit = true; //第一位数字是否设置
//对数字操作
public void handleNumber(String key) {
if (isFirstDigit)
display.setText(key);
else if ((key.equals(".")) && (display.getText().indexOf(".") < 0))
display.setText(display.getText() + ".");
else if (!key.equals("."))
display.setText(display.getText() + key);
isFirstDigit = false;
}
double number = 0.0;
String operator = "=";
//运算操作
public void handleOperator(String key) {
if (operator.equals("+"))
number += Double.valueOf(display.getText());
else if (operator.equals("-"))
number -= Double.valueOf(display.getText());
else if (operator.equals("*"))
number *= Double.valueOf(display.getText());
else if (operator.equals("/"))
number /= Double.valueOf(display.getText());
else if (operator.equals("="))
number = Double.valueOf(display.getText());
display.setText(String.valueOf(number));
operator = key;
isFirstDigit = true;
}
public static void main(String[] args) {
new JCalculator();
}
}