如何在Java中检测Image对象上的鼠标单击事件?

用Java实现“ Kings’Corners ”(美化多人游戏纸牌)。

我试图允许玩家将牌(图像)从他们的手拖到桌子上的其他地方。 问题是玩家的手被“扇动”,因此卡片的图像会旋转并重叠。

这是一只手的例子:

在此处输入图像描述

我考虑过将每张卡片都设为JPanel ,但问题是我必须将卡片在其矩形 JPanel内旋转,因为它们本身无法旋转。 理想情况下,我想避免使用mouse-x,y公式来确定选择哪张卡片。

使用事件驱动的方法,我如何确定从手中选择哪张牌?

AWT(和Swing)组件通常是矩形的(与轴对齐)。

但事实并非如此 – 虽然实际边界必须是矩形,但组件使用的实际区域可以更小。 Component支持一个contains(Point)方法,当问题出现在一个点所属的组件上时,它将被事件调度机制调用 – 例如,鼠标点击。 (不同组件的重叠将由父容器内的z顺序处理。)

您可以使用仿射变换矩形作为形状,基于Shape.contains()方法实现此方法。 每个旋转的组件都会知道它自己的形状(或者从它的AffineTransform中动态生成它,同样也可以用于绘制它自己)。

有一个自定义LayoutManager来安排你的卡。 (尽管有名字,不要使用CardLayout。)

我不确定我是否会按照每张卡片的单独组件的方式,但你肯定需要一些代表旋转矩形的对象。