import java.awt.; import java.awt.event.; import javax.swing.*;
public class Calculator {
private JFrame frame;
private JTextField textField;
private double num1, num2, result; // 存储计算过程中的数字和结果
private String operator; // 存储当前操作符
public Calculator() {
initialize();
}
private void initialize() {
frame = new JFrame("Calculator");
frame.setBounds(100, 100, 250, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridLayout(4, 4, 5, 5));
textField = new JTextField(10);
textField.setEditable(false);
JButton btn1 = new JButton("1");
JButton btn2 = new JButton("2");
JButton btn3 = new JButton("3");
JButton btnAdd = new JButton("+");
JButton btn4 = new JButton("4");
JButton btn5 = new JButton("5");
JButton btn6 = new JButton("6");
JButton btnSubtract = new JButton("-");
JButton btn7 = new JButton("7");
JButton btn8 = new JButton("8");
JButon bt9=JButton ("9");
JButton btnCancel=JButton ("C");
JButton btndivide=JButton("/");
JButton btnequal=new JButto("=");
panel.add(btnCancel);
panel.add(btndivide);
panel.add(btnMultiply);
panel.add(btnSubtract);
panel.add(btn7);
panel.add(btn8);
panel.add(btn9);
panel.add(btnequal);
panel. add (btn0) ;
panle. add (btnmultiply) ;
frame.getContentPane().add(textField, BorderLayout.NORTH);
frame.getContentPane().add(panel, BorderLayout.CENTER);
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if ("0123456789".indexOf(cmd) != -1) {
textField.setText(textField.getText() + cmd);
} else if (cmd.equals("+")) {
num1 = Double.parseDouble(textField.getText());
operator = "+";
textField.setText("");
} else if (cmd.equals("-")) {
num1 = Double.parseDouble(textField.getText());
operator = "-";
textField.setText("");
} else if (cmd.equals("*")) {
num1 = Double.parseDouble(textField.getText());
operator = "*";
textField.setText("");
} else if (cmd.equals("/")){
num1 = Double.parseDouble(textField.getText());
operator = "/";
textField.setText("");
}else if(cmd.equals("C")){
num1=0;
num2=0;
result=0;
operator=null;
textField.setText("");
} else if (cmd.equals("=")) {
num2=Double.parseDouble(textField.gettext());
switch(operator){
case "+": result=num1+num2;break;
case "-":result=num1-num2;break;
case "*":result=num1*num2;break;
case "/":if(num2==0){
JOptionPane.showMessageDialog(frame, "除数不能为0!", "错误", JOptionPane.ERROR_MESSAGE);
return ;
}
result=num1/num2;
break ;
default:break;
}
textField.setTex(Double.toString(result));
}
}
};
btn1.addActionListener(listener);
btn2.addActionListener(listener);
btn3.addActionListener(listener);
btn4.addActionListener(listener);
btn5.addActionListener(listener);
btn6.addActionListener(listener);
btn7.addActionListener(listener);
btn8.addActionListener(listener);
JButton9. addActionListener( listerner );
JButton0. addActionListener( listerner );
JButtonAdd. addActionListener( listerner );
JButtonSubstract. addActionListener( listerner );
JButtonMultiply. addActionListener( listerner );
btndivide.addActionListenr(listnerer)
btnequal.addActionListenr(listnerer)
frame.setVisible(true);
}
public static void main(String[] args) {
Calculator calc = new Calculator();
}
}
在这个计算器中,我们使用了类似于上面调整事件示例的方法来处理用户的输入。每当用户点击一个数字或操作符按钮时,我们将该按钮对应的字符串追加到文本框中。当用户点击操作符按钮时,我们保存当前数字和操作符,并清空文本框以等待下一次输入。最后,当用户点击“=”按钮时,我们根据保存的数字和操作符执行相应的计算并显示结果。
需要注意的是,在实现这个计算器时还需要考虑一些边界情况和错误处理,例如除数为0、输入非法字符等情况。此外,还可以添加更多功能,例如小数点、正负号、括号等。