0

我有几个 JLabel,每个都有一个 ImageIcon,如下所示:

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

这些图像是六边形的 .PNG。六边形“外部”的边缘(存在的冗余部分使用矩形画布)是透明的。JLabel,即图像,按照本例中的顺序排列,因此始终存在三个干扰图像。

由于在另一个之下或之上没有“可见”层,我想将“可点击区域”定义为完全可见层。最聪明的方法是什么,或者是否有更优雅的解决方案?

4

1 回答 1

3

对于这个问题,我可以想到三个解决方案:

  1. 如果您的六边形只是“黑线” - 您可以实现paintComponent并绘制Polygons. 您将必须参考它们。稍后 - 在鼠标单击时,您将必须在其中获取形状的组件和鼠标点。然后迭代调用contains它们中的每一个的形状。使用此解决方案您将失去布局支持。
  2. 实现 GlassPane/layer 并将鼠标事件分派到适当的位置JLabel- 遍历JLabels
  3. 这将是最不可取的(因为紧密耦合) - 扩展JLabel并添加对相邻六边形组件的引用。当鼠标点击被触发时,你检查这个组件是否应该“捕捉”这个事件。如果不是 - 您将事件“转发”到适当的组件。
于 2012-06-07T00:36:17.503 回答