Java 确定单击了三个部分重叠的图像中的哪一个

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是按顺序排列的,因此总是有三个相互干扰的图像 因为在另一层的下方或上方没有“可见”层,所以我想定义“可点击区域”来精确显示可见层。最聪明的方法是什么,或者有更

我有几个JLabel,每个都有一个图像图标,如下所示:

ImageIcon icon = new ImageIcon("path/to/image.jpg");
JLabel label = new JLabel(icon);
这些图像是六边形的.png。六边形“外部”的边(存在的冗余部分使用矩形画布)是透明的。 因此,图像的jlabel是按顺序排列的,因此总是有三个相互干扰的图像


因为在另一层的下方或上方没有“可见”层,所以我想定义“可点击区域”来精确显示可见层。最聪明的方法是什么,或者有更优雅的解决方案吗?

我可以想出三种解决方案:

  • 如果您的六边形形状只是“黑线”-您可以实现
    paintComponent
    和绘制
    Polygon
    s。你必须有他们的参考资料。稍后-在鼠标单击时,您将必须在其中获得形状的组件和鼠标点。然后对每个形状迭代调用
    contains
    。使用此解决方案将失去布局支持
  • 执行GlassPane/layer并将鼠标事件分派到相应的
    JLabel
    -迭代
    JLabel
    s
  • 这是最不可取的(因为紧密耦合)-扩展
    JLabel
    ,并将引用添加到相邻的六角组件。当鼠标点击启动时,您检查此组件是否应“捕获”此事件。如果不是,则将事件“转发”到相应的组件

  • 我可以想出三种解决这个问题的办法:

  • 如果您的六边形形状只是“黑线”-您可以实现
    paintComponent
    和绘制
    Polygon
    s。你必须有他们的参考资料。稍后-在鼠标单击时,您将必须在其中获得形状的组件和鼠标点。然后对每个形状迭代调用
    contains
    。使用此解决方案将失去布局支持
  • 执行GlassPane/layer并将鼠标事件分派到相应的
    JLabel
    -迭代
    JLabel
    s
  • 这是最不可取的(因为紧密耦合)-扩展
    JLabel
    ,并将引用添加到相邻的六角组件。当鼠标点击启动时,您检查此组件是否应“捕获”此事件。如果不是,则将事件“转发”到相应的组件

  • 六边形中填充了不同的图像,因此不仅包含黑线,我还会尝试其他解决方案。谢谢,我会在测试时给出反馈。我尝试了你的第三个建议,效果非常好!再次感谢。六边形中充满了不同的图像,所以不要只包含黑线,我会尝试其他解决方案。谢谢,我会在测试时给出反馈。我尝试了你的第三个建议,效果非常好!再次感谢。