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

rth*_*sen 8 java mouse events drag-and-drop

用Java 实现" Kings'Corners "(荣耀的多人游戏纸牌).

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

这是一只手的例子:

在此输入图像描述

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

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

Paŭ*_*ann 5

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

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

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

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

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