如何在 Java 中检测 Image 对象上的鼠标单击事件?
Posted
技术标签:
【中文标题】如何在 Java 中检测 Image 对象上的鼠标单击事件?【英文标题】:How can you detect a mouse-click event on an Image object in Java? 【发布时间】:2011-09-28 11:11:06 【问题描述】:在 Java 中实现“Kings' Corners”(美化多人纸牌)。
我试图让玩家将一张牌(图像)从他们的手中拖到桌子上的其他地方。问题是玩家的手是“扇形的”,因此卡片的图像会旋转并且它们重叠。
这是一手牌的例子:
我考虑过将每张卡片设为JPanel
,但问题是我必须将卡片在其矩形 JPanel
内旋转,因为他们自己不能被旋转。理想情况下,我想避免使用鼠标 x,y 公式来确定选择哪张卡。
使用事件驱动的方法,我如何确定从手牌中选择哪张牌?
【问题讨论】:
嗯,使用一个或多个派生自 Shape 接口的具体类怎么样?这有一个 contains 方法会派上用场。每次使用 AffineTransform 旋转会很容易。 【参考方案1】:AWT(和 Swing)组件通常是矩形的(与轴对齐)。
但这并不一定是这样 - 虽然实际边界必须是矩形,但组件使用的实际区域可以更小。组件支持contains(Point)
方法,只要出现点属于哪个组件的问题(例如,鼠标单击),事件调度机制就会调用该方法。 (不同组件的重叠将由父容器内的 z-order 处理。)
您可以基于Shape.contains()
方法实现此方法,使用仿射变换的矩形作为您的形状。每个旋转的组件都将知道自己的形状(或从其 AffineTransform 动态生成它,它也将用于绘画本身)。
有一个自定义的 LayoutManager 也可以安排您的卡片。 (不要使用 CardLayout,尽管有这个名字。)
我不确定我是否会遵循为每张卡片设置单独组件的方式,但您肯定需要一些代表旋转矩形的对象。
【讨论】:
完美运行。解决方案是使用 AffineTransform 的 createTransformedShape,然后检查该形状是否包含鼠标单击的点。谢谢。 @paranoid-android:您应该通过单击此答案左侧的勾号来接受此答案。以上是关于如何在 Java 中检测 Image 对象上的鼠标单击事件?的主要内容,如果未能解决你的问题,请参考以下文章