MouseWheelListener и MouseMotionListener не работают вместе - PullRequest
0 голосов
/ 28 августа 2018

У меня есть два слушателя, Одним из них является MouseWheelListener, который увеличивает изображение при прокрутке колеса.

jLabel1.addMouseWheelListener(new MouseWheelListener() {
        public void mouseWheelMoved(MouseWheelEvent e) {
            int notches = e.getWheelRotation();
            double temp = zoom - (notches * 0.2);
            // minimum zoom factor is 1.0
            temp = Math.max(temp, 1.0);
            if (temp != zoom) {
                zoom = temp;
                Map.resizeImage(jLabel1,zoom);
            }
        }
    });

Когда я увеличиваю изображение, мне нужно иметь возможность перетаскивать изображение с помощью прослушивателя с перетаскиванием, я создал прослушиватель и зарегистрировал его в jScrollPanel следующим образом:

    HandScrollListener scrollListener = new HandScrollListener(jLabel1);
    jScrollPane1.getViewport().addMouseMotionListener(scrollListener);
    jScrollPane1.getViewport().addMouseListener(scrollListener);    

Проблема в том, что если я добавляю первого слушателя, который увеличивает мое изображение, второй слушатель генерируется, но не выполняет свою функцию перетаскивания. Если я удаляю его и увеличиваю изображение с помощью кнопки, то генерируется второй слушатель, а также выполняет функцию перетаскивания.

Вот HandScrollListener, он работает, когда слушатель для увеличения не добавлен.

public class HandScrollListener extends MouseAdapter
{
Cursor defCursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
Cursor hndCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
Point pp = new Point();
public void mouseDragged(final MouseEvent e)
{

    JViewport vport = (JViewport)e.getSource();
    Point cp = e.getPoint();
    Point vp = vport.getViewPosition();
    vp.translate(pp.x-cp.x, pp.y-cp.y);
    image.scrollRectToVisible(new Rectangle(vp, vport.getSize()));
    pp.setLocation(cp);
}

public void mousePressed(MouseEvent e)
{
    image.setCursor(hndCursor);
    pp.setLocation(e.getPoint());
}

public void mouseReleased(MouseEvent e)
{
    image.setCursor(defCursor);
    image.repaint();
}
}
...