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

2023-09-20 12:55:34

一、画笔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("你按下了上键");
                }
            }
        });
    }
}
更多推荐

通过 chatgpt 协助完成网站数据破解

Chatgpt的出现极大地提升了程序员的工作效率,常见的使用场景包括代码自动生成、代码静态检查等,那么chatgpt能否用于某些网站的数据破解工作呢?问题某天线上服务开始报警,原来是某个视频网站无法获取到其cdn地址导致的下载失败问题。经过debug发现原来的明文数据现在变成了加密数据(数据放在html中),如下由于职

Boostrap对HTML的表格的设计和优化

目录01-Bootstrap的默认表格风格02-没有边线-边界的表格03-行与行的背景颜色交替变换(条纹样式)04-给表格加上边框效果05-鼠标移到行上时该行的颜色加深06-把表格的padding值缩减一半,使表格看起来更紧凑07-为表格的行或单元格设置颜色01-Bootstrap的默认表格风格Bootstrap对表格

生信分析Python实战练习 9 | 视频27

开源生信Python教程生信专用简明Python文字和视频教程源码在:https://github.com/Tong-Chen/Bioinfo_course_python目录背景介绍编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Pyt

Springboot部署服务器项目上线

第一步,项目打包,有两种方式第一种、直接在项目根目录打开终端,输入以下语句即可。如下图:mvncleanpackage-DskipTests第二种、在右侧点击Maven选项,选择鼠标左键双击package选项即可。如下图:两种方法的结果,都会得到我们需要jar包,效果如下图:(可选项)如果觉得jar包名太难记,还可以在

“Vue进阶:深入理解插值、指令、过滤器、计算属性和监听器“

目录引言:Vue的插值Vue的指令Vue的过滤器Vue的计算属性和监听器vue购物车案例总结:引言:Vue.js是一款流行的JavaScript框架,它提供了许多强大的功能来简化前端开发。在本篇博客中,我们将深入探讨Vue的一些高级特性,包括插值、指令、过滤器、计算属性和监听器。通过理解和灵活运用这些功能,我们可以更好

10个值得关注的学习网站,知乎超30万人收藏,什么资源都可找到!

hi,大家好我是技术苟,每周准时上线为你带来实用黑科技!由于公众号改版,现在的公众号消息已经不再按照时间顺序排送了。因此小伙伴们就很容易错过精彩内容。喜欢黑科技的小伙伴,可以将黑科技百科公众号设为标星,这样就不会走丢啦~免责声明hello,朋友们,黑科技百科所有资源均为免费分享,绝多部分来源于互联网,所有资源仅提供学习

线程的方法(未完成)

线程的方法1.获取当前线程对象:CurrentThread()@Testpublicvoidbb(){Threadthread=Thread.currentThread();System.out.println(thread.getName());//打印main}2.currentThread().setName和c

CPP-Templates-2nd--第 21 章 模板和继承

目录21.1空基类优化(TheEmptyBaseClassOptimization,EBCO)21.1.1布局原则21.1.2将数据成员实现为基类21.2TheCuriouslyRecurringTemplatePattern(CRTP)21.2.1TheBarton-NackmanTrick21.2.2运算符的实现(

客户端和服务端信息交互模型

什么是客户端和服务端?客户端:可以向服务器发请求,并接收返回的内容进行处理服务器端:能够接收客户端请求,并且把相关资源信息返回给客户端的当用户在地址栏中输入网址,到最后看到页面,中间都经历了什么?后面会详细解析每个步骤干的事一、URL地址解析A:URI/URL/URNURI(UniformResourceldentif

云服务部署:AWS、Azure和GCP比较

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

【腾讯云 Cloud Studio 实战训练营】提升开发效率与协作:探索腾讯云 Cloud Studio 的强大功能与优势

文章目录一、前言二、认识腾讯云CloudStudio2.1什么是云端开发环境2.2CDE的特点与优点2.2.1提高效率,开发环境一键运行2.2.2提高生产力,可以并行的工作2.2.3开发更加规范2.2.4提供监管,降低资本与资源2.3云端开发环境具备的四大要素2.4腾讯云CloudStudio强大的AI功能2.4.1与

热文推荐