通过使用Java GUI编程技术中的AWT实现一个简单的加法计算器(采用三种方式实现)
预期页面效果:
当点击“=”时,加数和被加数处自动清空
所需控件:
三个文本框、一个按钮、一个“+”标签
页面布局:
流式布局
方式一:
main方法中负责启动程序,将布局和事件监听分开处理
//简易计算器
public class Calculator {
public static void main(String[] args) {
Calc calc = new Calc();
}
}
//计算器类
class Calc extends Frame{
public Calc(){
//三个文本框
TextField num1 = new TextField(10);//字符数
TextField num2 = new TextField(10);
TextField num3 = new TextField(20);
//一个按钮
Button button = new Button("=");
//一个标签“+”
Label label = new Label("+");
//流式布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
//大小自适应
pack();
//可见性
setVisible(true);
//button增加监听事件
CalaListener calaListener = new CalaListener(num1,num2,num3);
button.addActionListener(calaListener);
}
}
//监听器类
class CalaListener implements ActionListener{
//获取三个变量
private TextField num1,num2,num3;
public CalaListener(TextField num1,TextField num2,TextField num3){
this.num1=num1;
this.num2=num2;
this.num3=num3;
}
@Override
public void actionPerformed(ActionEvent e) {
//1.获得加数、被加数
int i1 = Integer.parseInt(num1.getText());
int i2 = Integer.parseInt(num2.getText());
//2.将这个值+法运算后,防止第三个框
num3.setText(""+(i1+i2));
//3.清除前两个框
num1.setText("");
num2.setText("");
}
}
方式二:(基于方式一的优化)
采用 组合 的方式获取计算器类这个对象
//简易计算器 对Calculator进行优化
public class Calculator02 {
public static void main(String[] args) {
new Calc02().loadFrame();
}
}
//计算器类
class Calc02 extends Frame{
//属性
TextField num1,num2,num3;
//方法
public void loadFrame(){
//三个文本框
num1 = new TextField(10);//字符数
num2 = new TextField(10);
num3 = new TextField(20);
//一个按钮
Button button = new Button("=");
//一个标签“+”
Label label = new Label("+");
//流式布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
//大小自适应
pack();
//可见性
setVisible(true);
//button增加监听事件
CalaListener02 calaListener02 = new CalaListener02(this);
button.addActionListener(calaListener02);
}
}
//监听器类
class CalaListener02 implements ActionListener{
//获取计算器这个对象,在一个类中组合另外一个类
Calc02 calc02=null;
public CalaListener02(Calc02 calc02){
this.calc02=calc02;
calc02.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
//1.获得加数、被加数
int n1=Integer.parseInt(calc02.num1.getText());
int n2=Integer.parseInt(calc02.num2.getText());
//2.将这个值+法运算后,防止第三个框
calc02.num3.setText(""+(n1+n2));
//3.清除前两个框
calc02.num1.setText("");
calc02.num2.setText("");
}
}
方式三(基于方式二的优化):
采用 内部类
好处:可以直接访问外部类的成员
//简易计算器 对Calculator进行优化
public class Calculator03 {
public static void main(String[] args) {
new Calc03().loadFrame();
}
}
//计算器类
class Calc03 extends Frame{
//属性
TextField num1,num2,num3;
//方法
public void loadFrame(){
//三个文本框
num1 = new TextField(10);//字符数
num2 = new TextField(10);
num3 = new TextField(20);
//一个按钮
Button button = new Button("=");
//一个标签“+”
Label label = new Label("+");
//流式布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
//大小自适应
pack();
//可见性
setVisible(true);
//button增加监听事件
CalaListener03 calaListener03 = new CalaListener03();
button.addActionListener(calaListener03);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
//内部类
//监听器类
private class CalaListener03 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//1.获得加数、被加数
int n1=Integer.parseInt(num1.getText());
int n2=Integer.parseInt(num2.getText());
//2.将这个值+法运算后,防止第三个框
num3.setText(""+(n1+n2));
//3.清除前两个框
num1.setText("");
num2.setText("");
}
}
}