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

时间:2012-06-06 23:49:17

标签: java swing user-interface overlap imageicon

我有几个JLabel,每个都有一个像这样的ImageIcon:

ImageIcon icon = new ImageIcon("path/to/image.jpg");
JLabel label = new JLabel(icon);

这些图像是。六角形的.PNG。边缘"外面"六边形(存在的冗余部分使用矩形画布)是透明的。 JLabels,图像,按in this example排序,因此总有三个干扰图像。

因为没有"可见"在另一个下方或上方的层,我想定义"可点击区域"准确地说是可见层。最聪明的方法是什么,或者是否有更优雅的解决方案?

1 个答案:

答案 0 :(得分:3)

我可以为这个问题考虑三种解决方案:

  1. 如果您的六角形只是“黑线” - 您可以实现paintComponent并绘制Polygon s。您必须拥有对它们的引用。稍后 - 在鼠标单击时,您必须在其中获取形状的组件和鼠标点。然后迭代为每个形状调用contains的形状。使用此解决方案将失去布局支持。
  2. 实施GlassPane /图层并将鼠标事件调度到适当的JLabel - 迭代JLabel
  3. 这是最不可取的(因为紧耦合) - 扩展JLabel并添加对相邻六边形组件的引用。当点击鼠标时,检查该组件是否应该“捕获”此事件。如果不是 - 您将事件“转发”到适当的组件。