Day5(画笔,鼠标监听,窗口监听,键盘监听)

画笔基础用法

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,500);
        setVisible(true);
    }
    //画笔
    @Override
    public void paint(Graphics g) {
       //画笔 要有颜色 能够画画
        g.setColor(new Color(11, 60,89));
        g.drawOval(100,100,100,100);//空心的圆
        g.fillOval(100,100,100,100);//实心的圆

        g.setColor(Color.gray);
        g.fill3DRect(300,300,100,100,false);
        //养成习惯 画笔用完将它还原到最初颜色————黑色
    }
}

鼠标监听

目标:想要实现鼠标画画java

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

//测试鼠标监听事件
public class TestMouseListener {
    public static void main(String[] args) {
        new MyFrame1("画图");
    }
}
//定义本身的类
class MyFrame1 extends Frame{
    //画画须要 画笔 须要监听鼠标的当前位置 须要集合来存储这个点
    ArrayList points;
    public MyFrame1(String title)  {
        super(title);
        setBounds(200,200,400,300);  //设置画板
        //存鼠标点击的点
    points=new ArrayList<>();      //把属性提出去,提升调用的做用范围

        //鼠标监听器 针对整个窗口监听
        this.addMouseListener(new MyMouseListener());
        setVisible(true);
    }

    @Override   //重写画笔 监听鼠标事件
    public void paint(Graphics g) {
        Iterator iterator=points.iterator();  //迭代器 实现动态
        while (iterator.hasNext()){
            Point point= (Point) iterator.next();
            g.setColor(Color.blue);
            g.fillOval(point.x,point.y,10,10);  //笔头设置
        }
    }
    //添加一个点到界面上
    public void addPaint(Point point){
        points.add(point);
    }
    //适配器模式 用extends MouseAdapter而不是implements MouseListener
    private class MyMouseListener extends MouseAdapter {
        //鼠标 按下,弹起,按住不放
        @Override
        public void mousePressed(MouseEvent e) {
        MyFrame1 frame= (MyFrame1) e.getSource();
            //咱们点击时,就会在界面产生一个点
            //这个点就是鼠标的点
            frame.addPaint(new Point(e.getX(),e.getY()));
            //每次点击鼠标都须要从新画一遍
            frame.repaint();  //刷新
        }
    }
}

窗口监听

public class TestWindow {
    public static void main(String[] args) {
new WindowFrame();
    }
}
class WindowFrame extends Frame{
    public WindowFrame() {
        setBackground(Color.pink);
        setBounds(100,100,200,200);
        setVisible(true);
      // addWindowListener(new MyWindowListener()); 不提倡另外写一个
        this.addWindowListener(   //提倡这种写匿名内部类的方法
                new WindowAdapter() {
                    @Override
                    public void windowClosing(WindowEvent e) {  //关闭窗口
                        System.exit(0);
                    }

                    @Override
                    public void windowActivated(WindowEvent e) {   //激活窗口
                        System.out.println("Active");    
                    }});}}

键盘监听

class KeyFrame extends Frame{
    public KeyFrame() {
        setBackground(Color.pink);
        setBounds(200,200,300,300);
        setVisible(true);
        this.addKeyListener(
                new KeyAdapter() {
                    @Override
                    public void keyTyped(KeyEvent e) {
                        super.keyTyped(e);
                    }

                    @Override
                    public void keyPressed(KeyEvent e) {
                        //得到键盘按下的是哪一个
                        int keyCode=e.getKeyCode();//不须要记录这个数值,直接用静态属性VK_XXX
                     if(e.getKeyCode()==KeyEvent.VK_UP) {
                         System.out.println("你按下上键");
                     }
                     //根据按下不一样键产生不一样结果
                    }

                    @Override
                    public void keyReleased(KeyEvent e) {
                        super.keyReleased(e);
                    }
                }
        );
    }