Я создаю приложение Java, которое позволит пользователям просматривать изображения и перемещать изображение с помощью мыши. Для реализации панорамирования изображения я использую комбинацию событий mouseClicked
и mouseDragged
с помощью JViewports. Основная часть кода находится в методе mouseDragged.
public void mouseDragged(MouseEvent e, WindowWrapper w) {
final JViewport vp = someFieldViewPort;
//Getting the point that the mouse is dragged to to
Point cp = e.getPoint();
final Point vPoint = vp.getViewPosition();
//I found the image went off the content to show the white border so I included this
// Here pp is a field that I sent when the mouse is clicked in a separate method
if(vPoint.getX()+pp.x-cp.x>=0 & vPoint.getY()+pp.y-cp.y>=0)
vPoint.translate(pp.x-cp.x, pp.y-cp.y);
else if(vPoint.getX()+pp.x-cp.x>=0 & vPoint.getY()+pp.y-cp.y<0)
vPoint.translate(pp.x-cp.x, (int) -vPoint.getY());
else if(vPoint.getX()+pp.x-cp.x<0 & vPoint.getY()+pp.y-cp.y>=0)
vPoint.translate((int) -vPoint.getX(), pp.y-cp.y);
//finally set the position of the viewport
vp.setViewPosition(vPoint);
vp.repaint();
}
Хотя это работает, я чувствую, что должен быть более простой способ сделать все это. Если не все это, можно ли заменить код, предотвращающий переход окна просмотра от изображения к окружающей границе?