编写具有图形界面的简易计算器类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 22:40:28 浏览: 23
好的,以下是SimpleCaculator类和MyListener类的代码实现:
```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SimpleCaculator extends Frame {
private TextField tf1, tf2, tf3; //三个文本框
private Label label; //第一个标签
private Button btn1, btn2, btn3, btn4; //四个按钮
public SimpleCaculator() {
super("简易计算器"); //设置窗口标题
setLayout(new FlowLayout()); //设置布局为流式布局
label = new Label("请输入两个数:"); //实例化标签
add(label); //添加标签到窗口
tf1 = new TextField(10); //实例化第一个文本框,设置宽度为10
add(tf1); //添加第一个文本框到窗口
tf2 = new TextField(10); //实例化第二个文本框,设置宽度为10
add(tf2); //添加第二个文本框到窗口
tf3 = new TextField(10); //实例化第三个文本框,设置宽度为10
tf3.setEditable(false); //设置第三个文本框为不可编辑状态
add(tf3); //添加第三个文本框到窗口
btn1 = new Button("+"); //实例化加号按钮
add(btn1); //添加加号按钮到窗口
btn2 = new Button("-"); //实例化减号按钮
add(btn2); //添加减号按钮到窗口
btn3 = new Button("*"); //实例化乘号按钮
add(btn3); //添加乘号按钮到窗口
btn4 = new Button("/"); //实例化除号按钮
add(btn4); //添加除号按钮到窗口
MyListener listener = new MyListener(this); //实例化事件处理对象,传入SimpleCaculator对象
btn1.addActionListener(listener); //为加号按钮添加单击事件监听器
btn2.addActionListener(listener); //为减号按钮添加单击事件监听器
btn3.addActionListener(listener); //为乘号按钮添加单击事件监听器
btn4.addActionListener(listener); //为除号按钮添加单击事件监听器
addWindowListener(new WindowAdapter() { //添加窗口关闭事件监听器
public void windowClosing(WindowEvent e) {
dispose(); //关闭窗口
System.exit(0); //结束程序运行
}
});
pack(); //根据组件自动调整窗口大小
setVisible(true); //设置窗口可见
}
public TextField getTextField1() {
return tf1; //返回第一个文本框对象
}
public TextField getTextField2() {
return tf2; //返回第二个文本框对象
}
public TextField getTextField3() {
return tf3; //返回第三个文本框对象
}
public static void main(String[] args) {
new SimpleCaculator(); //实例化SimpleCaculator对象
}
}
class MyListener implements ActionListener {
private SimpleCaculator sc; //SimpleCaculator对象
public MyListener(SimpleCaculator sc) {
this.sc = sc; //将SimpleCaculator对象赋值给成员变量
}
public void actionPerformed(ActionEvent e) {
try {
int num1 = Integer.parseInt(sc.getTextField1().getText()); //获取第一个文本框的文本内容并转换为整型
int num2 = Integer.parseInt(sc.getTextField2().getText()); //获取第二个文本框的文本内容并转换为整型
int result = 0; //初始化结果变量
if (e.getSource() == sc.btn1) { //如果事件源是加号按钮
sc.getTextField3().setText("+"); //在第三个文本框中显示加号
result = num1 + num2; //计算相加结果
} else if (e.getSource() == sc.btn2) { //如果事件源是减号按钮
sc.getTextField3().setText("-"); //在第三个文本框中显示减号
result = num1 - num2; //计算相减结果
} else if (e.getSource() == sc.btn3) { //如果事件源是乘号按钮
sc.getTextField3().setText("*"); //在第三个文本框中显示乘号
result = num1 * num2; //计算相乘结果
} else if (e.getSource() == sc.btn4) { //如果事件源是除号按钮
if (num2 == 0) { //如果第二个数为0
throw new ArithmeticException("除数不能为0!"); //抛出除0异常
}
sc.getTextField3().setText("/"); //在第三个文本框中显示除号
result = num1 / num2; //计算相除结果
}
sc.getTextField3().setText(sc.getTextField3().getText() + " " + result); //将结果显示在第三个文本框中
} catch (NumberFormatException ex) { //捕获数值格式非法异常
JOptionPane.showMessageDialog(null, "请输入两个整数!"); //弹出出错提示窗口
} catch (ArithmeticException ex) { //捕获除0异常
JOptionPane.showMessageDialog(null, ex.getMessage()); //弹出出错提示窗口
}
}
}
```
以上就是SimpleCaculator类和MyListener类的代码实现,可以根据需求进行修改和调整。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)