计算器

OOP原则:组合,大于继承

目前代码

  1. public class TestCalc {
  2. public static void main(String[] args) {
  3. new Calculator();
  4. }
  5. }
  6. //计算器类
  7. class Calculator extends Frame{
  8. public Calculator(){
  9. //3个文本框
  10. TextField num1 = new TextField(10);//字符数
  11. TextField num2 = new TextField(10);
  12. TextField num3 = new TextField(20);
  13. //1个按钮
  14. Button button = new Button("=");
  15. button.addActionListener(new MyCalculatorListener(num1,num2,num3));
  16. //1个标签
  17. Label label = new Label("+");//加号
  18. //布局
  19. setLayout(new FlowLayout());
  20. add(num1);
  21. add(label);
  22. add(num2);
  23. add(button);
  24. add(num3);
  25. pack();
  26. setVisible(true);
  27. }
  28. }
  29. //监听器类
  30. class MyCalculatorListener implements ActionListener{
  31. //获取三个变量
  32. private TextField num1,num2,num3;
  33. public MyCalculatorListener(TextField num1,TextField num2,TextField num3) {
  34. this.num1=num1;
  35. this.num2=num2;
  36. this.num3=num3;
  37. }
  38. @Override
  39. public void actionPerformed(ActionEvent e) {
  40. //1、获得加数和被加数
  41. int n1 = Integer.parseInt(num1.getText());
  42. int n2 = Integer.parseInt(num2.getText());
  43. //2、将这个值加法运算后,放到第三个框
  44. num3.setText(""+(n1+n2));
  45. //3、清除前两个框
  46. num1.setText("");
  47. num2.setText("");
  48. }
  49. }

完全改造为面向对象写法

  1. public class TestCalcPlus {
  2. public static void main(String[] args) {
  3. new Calculator1().loadFrame();
  4. }
  5. }
  6. //计算器类
  7. class Calculator1 extends Frame{
  8. //属性
  9. TextField num1,num2,num3;
  10. //方法
  11. public void loadFrame(){
  12. //3个文本框
  13. num1 = new TextField(10);//字符数
  14. num2 = new TextField(10);
  15. num3 = new TextField(20);
  16. //1个按钮
  17. Button button = new Button("=");
  18. button.addActionListener(new MyCalculatorListener1(this));
  19. //1个标签
  20. Label label = new Label("+");//加号
  21. //布局
  22. setLayout(new FlowLayout());
  23. add(num1);
  24. add(label);
  25. add(num2);
  26. add(button);
  27. add(num3);
  28. pack();
  29. setVisible(true);
  30. }
  31. }
  32. //监听器类
  33. class MyCalculatorListener1 implements ActionListener{
  34. //获取计算器这个对象,在一个类中组合另一个类
  35. Calculator1 calculator1=null;
  36. public MyCalculatorListener1(Calculator1 calculator1) {
  37. this.calculator1=calculator1;
  38. }
  39. @Override
  40. public void actionPerformed(ActionEvent e) {
  41. //1、获得加数和被加数
  42. int n1 = Integer.parseInt(calculator1.num1.getText());
  43. int n2 = Integer.parseInt(calculator1.num2.getText());
  44. //2、将这个值加法运算后,放到第三个框
  45. calculator1.num3.setText(""+(n1+n2));
  46. //3、清除前两个框
  47. calculator1.num1.setText("");
  48. calculator1.num2.setText("");
  49. }
  50. }

内部类

更好的包装

  1. public class TestCalc2 {
  2. public static void main(String[] args) {
  3. new Calculator2().loadFrame();
  4. }
  5. }
  6. //计算器类
  7. class Calculator2 extends Frame {
  8. //属性
  9. TextField num1,num2,num3;
  10. //方法
  11. public void loadFrame(){
  12. //3个文本框
  13. num1 = new TextField(10);//字符数
  14. num2 = new TextField(10);
  15. num3 = new TextField(20);
  16. //1个按钮
  17. Button button = new Button("=");
  18. button.addActionListener(new MyCalculatorListener2());
  19. //1个标签
  20. Label label = new Label("+");//加号
  21. //布局
  22. setLayout(new FlowLayout());
  23. add(num1);
  24. add(label);
  25. add(num2);
  26. add(button);
  27. add(num3);
  28. pack();
  29. setVisible(true);
  30. }
  31. //监听器类
  32. //内部类的最大的好处就是可以畅通无阻的访问外部类的属性和方法
  33. private class MyCalculatorListener2 implements ActionListener {
  34. @Override
  35. public void actionPerformed(ActionEvent e) {
  36. //1、获得加数和被加数
  37. int n1 = Integer.parseInt(num1.getText());
  38. int n2 = Integer.parseInt(num2.getText());
  39. //2、将这个值加法运算后,放到第三个框
  40. num3.setText("" + (n1 + n2));
  41. //3、清除前两个框
  42. num1.setText("");
  43. num2.setText("");
  44. }
  45. }
  46. }