oop原则:组合大于继承
继承:class A extends B{}
组合:class A{public B b }
由面向过程逐步转变为面向对象
对象.方法
package GUI;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/*oop原则:组合大于继承
继承:class A extends B{}
组合:class A{public B b }
*/
// 简易计算器
public class Test09_Calc {
public static void main(String[] args) {
new Calculator();
}
}
// 一个计算器窗口
class Calculator extends Frame{
public Calculator() {
Calculator calculator;
// 三个文本输入框,一个标签,一个按钮
TextField num1=new TextField(10); // 字符数
TextField num2=new TextField(10);
TextField num3=new TextField(20);
Label label=new Label("+");
Button button=new Button("=");
button.addActionListener(new MyCalculatorLinstener(num1,num2,num3)); // 按钮监听事件
// 布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
}
}
// 监听器
class MyCalculatorLinstener implements ActionListener{
// 首先获得三个参数
TextField num1,num2,num3;
public MyCalculatorLinstener(TextField num1,TextField num2,TextField num3) {
this.num1=num1;
this.num2=num2;
this.num3=num3;
} // 有参构造
@Override
public void actionPerformed(ActionEvent e) {
int n1=Integer.parseInt(num1.getText()); // 将String 转化为 int
int n2=Integer.parseInt(num2.getText());
num3.setText(""+(n1+n2));
}
}
代码优化
使用组合
package GUI;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
// 优化代码
public class Test09_up {
public static void main(String[] args) {
new Calculator();
}
}
class Calculator extends Frame {
// 面向对象,分为方法和属性
public Calculator() { // 这些东西要在构造器里面,主函数默认有构造器
// 布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
button.addActionListener(new CalculatorLinstener(this)); // 按钮监听事件
}
Calculator calculator;
// 三个文本输入框,一个标签,一个按钮
TextField num1=new TextField(10); // 字符数
TextField num2=new TextField(10);
TextField num3=new TextField(20);
Label label=new Label("+");
Button button=new Button("=");
}
// 监听器
class CalculatorLinstener implements ActionListener {
// 组合:获得Calculator 这个类的对象,在一个类中使用到另外一个类的对象,这就是组合。。。 更容易理解什么是面向对象
Calculator calculator=null; // 一次性将所有数据拿过来,更方便!
public CalculatorLinstener(Calculator calculator) {
this.calculator=calculator; // 构造器的东西不能被复制?
/*
不是的,构造器本质上是一个方法,可以默认调用
构造器以外的其他函数不被主函数调用的话则不会运行,所以那些方法要写在构造器里面
*/
} // 有参构造
@Override
public void actionPerformed(ActionEvent e) {
int n1= Integer.parseInt(calculator.num1.getText()); // 将String 转化为 int
int n2=Integer.parseInt(calculator.num2.getText());
calculator.num3.setText(""+(n1+n2));
}
}
继续优化
使用内部类:最大的好处是,使得内部类可以随时方便地使用外部类的资源
package GUI;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
// 优化代码
public class Test09_up {
public static void main(String[] args) {
new Calculator();
}
}
class Calculator extends Frame {
// 面向对象,分为方法和属性
public Calculator() { // 这些东西要在构造器里面,主函数默认有构造器
// 布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
button.addActionListener(new CalculatorLinstener()); // 按钮监听事件
}
Calculator calculator;
// 三个文本输入框,一个标签,一个按钮
TextField num1=new TextField(10); // 字符数
TextField num2=new TextField(10);
TextField num3=new TextField(20);
Label label=new Label("+");
Button button=new Button("=");
// 监听器
class CalculatorLinstener implements ActionListener {
// 使用内部类后更加简洁了
@Override
public void actionPerformed(ActionEvent e) {
int n1= Integer.parseInt(num1.getText()); // 将String 转化为 int
int n2=Integer.parseInt(num2.getText());
num3.setText(""+(n1+n2));
}
}
}
标签:num2,Calculator,09,简易,add,计算器,new,TextField,public
From: https://www.cnblogs.com/zhanjianhai/p/17609333.html