MouseListener API在基本级别上如何工作?

问题描述

MouseListener如何知道事件已发生?

我试图做一个自定义对象侦听器,以确定一个对象何时进入另一个对象,与mouseEntered(MouseEvent e){}方法平行。就我而言,我有一个移动的物体“汽车”和一个固定的“车库”。我想使用VehicleListener接口和诸如vehicleEntered之类的事件对车库进行编码。因此,我对java从根本上如何与鼠标进行交互很感兴趣。

从理论上讲,我想要一些看起来像这样的代码:

public class Garage implements VehicleListener{
    int x,y;
    public Garage(){
        x = some_x;
        y = some_y;
        addVehicleListener(this);
    }

    @Override
    public void vehicleEntered(VehicleEvent e):{
        System.out.println("A car has entered the garage");
    }
}

public interface VehicleListener extends EventListener{
    public void vehicleEntered(VehicleEvent e);
}

public class VehicleEvent extends EventObject{
    // EventHandling code
}

我已经考虑过每次汽车行驶时都要进行检查,但是这种解决方案在许多汽车和车库实例中可能会出现问题。

编辑:编写碰撞引擎是答案吗?

解决方法

为了对鼠标和键盘事件做出反应并显示图形输出,Java与本机window system集成。

这是一个高级概述:

当用户移动鼠标或键盘上的键入时,它将在操作系统中生成硬件中断(或其他信号-确切的细节无关紧要)。操作系统使这些事件可用于称为窗口系统的特殊程序。窗口系统决定屏幕上显示的内容:它为其他应用程序提供了一种创建“窗口”的方式,它们可以在其中显示图形用户界面。它还提供了一种方法,可以在按钮按下和鼠标移动时通知应用程序。

Java像其他任何带有GUI的应用程序一样,都钩接到本机窗口系统中。当它收到键盘和鼠标事件时,它将它们转换为Java事件对象。此过程的一部分是根据事件中的信息(例如鼠标坐标)查找“源”组件。然后,它将运行在源组件及其父组件中注册的适当的事件侦听器。

鼠标事件源自硬件。通过更改一些数字来“移动”自己的对象根本不会产生任何事件。您需要实现生成事件的碰撞检测算法,或者使用为您执行此操作的库。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...