новичок программист.
Я делаю программу, которая выводит введенные пользователем уравнения в декартовой системе координат. В настоящий момент у меня возникают некоторые проблемы, позволяющие пользователю свободно перемещать представление в координате. В настоящее время с mouseDragged пользователь может перетащить вид вокруг бит, но как только пользователь освободит мышь и попытается снова переместить представление, начало координат вернется в текущую позицию курсора мыши. Каков наилучший способ свободно перемещать пользователя? Спасибо заранее!
Вот код для области рисования.
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import javax.swing.JPanel;
public class DrawingArea extends JPanel implements MouseMotionListener {
private final int x_panel = 350; // width of the panel
private final int y_panel = 400; // height of the panel
private int div_x; // width of one square
private int div_y; // height of one square
private int real_y;
private int real_x;
private Point origin; // the origin of the coordinate
private Point temp; // temporary point
private static int y = 0;
private static int x = 0;
DrawingArea() {
    setBackground(Color.WHITE);
    real_x = x_panel;
    real_y = y_panel;
    setDivisionDefault();
    setOrigin(new Point((real_x / 2), (real_y / 2)));
    setSize(x_panel, y_panel);
    addMouseMotionListener(this);
}
DrawingArea(Point origin, Point destination) {
     this.origin = origin;
     this.destination = destination;
     panel = new JPanel();
     panel.setSize(destination.x, destination.y);
     panel.setLocation(origin);
     this.panel.setBackground(Color.red);
     panel.setLayout(null);
}
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D line = (Graphics2D) g;
    temp = new Point(origin.x, origin.y);
    line.setColor(Color.red);
    drawHelpLines(line);
    line.setColor(Color.blue);
    drawOrigin(line);
    line.setColor(Color.green);
    for (int i = 0; i < 100; i++) { // This is a test line
        //temp = this.suora();
        temp.x++;
        temp.y++;
        line.drawLine(temp.x, temp.y, temp.x, temp.y);
    }
}
public void setOrigin(Point p) {
    origin = p;
}
public void drawOrigin(Graphics2D line) {
    line.drawLine(origin.x, 0, origin.x, y_panel);
    line.drawLine(0, origin.y, x_panel, origin.y);
}
public void drawHelpLines(Graphics2D line) {
    int xhelp= origin.x;
    int yhelp= origin.y;
    for (int i = 0; i < 20; i++) {
        xhelp+= div_x;
        line.drawLine(xhelp, 0, xhelp, y_panel);
    }
    xhelp= origin.x;
    for (int i = 0; i < 20; i++) {
        xhelp-= div_x;
        line.drawLine(xhelp, 0, xhelp, y_panel);
    }
    for (int i = 0; i < 20; i++) {
        yhelp-= div_y;
        line.drawLine(0, yhelp,x_panel, yhelp);
    }
    yhelp= origin.y;
    for (int i = 0; i < 20; i++) {
        yhelp+= div_y;
        line.drawLine(0, yhelp, x_panel, yhelp);
    }
}
public void setDivisionDefault() {
    div_x = 20;
    div_y = 20;
}
@Override
public void mouseDragged(MouseEvent e) {
    //Point temp_point = new Point(mouse_x,mouse_y);
    Point coords = new Point(e.getX(), e.getY());
    setOrigin(coords);
    repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
}
}

