要求:用Java实现一个计算器。
代码:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator extends JFrame {
public static void main(String[] args) {
Calculator frame = new Calculator();
frame.setTitle("Calculator");
frame.setSize(360, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.init();
frame.setVisible(true); //显示界面
}
private void init()
{
int i;
textField = new JTextField(); //文本(显示操作数及结果)
textField.setEditable(false); //不可更改
textField.setHorizontalAlignment (JTextField.RIGHT); //格式右对齐
JPanel panel = new JPanel(); //界面
panel.setLayout(new GridLayout(4, 4,3,3)); //排列格式
Container container = getContentPane();
container.add(textField, BorderLayout.NORTH);
container.add(panel, BorderLayout.CENTER);
char Operator[]={'7','8','9','+','4','5','6','-','1','2','3','*','0','.','=','/'};
for(i=0;i<=15;i++) //添加按钮
panel.add(operateButton(Operator[i]));
}
public JButton operateButton (char key)
{
JButton button = new JButton(String.valueOf(key));
button.addActionListener(new ActionListener() //注册监听器
{
public void actionPerformed(ActionEvent event)
{
JButton btn = (JButton) event.getSource();
char key2 = btn.getText().charAt(0);
action(key2);
}
});
button.addKeyListener(new KeyAdapter()
{
public void keyReleased(KeyEvent event)
{
char key2 = event.getKeyChar();
action(key2);
}
});
return button;
}
private void action(char key2)
{
if(isEqual) //在key2是运算符的情况下用来判断是否是‘=’或者其他的情况
{
textField.setText(""); //如果是等号,那么在输出结果之前清空文本内容
isEqual = false;
}
switch(key2) //首先将输入的是运算数还是运算符的情况区别开
{
case '+': //输入为运算符
v1 = Double.parseDouble(textField.getText());
textField.setText("");
operator = '+';
break;
case '-':
v1 = Double.parseDouble(textField.getText());
textField.setText("");
operator = '-';
break;
case '*':
v1 = Double.parseDouble(textField.getText());
textField.setText("");
operator = '*';
break;
case '/':
v1 = Double.parseDouble(textField.getText());
textField.setText("");
operator = '/';
break;
case '=': //输入等号之后开始运算
isEqual = true;
v2 = Double.parseDouble(textField.getText()); //如何将操作符后的数字放入v2中
switch(operator)
{
case '+':
value = v1 + v2;
break;
case '-':
value = v1 - v2;
break;
case '*':
value = v1 * v2;
break;
case '/':
value = v1 / v2;
break;
default: ;
}
textField.setText(String.valueOf(value));
break;
case '1': //输入为运算数的情况
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
case '.':
String text = textField.getText() + key2;
textField.setText(text);
break;
default: ;
}
}
private JTextField textField;
private double v1, v2, value;
private char operator;
private boolean isEqual = false;
}