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

Java实现“国王之角”(华丽的多人纸牌).

我试图允许玩家将一张卡片(图像)从他们的手中拖到桌上的其他地方.问题是玩家的手被“扇形”了,所以纸牌的图像被旋转并且重叠.

这是一只手的例子:

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

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

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

但这不是必须的-虽然实边界必须为矩形,但组件使用的实际面积可以较小.组件支持contains(Point)方法,只要出现问题,该点属于哪个组件(例如鼠标单击),事件分配机制就会调用该方法. (不同组件的重叠将由父容器内的z顺序处理.)

您可以基于Shape.contains()方法,使用仿射变换后的矩形作为形状来实现此方法.您旋转的每个组件都会知道自己的形状(或通过其AffineTransform即时生成它的形状,也可以用于绘画自身).

也有一个自定义的LayoutManager来安排您的卡片. (尽管有名称,但不要使用CardLayout.)

我不确定我是否会遵循为每张卡设置单独组件的方式,但是您当然需要一些表示旋转矩形的对象.

转载注明原文:如何在Java中检测Image对象上的鼠标单击事件? - 代码日志