在Java纸牌游戏中实现对对象上下鼠标移动的检测

在Java纸牌游戏中实现对对象上下鼠标移动的检测,java,swing,mouseevent,mouselistener,Java,Swing,Mouseevent,Mouselistener,我正在修改一个文件。基本上,我想检测用户何时将鼠标移到某张特定的卡上,以及何时将鼠标移离该卡。这应该很容易用mouseExit/mouseEntered函数实现,但是我遇到了麻烦 在该文件中,初始化一系列堆栈(DealtCardStack对象)并为其分配鼠标处理程序(第175行+)。该处理程序的鼠标函数几乎包含所有用于在主堆栈之间移动和打牌的代码,可以从第479行开始找到。我向这个处理程序添加了一个mouseExited/Entered函数,但它只适用于进入/退出堆栈。这种方法在某些情况下有效,

我正在修改一个文件。基本上,我想检测用户何时将鼠标移到某张特定的卡上,以及何时将鼠标移离该卡。这应该很容易用mouseExit/mouseEntered函数实现,但是我遇到了麻烦

在该文件中,初始化一系列堆栈(DealtCardStack对象)并为其分配鼠标处理程序(第175行+)。该处理程序的鼠标函数几乎包含所有用于在主堆栈之间移动和打牌的代码,可以从第479行开始找到。我向这个处理程序添加了一个mouseExited/Entered函数,但它只适用于进入/退出堆栈。这种方法在某些情况下有效,但也有一些情况下不够精确,我需要检测到堆栈中的特定卡片,因此它可以检测出同一堆栈中的离开和进入卡片

我尝试创建一个新的鼠标侦听器,并在创建时将其附加到每张卡片上(卡片在第75行创建)。当我创建一个鼠标监听器时,它强迫我重写mouseMove、Click等,所以我将这些内容留空,只是在mouseEnter和mouseExit中添加了一些代码(只是为了测试而打印)。我测试了这个程序,当我输入/留下一张我想要的卡时,打印的内容就出现了,但是我再也不能点击、拖动或与卡交互了。总之,游戏的功能(建立在游戏区)基本上被删除了。为什么会这样?java一次是否只支持程序中的一个鼠标处理程序?我认为情况并非如此,因为游戏区似乎有两个处理程序(一个用于处理角落甲板上的事件)。我认为分配给每张牌的新鼠标处理程序可能会覆盖GameArea中指定的所有功能,但我感到困惑,因为该鼠标处理程序分配给dealtCards,这是一个DealtCardStacks数组,而该新处理程序分配给单个牌

那么,有人知道为什么我在将这些鼠标处理程序分配给程序中的各种对象时遇到困难吗?还是有更好/更简单的解决方案来实现我的目标

我发现这似乎与我的问题非常相关,但是我尝试实现了一个MouseTrackListener,但该类型未被读取,无法从任何地方导入

我已经尽可能地把问题弄清楚了,项目中有很多代码,但我认为您只需要阅读以粗体指定的行中的链接类。如果有什么不清楚的,请告诉我


谢谢

我不确定,但是如果你在甲板上添加了鼠标侦听器,你就不会添加mouseMotionListener。。。是故意的吗?它是否也应该添加mouseMotionListener,以便您可以接收拖放


但我认为将侦听器添加到牌组中的每一张牌是正确的。

所以我基本上解决了这个问题。我在mouseMove函数中有检测移动到卡上的代码,它使用over_card和new_over_card变量来检测更改,因此它将检测同一堆栈中的进入和退出卡。然后在堆栈对象上使用mouseExit来检测是否完全离开堆栈。这些组合几乎涵盖了所有卡片的进出。

对不起,我不明白你的意思。没有一个链接的代码是我的,所以我不是很确定所有的。我现在已经解决了我的问题,很快就发布了答案。