Java 确定单击了三个部分重叠的图像中的哪一个
我有几个JLabel,每个都有一个图像图标,如下所示:Java 确定单击了三个部分重叠的图像中的哪一个,java,swing,user-interface,overlap,imageicon,Java,Swing,User Interface,Overlap,Imageicon,我有几个JLabel,每个都有一个图像图标,如下所示: ImageIcon icon = new ImageIcon("path/to/image.jpg"); JLabel label = new JLabel(icon); 这些图像是六边形的.png。六边形“外部”的边(存在的冗余部分使用矩形画布)是透明的。 因此,图像的jlabel是按顺序排列的,因此总是有三个相互干扰的图像 因为在另一层的下方或上方没有“可见”层,所以我想定义“可点击区域”来精确显示可见层。最聪明的方法是什么,或者有更
ImageIcon icon = new ImageIcon("path/to/image.jpg");
JLabel label = new JLabel(icon);
这些图像是六边形的.png。六边形“外部”的边(存在的冗余部分使用矩形画布)是透明的。
因此,图像的jlabel是按顺序排列的,因此总是有三个相互干扰的图像
因为在另一层的下方或上方没有“可见”层,所以我想定义“可点击区域”来精确显示可见层。最聪明的方法是什么,或者有更优雅的解决方案吗?我可以想出三种解决方案:
paintComponent
和绘制Polygon
s。你必须有他们的参考资料。稍后-在鼠标单击时,您将必须在其中获得形状的组件和鼠标点。然后对每个形状迭代调用contains
。使用此解决方案将失去布局支持JLabel
-迭代JLabel
sJLabel
,并将引用添加到相邻的六角组件。当鼠标点击启动时,您检查此组件是否应“捕获”此事件。如果不是,则将事件“转发”到相应的组件我可以想出三种解决这个问题的办法:
paintComponent
和绘制Polygon
s。你必须有他们的参考资料。稍后-在鼠标单击时,您将必须在其中获得形状的组件和鼠标点。然后对每个形状迭代调用contains
。使用此解决方案将失去布局支持JLabel
-迭代JLabel
sJLabel
,并将引用添加到相邻的六角组件。当鼠标点击启动时,您检查此组件是否应“捕获”此事件。如果不是,则将事件“转发”到相应的组件六边形中填充了不同的图像,因此不仅包含黑线,我还会尝试其他解决方案。谢谢,我会在测试时给出反馈。我尝试了你的第三个建议,效果非常好!再次感谢。六边形中充满了不同的图像,所以不要只包含黑线,我会尝试其他解决方案。谢谢,我会在测试时给出反馈。我尝试了你的第三个建议,效果非常好!再次感谢。