Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程

Java Swing 鼠标事件监听实战:追踪鼠标位置

阿贵
9月7日发布 /正在检测是否收录...
温馨提示:
本文最后更新于2025年09月07日,已超过8天没有更新,若内容或图片失效,请留言反馈。

Java Swing 鼠标事件监听实战:追踪鼠标位置

130.png

一、原题完整代码呈现

以下是Java Swing中关于鼠标移动事件监听的典型题型,通过面板实时显示鼠标当前位置,包含3处需要填写的空白(标记为//*********Found**********):

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Java_3 {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Mouse Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new MousePanel());
        frame.pack();
        frame.setVisible(true);
    }
}

//*********Found**********
class ___________ extends JPanel {

    private JLabel b;

    public MousePanel() {
        b = new JLabel("  起始状态  ");
        setLayout(new BorderLayout());
        add(b, BorderLayout.SOUTH);

        addMouseMotionListener(new MouseMotion());
        setPreferredSize(new Dimension(300, 200));
    }

    //*********Found**********
    private class MouseMotion extends ___________ {

        public void mouseMoved(MouseEvent e) {
            //*********Found**********
            b.setText(" 鼠标当前位置: "+ e._________+ " , " + e.__________);
        }
    }
}

二、空白处逐一解析与解答

1. 第一处空白:自定义面板类的类名

答案:MousePanel

//*********Found**********
class MousePanel extends JPanel {

解析
main方法中,程序通过frame.getContentPane().add(new MousePanel())添加了一个面板实例,说明存在名为MousePanel的类,且该类继承JPanel(用于创建自定义面板)。因此此处应填写MousePanel

2. 第二处空白:鼠标移动监听器的父类/接口

答案:MouseMotionAdapter

    //*********Found**********
    private class MouseMotion extends MouseMotionAdapter {

解析
addMouseMotionListener(MouseMotionListener l)方法需要接收MouseMotionListener接口的实现类。MouseMotionAdapter是该接口的适配器类(空实现所有方法),通过继承它可以只重写需要的方法(如mouseMoved),避免实现接口时必须重写所有方法的冗余。因此此处填写MouseMotionAdapter

3. 第三处空白:获取鼠标坐标的方法

答案:getX()getY()

            //*********Found**********
            b.setText(" 鼠标当前位置: "+ e.getX() + " , " + e.getY());

解析
MouseEvent类提供了获取鼠标位置的方法:getX()返回鼠标在组件中的x坐标,getY()返回y坐标。此处需要在标签中显示这两个坐标,因此分别填写getX()getY()

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序实现了一个窗口,通过鼠标移动事件监听,在窗口底部的标签中实时显示鼠标在面板中的坐标位置,具体功能包括:

  1. 创建标题为“Mouse Demo”的窗口,添加自定义面板MousePanel
  2. 面板底部放置标签,初始显示“ 起始状态 ”;
  3. 监听鼠标在面板中的移动事件,实时更新标签内容为鼠标当前的(x,y)坐标。
运行说明
  1. 程序启动后,显示一个300×200的窗口,底部标签显示初始状态;
  2. 当鼠标在面板中移动时,标签实时更新为“ 鼠标当前位置: x , y ”(x为水平坐标,y为垂直坐标);
  3. 坐标原点(0,0)位于面板左上角,向右x增大,向下y增大;
  4. 关闭窗口时程序退出。

五、核心知识点总结

  1. 自定义面板类

    • 通过class MousePanel extends JPanel创建自定义面板,继承JPanel的所有属性和方法;
    • 面板中可添加组件(如JLabel),并设置布局(如BorderLayout)和 preferredSize(通过setPreferredSize设置面板默认大小)。
  2. 鼠标事件监听机制

    • 鼠标移动事件:属于MouseMotionListener接口管辖,包含mouseMoved(鼠标移动)和mouseDragged(鼠标拖拽)两个方法;
    • 适配器类:MouseMotionAdapterMouseMotionListener的适配器,提供了接口方法的空实现,继承它可以只重写需要的方法(如本例只重写mouseMoved),简化代码;
    • 注册监听器:通过addMouseMotionListener(监听器实例)为面板注册鼠标移动监听器,使面板能响应鼠标移动事件。
  3. MouseEvent类的坐标获取

    • getX():返回鼠标事件发生时,鼠标在源组件(本例中为MousePanel)中的水平坐标;
    • getY():返回垂直坐标;
    • 坐标体系:组件的左上角为原点(0,0),向右x递增,向下y递增。
  4. Swing窗口基础

    • JFrame:主窗口容器,通过setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)设置关闭窗口时退出程序;
    • pack():根据组件的preferredSize自动调整窗口大小;
    • setVisible(true):使窗口可见。

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一处空白类名错误:写成MouseDemo或其他名称(必须与main方法中创建的实例new MousePanel()一致);
    • 第二处空白父类错误:写成MouseMotionListener(直接实现接口需重写所有方法,而代码中只重写了mouseMoved,会编译错误);
    • 第三处空白方法错误:写成getXgetY(遗漏括号,方法调用需带(),否则编译错误)或getXCoordinate()(不存在该方法,正确方法为getX()getY())。
  2. 应试技巧

    • 自定义面板:“面板类名看实例,main方法中new的是谁,类名就是谁,继承JPanel不能忘”;
    • 事件适配器:“鼠标移动用MouseMotionListener,适配器是MouseMotionAdapter,继承它只重写需要的方法”;
    • 坐标获取:“鼠标位置用getX和getY,方法带括号,返回当前坐标值,实时更新到标签”。

通过本题,我们掌握了Swing中鼠标移动事件的监听机制、适配器类的使用及坐标获取方法。这些是Java GUI编程中处理用户交互的基础,理解并熟练运用这些知识点,能帮助我们实现更丰富的交互功能(如绘图、拖拽等)。

喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消 登录评论