Move and scale graphical objects with a mouse on the panel : Tranformation « 2D Graphics « Java Tutorial






import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.geom.Rectangle2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MouseMoveScale extends JPanel {
  private Rectangle2D.Float myRect = new Rectangle2D.Float(50, 50, 50, 50);

  MovingAdapter ma = new MovingAdapter();

  public MouseMoveScale() {
    addMouseMotionListener(ma);
    addMouseListener(ma);
    addMouseWheelListener(new ScaleHandler());
  }

  public void paint(Graphics g) {
    super.paint(g);

    Graphics2D g2d = (Graphics2D) g;

    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    g2d.setColor(new Color(0, 0, 200));
    g2d.fill(myRect);
  }

  class MovingAdapter extends MouseAdapter {

    private int x;

    private int y;

    public void mousePressed(MouseEvent e) {
      x = e.getX();
      y = e.getY();
    }

    public void mouseDragged(MouseEvent e) {

      int dx = e.getX() - x;
      int dy = e.getY() - y;

      if (myRect.getBounds2D().contains(x, y)) {
        myRect.x += dx;
        myRect.y += dy;
        repaint();
      }
      x += dx;
      y += dy;
    }
  }

  class ScaleHandler implements MouseWheelListener {
    public void mouseWheelMoved(MouseWheelEvent e) {

      int x = e.getX();
      int y = e.getY();

      if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) {

        if (myRect.getBounds2D().contains(x, y)) {
          float amount = e.getWheelRotation() * 5f;
          myRect.width += amount;
          myRect.height += amount;
          repaint();
        }
      }
    }
  }

  public static void main(String[] args) {
    JFrame frame = new JFrame("Moving and Scaling");
    MouseMoveScale m = new MouseMoveScale();
    m.setDoubleBuffered(true);
    frame.add(m);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}








16.3.Tranformation
16.3.1.Transform LabTransform Lab
16.3.2.Coordinate Translation.
16.3.3.Rotation and coordinate translation
16.3.4.Rotate a line of character (String)
16.3.5.Scaling an object
16.3.6.Tranformation with AffineTransform.getScaleInstanceTranformation with AffineTransform.getScaleInstance
16.3.7.Tranformation with AffineTransform.getTranslateInstanceTranformation with AffineTransform.getTranslateInstance
16.3.8.Tranformation with AffineTransform.getShearInstanceTranformation with AffineTransform.getShearInstance
16.3.9.Calculate Rotation Transform with Math.PICalculate Rotation Transform with Math.PI
16.3.10.Rotating image using Java 2D AffineTransform class
16.3.11.Translate and rotate all objects
16.3.12.Move and scale graphical objects with a mouse on the panel
16.3.13.Rotates a shape about the specified coordinates.