參考狂神b站視頻,希望大家多多關注狂神呀
OOP原則:組合>繼承
// 繼承
class A extends B{
}
// 組合
class A{
public B b;
}
/**
* @Description: 初版
* @Date: 2020-05-17 13:18
**/
public class TestCalc {
public static void main(String[] args) {
Calculator calculator = new Calculator();
}
}
// 計算器類
class Calculator extends Frame {
public Calculator() {
// 三個文本框
TextField num1 = new TextField(10); // 字符數
TextField num2 = new TextField(10);
TextField num3 = new TextField(10);
// 一個按鈕
Button button = new Button("=");
button.addActionListener(new MyCalculatorListener(num1, num2, num3));
// 一個標籤
Label label = new Label("+");
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
}
}
// 監聽器類
class MyCalculatorListener implements ActionListener {
private TextField num1, num2, num3;
public MyCalculatorListener(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());
int n2 = Integer.parseInt(num2.getText());
//運算後放到第三個框
num3.setText(String.valueOf(n1 + n2));
//清除前兩個框
num1.setText("");
num2.setText("");
}
}
// 代碼優化一
public class TestCalc {
public static void main(String[] args) {
new Calculator().loadFrame();
}
}
// 計算器類
class Calculator extends Frame {
TextField num1, num2, num3;
public void loadFrame() {
// 三個文本框
num1 = new TextField(10); // 字符數
num2 = new TextField(10);
num3 = new TextField(10);
// 一個按鈕
Button button = new Button("=");
// 一個標籤
Label label = new Label("+");
button.addActionListener(new MyCalculatorListener(this));
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
}
}
// 監聽器類
class MyCalculatorListener implements ActionListener {
Calculator calculator;
public MyCalculatorListener(Calculator calculator) {
this.calculator = calculator;
}
@Override
public void actionPerformed(ActionEvent e) {
// 獲得兩個數字
int n1 = Integer.parseInt(calculator.num1.getText());
int n2 = Integer.parseInt(calculator.num2.getText());
//運算後放到第三個框
calculator.num3.setText(String.valueOf(n1 + n2));
//清除前兩個框
calculator.num1.setText("");
calculator.num2.setText("");
}
}
內部類:
- 更好的包裝
// 代碼優化二
public class TestCalc {
public static void main(String[] args) {
new Calculator().loadFrame();
}
}
// 計算器類
class Calculator extends Frame {
TextField num1, num2, num3;
public void loadFrame() {
// 三個文本框
num1 = new TextField(10); // 字符數
num2 = new TextField(10);
num3 = new TextField(10);
// 一個按鈕
Button button = new Button("=");
// 一個標籤
Label label = new Label("+");
button.addActionListener(new MyCalculatorListener());
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
}
// 監聽器類
// 內部類的最大的好處,就是可以暢通無阻的訪問外部類的屬性和方法
private class MyCalculatorListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// 獲得兩個數字
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
//運算後放到第三個框
num3.setText(String.valueOf(n1 + n2));
//清除前兩個框
num1.setText("");
num2.setText("");
}
}
}