监听事件

图画笔paint

package gui.lesson01.lesson03;

import java.awt.*;

public class TextPaint {
   public static void main(String[] args) {
       new MyPaint().myFrame();
  }
}
class MyPaint extends Frame {
   public void myFrame(){   //方法后面要带括号()
       setBounds(100,100,500,500);
       setVisible(true);
  }

   @Override
   public void paint(Graphics g) {    //右键generate,override method只需重写需要的paint方法。
       g.setColor(Color.red);    //设置g颜色为红色
       g.drawOval(100,100,100,100);  //画一个圆
       g.setColor(new Color(129, 210, 37));
       g.fillRect(150,200,150,150);  //画一个实心的矩形
  }
}

鼠标监听事件

package gui.lesson01.lesson03;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;

public class TextMouseListener {
   public static void main(String[] args) {
       new MyFrame03("画画");
  }
}
class MyFrame03 extends Frame{
   //整体构思,画画需要画笔,需要监听鼠标当前的位置,需要集合来存储这个位置。
   //int x,y;
   private ArrayList points;  //下面的类可能会用到,把它提到最高,大类的属性,内部类也可以调用
   public MyFrame03(String title) {
       super(title);
       setBounds(100,100,300,300);
       setVisible(true);
       //存储鼠标点击的点
       points = new ArrayList<>();   //放到最上面 属性 用一个集合存储点击过的所有点
       //鼠标监听器,是针对窗口的,因为要在窗口上点。
       this.addMouseListener(new MyMouseListener());  //this代表当前这个窗口 new MyMouseListener()一个这个类型的对象,就代表鼠标被监听上了。

  }

   @Override
   public void paint(Graphics g) {   //把points里面的点迭代出来,再开始画,所以点是一个动态的界面
       //画画,难点在于监听鼠标事件,监听鼠标的当前位置。
       Iterator iterator = points.iterator();  //Arraylist类型,多个点通过迭代可以迭代出来(遍历这个集合,鼠标点过的点)
       while(iterator.hasNext()){  //如果这里面还有东西,还有别的点。   可以把points = new ArrayList<>();里面的值全部画出来,问题是怎么把points里面的值全部接收过来,拿到。
           Point point = (Point)iterator.next();   //指针指向下一个,返回一个当前的点point,强转一下
           g.setColor(Color.blue);
           g.drawOval(point.x,point.y,10,10);
      }
       g.setColor(Color.red);
       //g.drawOval(x,y,30,30);
  }
   //添加一个点到界面上   重要
   public void addPoint(Point point){
       points.add(point);   //把(鼠标点过的)点都加入到points中(就是ArrayList<>()这个集合中)
  }

   //通过适配器模式,把类继承接口MouseListener,变成类继承接口的实现类MouseAdapter,不用重写接口的所有方法,需要用哪个,直接重写哪个方法。
   private class MyMouseListener extends MouseAdapter{
       //鼠标按下,弹起,按住不放
       @Override
       public void mousePressed(MouseEvent e) {
           MyFrame03 frame = (MyFrame03) e.getSource();  //一般先获得形参的资源,再获取坐标。
           //x = e.getPoint().x;   注释后的为另一种方法,但由于没有储存的集合,画完第二个圆,第一个园会消失。
           //y = e.getPoint().y;
           //这个点就是鼠标的点
           frame.addPoint(new Point(e.getX(),e.getY()));  //调用addPoint方法,把鼠标的点击坐标都有赋给points。new Point(e.getX(),e.getY())相当于实参,addPoint方法后面的Point point相当于形参。
           //每次点击,鼠标重新画一遍
           frame.repaint();  //刷新
      }
  }
}

窗口监听事件

package gui.lesson01.lesson03;

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

public class TextFrameListener {
   public static void main(String[] args) {
       new MyFrame04();
  }
}
class MyFrame04 extends Frame{
   public MyFrame04() {
       setBackground(Color.BLUE);
       setBounds(100,100,300,300);
       setVisible(true);
       //addWindowListener(new MyWindowListener());
       this.addWindowListener(        //方法二   加监听器
               new WindowAdapter() {       //真正的匿名内部类,一般都这么写 写事件的时候
                   @Override
                   public void windowOpened(WindowEvent e) {
                       System.out.println("窗口已打开");
                  }

                   @Override
                   public void windowClosing(WindowEvent e) {    //关闭窗口
                       super.windowClosing(e);
                  }

                   @Override
                   public void windowActivated(WindowEvent e) {   //窗口激活,鼠标在这个界面还是别的界面
                       super.windowActivated(e);
                  }
              }
      );
  }
//   class MyWindowListener extends WindowAdapter{   方法一
//       @Override
//       public void windowOpened(WindowEvent e) {
//           super.windowOpened(e);
//       }
//
//       @Override
//       public void windowClosing(WindowEvent e) {
//           //setVisible(false); //隐藏窗口,可以通过按钮隐藏窗口,不结束程序 (点击按钮会有一个点击事件,点击事件获取resource,得到他的frame,然后setvisible)
//           System.exit(0); //正常退出,程序结束
//       }
//
//       @Override
//       public void windowActivated(WindowEvent e) {
//           super.windowActivated(e);
//       }
//   }
}

键盘监听事件

package gui.lesson01.lesson03;

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

public class TextKeyCode {
   public static void main(String[] args) {
       new MyFrame05();
  }
}
class MyFrame05 extends Frame{
   public MyFrame05() {
       setBounds(1,2,300,400);
       setVisible(true);
       addKeyListener(new KeyAdapter() {  //new一个这个类型的变量(对象)
           @Override   //匿名内部类,重写需要的事件的方法(需要的事件是键盘按下出现的事情)
           public void keyPressed(KeyEvent e) {    //重要的是判断键盘按下的是哪个键
               int keyCode = e.getKeyCode();   //创建本地变量获取键盘的资源(形参获得实参用户的输入,本地变量再获取形参的资源)
               System.out.println(keyCode);    //输出的是十进制(十六进制转换出来的)
               if(keyCode == KeyEvent.VK_UP){
                   System.out.println("你按得是上键");   //正常输出上键值是38(十进制),在程序中是0x26十六进制
              }
          }
      });
  }
}
posted @ 2021-02-21 22:56  爱罗翔的张三  阅读(109)  评论(0编辑  收藏  举报