• 鼠标、键盘、窗口监听事件


    一、画笔paint

    //画笔
    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) {
            //super.paint(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);
    ​
            //养成习惯,画笔用完,将他还原到最初的颜色
        }
    }

    二、鼠标监听

    • 目的:想要实现鼠标画画

    • 思路:

      • 首先需要一个面板Frame,需要一个画笔,需要一个鼠标,需要一个集合来存储鼠标点击的位置

      • 画板和画笔是绑定的。每次点击鼠标都要存储到集合中,而每次画图都需要读取这个集合。

    • 代码:

    //鼠标监听事件
    public class 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.blue);
                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();
            }
        }
    }

    三、窗口监听

    public class TestWindow {
        public static void main(String[] args) {
            new WindowFrame();
        }
    }
    ​
    class WindowFrame extends Frame{
    ​
        public WindowFrame() {
            setBackground(Color.BLUE);
            setVisible(true);
            setBounds(100,100,200,200);
            //addWindowListener(new MyWindowListener());
            this.addWindowListener(
                    //匿名内部类
                    new WindowAdapter() {
                        @Override
                        public void windowClosing(WindowEvent e) {
                            System.exit(0);
                        }
                    }
            );
        }
        
    }

    四、键盘监听

    public class TestKeyListener {
        public static void main(String[] args) {
            new KeyFrame();
        }
    }
    ​
    class KeyFrame extends Frame{
        public KeyFrame(){
            setBounds(1,2,300,400);
            setVisible(true);
    ​
            this.addKeyListener(new KeyAdapter() {
                //键盘按下
                @Override
                public void keyPressed(KeyEvent e) {
                    //获得键盘按下的键是哪一个
                    int keyCode = e.getKeyCode();
                    System.out.println(keyCode);
                    if(keyCode==KeyEvent.VK_UP) {
                        System.out.println("你按下了上键");
                    }
                }
            });
        }
    }
  • 相关阅读:
    用Unity来下一场雪吧——Particle System 下雪粒子特效
    【C++】STL简介(了解)
    MR756-ASEMI汽车用整流二极管MR756
    git在merge时做了些什么
    MFC Windows 程序设计[132]之打开按钮的启用与禁用
    yolov8-pose的数据集标注
    Hadoop生态之Mapreduce
    【附源码】计算机毕业设计JAVA宠物医院管理系统
    CDB转OA
    【五】设计模式~~~创建型模式~~~单例模式(Java)
  • 原文地址:https://blog.csdn.net/yujiyai/article/details/133074202