У меня есть два слушателя,
Одним из них является 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();
}
}