2015-09-05 5 views
1

Я использую класс HeatMap Java (по: http://www.mbeckler.org/heatMap/) для создания тепловой карты для моей матрицы. Я хочу реализовать mouselistener, который будет отображать координатную позицию (x, y), когда мышь находится в некотором положении на изображении (Heatmap). На данный момент я реализовал основной прослушиватель мыши, который показывает сообщение, когда указатель мыши находится в панели HeatMap и когда он находится за его пределами. Но проблема заключается в том, что фактическая тепловая карта на панели HeatMap меньше, чем панель Heatmap, а также включает в себя легенду. Я хочу только отображать информацию о координатах, когда указатель мыши наводится на фактическую тепловую карту, а не на область, окружающую тепловую карту. Может ли кто-нибудь помочь мне сделать это?MouseListener для HeatMap в Java HeatMap Panel

enter image description here

Ниже приведена часть кода, который реализует 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"); 
     } 
+0

, пожалуйста, напишите полное изображение и сообщите нам на этом изображении, какая область включена в панель, которую вы слушаете через прослушиватель мыши. – afzalex

+0

Я обновил изображение сейчас. Панель Heatmap - это полное отражение, выделенное красным цветом, а фактическое HeatMap - с черной рамкой. Я хочу, чтобы mouseListener работал только в фактической HeatMap, а не в пробеле, который виден вне HeatMap на красной границе. – novicegeek

ответ

1

Итак, я посмотрел исходный код для 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.

+0

Я понял раздел исходного кода HeatMap, в котором указаны размеры фактической HeatMap, но как это сделать конвертировать это, чтобы получить координаты? Должен ли я отправлять эти параметры 31,31drawImage в setCoordinateBounds? Извините, я немного смущен. – novicegeek

+0

Я использовал следующие параметры в setCoordinateBounds intensityMap.setCoordinateBounds (31, intensityMap.getWidth(), 31, intensityMap.getWidth()); но все же это didnot работы. – novicegeek

+0

Теперь это сработало! – novicegeek