GUI中java三种响应方式,鼠标(addMouseListener),屏幕(addWindowListener),键盘(addKeyListener) 及其代码示例

GUI中java三种响应方式,鼠标,屏幕,键盘 及其代码示例

1. 鼠标响应
使用组件的 addMouseListener 方法将从该类所创建的侦听器对象向该组件注册。当按下、释放或单击(按下并释放)鼠标时会生成鼠标事件。鼠标光标进入或离开组件时也会生成鼠标事件。发生鼠标事件时,将调用该侦听器对象中的相应方法,并将MouseEvent 传递给该方法。
程序实例:
通过鼠标点击,获取鼠标点击的位置,使用画笔在画板上绘制点的操作
原理示意图
在这里插入图片描述
实现代码如下:


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

public class Mousepaint {
    public static void main(String[] args) {
      new MyFrame("我的的画板");
    }
}
//画板
class  MyFrame extends Frame{
    //存放点的集合
    ArrayList points;
    public MyFrame(String title) {
        super(title);
        setVisible(true);
        setBounds(200,200,400,400);
        //存放鼠标点击的点
        points=new ArrayList<>();
        //监听鼠标的动作
        this.addMouseListener(new Mymouse());
    }
    //画板
    @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 addPoint(Point point){
        points.add(point);
    }
    //内部类:适配器模式
    private class Mymouse extends MouseAdapter{
        @Override
        public void mousePressed(MouseEvent e) {
            MyFrame frame=(MyFrame)e.getSource();
            //获取鼠标点击的 X Y坐标
            frame.addPoint(new Point(e.getX(),e.getY()));
            //每次画完在重画
            frame.repaint();//重画
        }
    }
}

2. 屏幕响应
用于接收窗口事件的侦听器接口。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 WindowAdapter(仅重写所需的方法)。然后使用窗口的 addWindowListener 方法将从该类所创建的侦听器对象向该 Window 注册。当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法。

实现代码

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

public class WindPaint {
    public static void main(String[] args) {
        new windowFrame();

    }
}
class windowFrame extends Frame{
    public windowFrame()  {
        setVisible(true);
        setBackground(Color.lightGray);
        setBounds(200,200,400,400);
        //addWindowListener(new Windlister());
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowOpened(WindowEvent e) {
                System.out.println("windowOpened");
            }

            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("windowClosing");
                System.exit(0);
            }

            @Override
            public void windowClosed(WindowEvent e) {
                System.out.println("windowClosed");
            }

            @Override
            public void windowIconified(WindowEvent e) {
                System.out.println("windowIconified");
            }

            @Override
            public void windowDeiconified(WindowEvent e) {
                System.out.println("windowDeiconified");
            }

            @Override
            public void windowActivated(WindowEvent e) {
                System.out.println("windowActivated");
            }

            @Override
            public void windowDeactivated(WindowEvent e) {
                System.out.println("windowDeactivated");
            }

            @Override
            public void windowStateChanged(WindowEvent e) {
                System.out.println("windowStateChanged");
            }

            @Override
            public void windowGainedFocus(WindowEvent e) {
                System.out.println("windowGainedFocus");
            }

            @Override
            public void windowLostFocus(WindowEvent e) {
                System.out.println("windowLostFocus");
            }
        });
    }

3. 键盘监听
用于接收键盘事件的侦听器接口。旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 KeyAdapter(仅重写所需的方法)。然后使用窗口的 addKeyListener 方法将从该类所创建的侦听器对象向该 Window 注册。当通过对键盘按下、长按等状态,将调用该侦听器对象中的相关方法,并将 KeyEvent 传递给该方法。

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

public class TestKeylister {
    public static void main(String[] args) {
        new KeyFrame();

    }
}
class KeyFrame extends Frame{
    public KeyFrame()  {
        setBounds(100,100,200,200);
        setVisible(true);
        setBackground(Color.BLACK);
        //匿名内部类:直接调用键盘监听
        this.addKeyListener(new KeyAdapter() {
            @Override
            //重写keyPressed(键盘按下响应)方法
            public void keyPressed(KeyEvent e) {
                int keycode=e.getKeyCode();
                if(keycode==KeyEvent.VK_UP){
                    System.out.println("你按下了上键");
                }
                else if (keycode==KeyEvent.VK_DOWN)
                {
                    System.out.println("你按下了下键");
                }
                else if (keycode==KeyEvent.VK_LEFT)
                {
                    System.out.println("你按下了左键");
                }
                else if (keycode==KeyEvent.VK_RIGHT)
                {
                    System.out.println("你按下了右键");
                }
                else System.out.println("你按下了其他键盘");
            }
        });
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞扬晴雪

学习的路上,感谢你的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值