title: Java: mouseDragged and moving around in a graphical interface
body: <p>newbie programmer here.</p>
  
  <p>I'm making a program that renders user-inputted equations in a Cartesian coordinate system. At the moment I'm having some issues with letting the user move the view around freely in the coordinate. Currently with mouseDragged the user can drag the view around a bit, but once the user releases the mouse and tries to move the view again the origin snaps back to the current position of the mouse cursor. What is the best way to let the user move around freely? Thanks in advance!</p>
  
  <p>Here's the code for the drawing area.</p>
  
  <pre><code>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 &lt; 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 &lt; 20; i++) {
          xhelp+= div_x;
          line.drawLine(xhelp, 0, xhelp, y_panel);
      }
      xhelp= origin.x;
      for (int i = 0; i &lt; 20; i++) {
          xhelp-= div_x;
  
          line.drawLine(xhelp, 0, xhelp, y_panel);
      }
  
      for (int i = 0; i &lt; 20; i++) {
          yhelp-= div_y;
          line.drawLine(0, yhelp,x_panel, yhelp);
      }
      yhelp= origin.y;
      for (int i = 0; i &lt; 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) {
  }
  }
  </code></pre>