编写具有图形界面的简易计算器类SimpleCaculator,该类包含 AWT 界面构 造代码。编写四个按钮的单击事件以及窗口关闭事件的处理类MyListener: 当按下“+”按钮时,两个数值文本框之间应显示“+”号,同时相加结果显示在第 三个文本框内。类似处理“-”、“*”和“/”按钮。应处理除 0 异常和数值格式非法异常,点击关闭按钮时,结束程序的运行。(1) 文本框(TextField 类)的宽度可以用构造函数设置,如: TextField tf1=new TextField(10); (2) 出错提示窗口可以利用 javax.swing.JOptionPane 类的相应方法,如: javax.swing.JOptionPane.showMessageDialog(null, "请输入两个整数!"); (3) 由于 SimpleCaculator 类和 MyListener 类分别是两个类,在 SimpleCaculator 类中 应该把事件处理过程中需要访问的三个 TextField 对象以及第 1 个 Label 对象定义 为成员变量(四个按钮也可以定义为成员变量),并实例化事件处理对象时将 SimpleCaculator 对象传给 MyListener。此后 MyListener 就可以直接访问需要的对 象(除非这几个成员变量为 private)。附上注释
时间: 2024-03-20 11:40:12 浏览: 93
好的,以下是你要求的 SimpleCalculator 类和 MyListener 类的代码:
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.JOptionPane;
public class SimpleCalculator extends Frame {
// 定义界面元素
private TextField tf1, tf2, tf3;
private Label label;
private Button btnPlus, btnMinus, btnMultiply, btnDivide;
public SimpleCalculator() {
// 设置界面标题
setTitle("Simple Calculator");
// 初始化界面元素
tf1 = new TextField(10);
tf2 = new TextField(10);
tf3 = new TextField(10);
label = new Label("Result:");
btnPlus = new Button("+");
btnMinus = new Button("-");
btnMultiply = new Button("*");
btnDivide = new Button("/");
// 添加界面元素
add(tf1);
add(new Label("+"));
add(tf2);
add(new Label("="));
add(tf3);
add(label);
add(btnPlus);
add(btnMinus);
add(btnMultiply);
add(btnDivide);
// 设置布局管理器
setLayout(new FlowLayout());
// 设置窗口关闭事件处理
addWindowListener(new MyListener());
// 添加按钮单击事件处理
btnPlus.addActionListener(new MyListener());
btnMinus.addActionListener(new MyListener());
btnMultiply.addActionListener(new MyListener());
btnDivide.addActionListener(new MyListener());
// 显示界面
setSize(250, 150);
setVisible(true);
}
public static void main(String[] args) {
new SimpleCalculator();
}
// 内部类 MyListener 用于处理按钮单击和窗口关闭事件
private class MyListener implements ActionListener, WindowListener {
public void actionPerformed(ActionEvent e) {
try {
// 获取输入的两个数值
double num1 = Double.parseDouble(tf1.getText());
double num2 = Double.parseDouble(tf2.getText());
// 根据按钮类型计算结果并显示
if (e.getSource() == btnPlus) {
tf3.setText(Double.toString(num1 + num2));
label.setText("Result: +");
} else if (e.getSource() == btnMinus) {
tf3.setText(Double.toString(num1 - num2));
label.setText("Result: -");
} else if (e.getSource() == btnMultiply) {
tf3.setText(Double.toString(num1 * num2));
label.setText("Result: *");
} else if (e.getSource() == btnDivide) {
if (num2 == 0) {
throw new ArithmeticException("除数不能为0");
}
tf3.setText(Double.toString(num1 / num2));
label.setText("Result: /");
}
} catch (NumberFormatException ex) {
// 处理数值格式非法异常
JOptionPane.showMessageDialog(null, "请输入两个数值!");
} catch (ArithmeticException ex) {
// 处理除0异常
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
public void windowClosing(WindowEvent e) {
// 关闭窗口时结束程序运行
dispose();
System.exit(0);
}
// 下面的方法是空实现,可以不用管
public void windowOpened(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}
}
```
上面的代码中,SimpleCalculator 类继承了 Frame 类,实现了一个简单的计算器界面。MyListener 类实现了 ActionListener 和 WindowListener 接口,用于处理按钮单击和窗口关闭事件。
在 SimpleCalculator 类中,我们将四个按钮、三个文本框和一个标签等界面元素定义为成员变量,并在构造函数中进行初始化。同时,我们设置了窗口关闭事件处理和按钮单击事件处理,将 MyListener 对象传给 addActionListener 方法。
在 MyListener 类中,我们实现了 actionPerformed 和 windowClosing 两个方法。在 actionPerformed 方法中,我们首先尝试从两个文本框中获取输入的数值,并根据按钮类型计算结果并显示在第三个文本框中。如果出现数值格式非法异常或除0异常,我们将使用 JOptionPane 类弹出一个错误提示窗口。在 windowClosing 方法中,我们关闭窗口并结束程序运行。
希望这份代码能够帮助到你,如果还有不懂的地方,可以再问我哦~
阅读全文