Java 热图面板中热图的 MouseListener

MouseListener for HeatMap in Java HeatMap Panel

我正在使用 Java class 热图(作者:http://www.mbeckler.org/heatMap/)为我的矩阵生成热图。我想实现一个 mouselistener,当鼠标位于图像(热图)上的某个位置时,它将显示坐标位置 (x,y)。目前我已经实现了一个基本的鼠标侦听器,它会在鼠标指针位于 HeatMap 面板中和鼠标指针位于面板之外时显示一条消息。但是,问题是,HeatMap 面板中的实际热图比 heatmap 面板小,并且还包含一个图例。我只想在鼠标指针悬停在实际热图上而不是热图周围区域时显示坐标信息。有人可以帮我做这个吗?

下面是实现 mouseListener 和 HeatMap 面板的部分代码。

public class GUI extends JFrame implements MouseListener {
    intensityMap = new HeatMap(dataMatrix, false,HeatMap.Gradient.GRADIENT_Rainbow);
                        intensityMap.setDrawLegend(true);
                        intensityMap.addMouseListener(this);
}

    public void mouseEntered(MouseEvent e) {
            System.out.println("Mouse entered");
        }

        public void mouseExited(MouseEvent e) {
            System.out.println("Mouse exited");
        }

所以,我查看了 HeatMap 的源代码。看来他做到了

  public void paintComponent(Graphics g){
    ...
    g2d.drawImage(bufferedImage,
                  31, 31,
                  width - 30,
                  height - 30,
                  0, 0,
                  bufferedImage.getWidth(), bufferedImage.getHeight(),
                  null);
    ...
    if (drawLegend) {
        g2d.drawRect(width - 20, 30, 10, height - 60);
        ...
    }

所以这可以让您了解组件中的位置。

在鼠标监听器中,可以做

public class GUI extends JFrame implements MouseListener, MouseMotionListener {
   public void mouseMoved(MouseEvent e){
      // e.getPoint().x, e.getPoint().y
   }
   public void mouseDragged(MouseEvent e){}
}

并在构造函数中做

this.addMouseMotionListener(this);

获取坐标,然后您可以使用这些数字(30/31 等)和您发送到 setCoordinateBounds.

的值进行转换