13day

day13

2.6、简易计算器,组合+内部类

oop原则:组合大于继承

class A extends B{
   
}

class A{
   public B b;
}

简易计算器

package com.wang.lesson02;

import org.omg.PortableServer.AdapterActivator;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

//简易计算器
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(20);//最大能填多少字符
       //一个按钮
       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);
       Frame frame = new Frame();
     
  }
}
//监听器类
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 i1 = Integer.parseInt(num1.getText());
       int i2 = Integer.parseInt(num2.getText());
       //将这个值加法运算,放到第三个框
       num3.setText(""+(i1+i2));
       //清除前两个框
       num1.setText("");
       num2.setText("");
  }
}

完全改造为面向对象

package com.wang.lesson02;

import org.omg.PortableServer.AdapterActivator;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

//简易计算器
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(20);//最大能填多少字符
       //一个按钮
       Button button = new Button("=");
       button.addActionListener(new MyCalculatorListener(this));
       //一个标签
       Label label = new Label("+");
       //布局
       setLayout(new FlowLayout());
       add(num1);
       add(label);
       add(num2);
       add(button);
       add(num3);
       pack();
       setVisible(true);
       Frame frame = new Frame();
  }
}
//监听器类
class MyCalculatorListener implements ActionListener{
   //获取计算器的对象 ,在一个类中组合另外一个类
   Calculator calculator=null;
   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(""+(n1+n2));
       //清除前两个框
       calculator.num1.setText("");
       calculator.num2.setText("");
  }
}

内部类

更好的包装

package com.wang.lesson02;

import org.omg.PortableServer.AdapterActivator;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

//简易计算器
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(20);//最大能填多少字符
       //一个按钮
       Button button = new Button("=");
       button.addActionListener(new MyCalculatorListener());
       //一个标签
       Label label = new Label("+");
       //布局
       setLayout(new FlowLayout());
       add(num1);
       add(label);
       add(num2);
       add(button);
       add(num3);
       pack();
       setVisible(true);
       Frame frame = new Frame();
  }
   //监听器类
   //内部类最大的好处就是可以访问外部类
   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(""+(n1+n2));
           //清除前两个框
           num1.setText("");
           num2.setText("");
      }
  }
}

画笔

package com.wang.lesson03;

import java.awt.*;

public class TestPaint {
   public static void main(String[] args) {
       new MyPaint().loadFrame();
  }
}
class MyPaint extends Frame {
   public void loadFrame(){
       setBounds(200,200,600,400);
       setVisible(true);
  }
   //画笔
   @Override
   public void paint(Graphics g) {
       //画画 颜色
       //g.setColor(Color.red);
       g.drawOval(100,100,100,100);
       g.fillOval(100,100,100,100);
       //g.setColor(Color.GREEN);
       g.fillRect(150,200,200,200);
  }
}

鼠标监听

package com.wang.lesson03;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Iterator;

//鼠标监听事件
public interface TestMouseListener {
   public static void main(String[] args) {
       new MyFrame("画图");
  }
}
class MyFrame extends Frame{
   //画画,需要监听鼠标当前的位置,需要集合来存储这个点
   ArrayList points;
   public MyFrame(String title) {
       super(title);
       setBounds(200,200,400,300);
       //存鼠标点击的点
       points=new ArrayList<>();
       setVisible(true);
       this.addMouseListener(new MyMouseListener());
  }
   @Override
   public void paint(Graphics g) {
       //画画监听鼠标事件
       Iterator iterator = points.iterator();
       while(iterator.hasNext()){
           Point point= (Point) iterator.next();
           g.setColor(Color.GREEN);
           g.fillOval(point.x,point.y,10,10);
      }
  }
   //添加一个点到界面上
   public void addPaint(Point point){
       points.add(point);
  }
   //适配器模式
   private class MyMouseListener extends MouseAdapter {
       //只要鼠标按压
       @Override
       public void mousePressed(MouseEvent e) {
           MyFrame myFrame = (MyFrame) e.getSource();
           //产生点
           myFrame.addPaint(new Point(e.getX(),e.getY()));
           //每次点击都需重新画一遍
           myFrame.repaint();
      }
  }
}

 

窗口监听

package com.wang.lesson03;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestWindow {
   public static void main(String[] args) {
       new WindowFrame();
  }
}
class WindowFrame extends Frame{
   public WindowFrame() {
       setVisible(true);
       setBackground(new Color(125, 65, 65));
       setBounds(100, 100, 400, 300);
       //addWindowListener(new MyWindowListener());
       this.addWindowListener(
               //匿名内部类
               new WindowAdapter() {
                   //关闭窗口
                   @Override
                   public void windowClosing(WindowEvent e) {
                       System.out.println("windowClosing");
                       System.exit(0);
                  }
                   //激活窗口
                   @Override
                   public void windowActivated(WindowEvent e) {
                       WindowFrame source =(WindowFrame) e.getSource();
                       source.setTitle("被激活了");
                       System.out.println("windowActivated");
                  }
              }
      );
  }
}

键盘监听

package com.wang.lesson03;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

//key键
public class TestKeyListener {
   public static void main(String[] args) {
       new KeyFrame();
  }
}
class KeyFrame extends Frame{
   public KeyFrame(){
       setBounds(100,100,200,300);
       setVisible(true);
       this.addKeyListener(new KeyAdapter() {
           //键盘按下
           @Override
           public void keyPressed(KeyEvent e) {
               //获得键盘按下的是哪个键,当前键盘的码
               int keyCode = e.getKeyCode();
               if (keyCode == KeyEvent.VK_UP){
                   System.out.println("你按下了上键");
              }
               //根据按下不同的键产生不同的结果
          }
      });
  }
}

 

 

posted @ 2021-04-18 22:28  卧剑之鱼  阅读(102)  评论(0)    收藏  举报