Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中检测图像对象上的鼠标单击事件?_Java_Events_Drag And Drop_Mouse - Fatal编程技术网

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

如何在Java中检测图像对象上的鼠标单击事件?,java,events,drag-and-drop,mouse,Java,Events,Drag And Drop,Mouse,在Java中实现“国王角落”(荣耀的多人单人纸牌) 我试图让玩家将一张牌(图像)从手上拖到桌子上的其他地方。问题是玩家的手是“扇形”的,所以牌的图像是旋转的,它们重叠 下面是一个手的例子: 我曾考虑将每张卡制作成JPanel,但问题是,我必须在其矩形JPanel内绘制旋转的卡,因为它们本身无法旋转。理想情况下,我希望避免使用鼠标-x,y公式来确定选择哪张卡 使用事件驱动的方法,如何确定从手上选择哪张卡?AWT(和Swing)组件通常是矩形的(与轴对齐) 但情况并非如此——虽然实际边界必须是矩形

在Java中实现“国王角落”(荣耀的多人单人纸牌)

我试图让玩家将一张牌(图像)从手上拖到桌子上的其他地方。问题是玩家的手是“扇形”的,所以牌的图像是旋转的,它们重叠

下面是一个手的例子:

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

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

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

但情况并非如此——虽然实际边界必须是矩形,但组件使用的实际面积可以更小。组件支持一个
contains(Point)
方法,每当出现一个点属于哪个组件的问题时(例如,鼠标单击),事件调度机制就会调用该方法。(不同组件的重叠将由父容器内的z顺序处理。)

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

有一个定制的LayoutManager,也可以安排您的卡片。(尽管名称不同,但不要使用CardLayout。)


我不确定我是否会遵循为每张卡提供单独组件的方法,但您肯定需要一些表示旋转矩形的对象。

Hm,使用一个或多个从图形界面派生的具体类如何?这有一个contains方法,可以派上用场。每次使用仿射变换,旋转都很容易。效果很好。解决方案是使用AffineTransform的createTransformedShape,然后检查该形状是否包含鼠标单击点。谢谢。@paranoid android:你应该点击这个答案左边的勾号来接受这个答案。