2014-11-22 2 views
0

Я использую JPanel, чтобы нарисовать квадрат на экране. Когда я использую MouseDragged, он работает нормально и идет туда, где я хочу, почти. Каждый раз, когда я нажимаю на квадрат, квадрат автоматически перемещается, а верхний левый угол идет прямо под мышью. Как мне сделать так, чтобы квадрат не заменил себя и остается прямо под мышью? Спасибо за любую помощь.Пробел между мышью на экране и JPanel на Dragndrop

ответ

1

Учитывайте разницу между top-left координаты компонента, который вы перемещение и mousePressed местоположение.
И когда вы получаете новое положение, просто вычтите эту разницу.
Здесь я попытался объяснить это путем кодирования. Пусть myJPanel будет компонент, который вы хотите двигаться. Тогда вот MouseAdapter, который может сработать для вас. Новое положение сохраняется в newPosition переменной.

new MouseAdapter(){ 
    int diffx = 0, diffy = 0; 
    public void mousePressed(MouseEvent e) { 
     Point topLeft = myJPanel.getLocation(); 
     Point mouseDn = e.getPoint(); 
     diffx = mouseDn.x - topLeft.x; 
     diffy = mouseDn.y - topLeft.y; 
    } 

    public void mouseDragged(MouseEvent e) { 
     Point mouseDr = e.getPoint(); 
     int newX = mouseDr.x - diffx; 
     int newY = mouseDr.y - diffy; 
     Point newPosition = new Point(newX, newY); 
    } 
}; 
Смежные вопросы