<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2F2D_Graphics%2FMouse_Draw</id>
		<title>Java Tutorial/2D Graphics/Mouse Draw - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2F2D_Graphics%2FMouse_Draw"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Mouse_Draw&amp;action=history"/>
		<updated>2026-04-23T04:24:21Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Mouse_Draw&amp;diff=3476&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Mouse_Draw&amp;diff=3476&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:44, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Mouse_Draw&amp;diff=3477&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Mouse_Draw&amp;diff=3477&amp;oldid=prev"/>
				<updated>2010-05-31T15:25:01Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Draws a small dot where the user clicks the mouse ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Also reports the x, y location of the cursor and of the most recent mouse click.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Sun grants you (&amp;quot;Licensee&amp;quot;) a non-exclusive, royalty free, license to use,&lt;br /&gt;
 * modify and redistribute this software in source and binary code form,&lt;br /&gt;
 * provided that i) this copyright notice and license appear on all copies of&lt;br /&gt;
 * the software; and ii) Licensee does not utilize the software in a manner&lt;br /&gt;
 * which is disparaging to Sun.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY&lt;br /&gt;
 * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR&lt;br /&gt;
 * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE&lt;br /&gt;
 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING&lt;br /&gt;
 * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS&lt;br /&gt;
 * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,&lt;br /&gt;
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER&lt;br /&gt;
 * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF&lt;br /&gt;
 * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE&lt;br /&gt;
 * POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is not designed or intended for use in on-line control of&lt;br /&gt;
 * aircraft, air traffic, aircraft navigation or aircraft communications; or in&lt;br /&gt;
 * the design, construction, operation or maintenance of any nuclear&lt;br /&gt;
 * facility. Licensee represents and warrants that it will not use or&lt;br /&gt;
 * redistribute the Software for such purposes.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.ruponent;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Insets;&lt;br /&gt;
import java.awt.Point;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import javax.swing.BorderFactory;&lt;br /&gt;
import javax.swing.BoxLayout;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.event.MouseInputListener;&lt;br /&gt;
public class CoordinatesDemo {&lt;br /&gt;
  private JLabel label;&lt;br /&gt;
  private Point clickPoint, cursorPoint;&lt;br /&gt;
  private void buildUI(Container container) {&lt;br /&gt;
    container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));&lt;br /&gt;
    CoordinateArea coordinateArea = new CoordinateArea(this);&lt;br /&gt;
    container.add(coordinateArea);&lt;br /&gt;
    label = new JLabel();&lt;br /&gt;
    resetLabel();&lt;br /&gt;
    container.add(label);&lt;br /&gt;
    coordinateArea.setAlignmentX(Component.LEFT_ALIGNMENT);&lt;br /&gt;
    label.setAlignmentX(Component.LEFT_ALIGNMENT); // redundant&lt;br /&gt;
  }&lt;br /&gt;
  public void updateCursorLocation(int x, int y) {&lt;br /&gt;
    if (x &amp;lt; 0 || y &amp;lt; 0) {&lt;br /&gt;
      cursorPoint = null;&lt;br /&gt;
      updateLabel();&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    if (cursorPoint == null) {&lt;br /&gt;
      cursorPoint = new Point();&lt;br /&gt;
    }&lt;br /&gt;
    cursorPoint.x = x;&lt;br /&gt;
    cursorPoint.y = y;&lt;br /&gt;
    updateLabel();&lt;br /&gt;
  }&lt;br /&gt;
  public void updateClickPoint(Point p) {&lt;br /&gt;
    clickPoint = p;&lt;br /&gt;
    updateLabel();&lt;br /&gt;
  }&lt;br /&gt;
  public void resetLabel() {&lt;br /&gt;
    cursorPoint = null;&lt;br /&gt;
    updateLabel();&lt;br /&gt;
  }&lt;br /&gt;
  protected void updateLabel() {&lt;br /&gt;
    String text = &amp;quot;&amp;quot;;&lt;br /&gt;
    if ((clickPoint == null) &amp;amp;&amp;amp; (cursorPoint == null)) {&lt;br /&gt;
      text = &amp;quot;Click or move the cursor within the framed area.&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      if (clickPoint != null) {&lt;br /&gt;
        text += &amp;quot;The last click was at (&amp;quot; + clickPoint.x + &amp;quot;, &amp;quot; + clickPoint.y + &amp;quot;). &amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
      if (cursorPoint != null) {&lt;br /&gt;
        text += &amp;quot;The cursor is at (&amp;quot; + cursorPoint.x + &amp;quot;, &amp;quot; + cursorPoint.y + &amp;quot;). &amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    label.setText(text);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;CoordinatesDemo&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    CoordinatesDemo controller = new CoordinatesDemo();&lt;br /&gt;
    controller.buildUI(frame.getContentPane());&lt;br /&gt;
    frame.pack();&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public static class CoordinateArea extends JComponent implements MouseInputListener {&lt;br /&gt;
    Point point = null;&lt;br /&gt;
    CoordinatesDemo controller;&lt;br /&gt;
    Dimension preferredSize = new Dimension(400, 75);&lt;br /&gt;
    Color gridColor;&lt;br /&gt;
    public CoordinateArea(CoordinatesDemo controller) {&lt;br /&gt;
      this.controller = controller;&lt;br /&gt;
      // Add a border of 5 pixels at the left and bottom,&lt;br /&gt;
      // and 1 pixel at the top and right.&lt;br /&gt;
      setBorder(BorderFactory.createMatteBorder(1, 5, 5, 1, Color.RED));&lt;br /&gt;
      addMouseListener(this);&lt;br /&gt;
      addMouseMotionListener(this);&lt;br /&gt;
      setBackground(Color.WHITE);&lt;br /&gt;
      setOpaque(true);&lt;br /&gt;
    }&lt;br /&gt;
    public Dimension getPreferredSize() {&lt;br /&gt;
      return preferredSize;&lt;br /&gt;
    }&lt;br /&gt;
    protected void paintComponent(Graphics g) {&lt;br /&gt;
      // Paint background if we&amp;quot;re opaque.&lt;br /&gt;
      if (isOpaque()) {&lt;br /&gt;
        g.setColor(getBackground());&lt;br /&gt;
        g.fillRect(0, 0, getWidth(), getHeight());&lt;br /&gt;
      }&lt;br /&gt;
      // Paint 20x20 grid.&lt;br /&gt;
      g.setColor(Color.GRAY);&lt;br /&gt;
      drawGrid(g, 20);&lt;br /&gt;
      // If user has chosen a point, paint a small dot on top.&lt;br /&gt;
      if (point != null) {&lt;br /&gt;
        g.setColor(getForeground());&lt;br /&gt;
        g.fillRect(point.x - 3, point.y - 3, 7, 7);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Draws a 20x20 grid using the current color.&lt;br /&gt;
    private void drawGrid(Graphics g, int gridSpace) {&lt;br /&gt;
      Insets insets = getInsets();&lt;br /&gt;
      int firstX = insets.left;&lt;br /&gt;
      int firstY = insets.top;&lt;br /&gt;
      int lastX = getWidth() - insets.right;&lt;br /&gt;
      int lastY = getHeight() - insets.bottom;&lt;br /&gt;
      // Draw vertical lines.&lt;br /&gt;
      int x = firstX;&lt;br /&gt;
      while (x &amp;lt; lastX) {&lt;br /&gt;
        g.drawLine(x, firstY, x, lastY);&lt;br /&gt;
        x += gridSpace;&lt;br /&gt;
      }&lt;br /&gt;
      // Draw horizontal lines.&lt;br /&gt;
      int y = firstY;&lt;br /&gt;
      while (y &amp;lt; lastY) {&lt;br /&gt;
        g.drawLine(firstX, y, lastX, y);&lt;br /&gt;
        y += gridSpace;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Methods required by the MouseInputListener interface.&lt;br /&gt;
    public void mouseClicked(MouseEvent e) {&lt;br /&gt;
      int x = e.getX();&lt;br /&gt;
      int y = e.getY();&lt;br /&gt;
      if (point == null) {&lt;br /&gt;
        point = new Point(x, y);&lt;br /&gt;
      } else {&lt;br /&gt;
        point.x = x;&lt;br /&gt;
        point.y = y;&lt;br /&gt;
      }&lt;br /&gt;
      controller.updateClickPoint(point);&lt;br /&gt;
      repaint();&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseMoved(MouseEvent e) {&lt;br /&gt;
      controller.updateCursorLocation(e.getX(), e.getY());&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseExited(MouseEvent e) {&lt;br /&gt;
      controller.resetLabel();&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseReleased(MouseEvent e) {&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseEntered(MouseEvent e) {&lt;br /&gt;
    }&lt;br /&gt;
    public void mousePressed(MouseEvent e) {&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseDragged(MouseEvent e) {&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Mouse drag and draw ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.AlphaComposite;&lt;br /&gt;
import java.awt.BasicStroke;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Point;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.event.MouseAdapter;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.awt.event.MouseMotionAdapter;&lt;br /&gt;
import java.awt.geom.Line2D;&lt;br /&gt;
import java.awt.geom.Rectangle2D;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class DrawingBoardWithMatrix extends JFrame {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new DrawingBoardWithMatrix();&lt;br /&gt;
  }&lt;br /&gt;
  public DrawingBoardWithMatrix() {&lt;br /&gt;
    this.setSize(300, 300);&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.add(new PaintSurface(), BorderLayout.CENTER);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  private class PaintSurface extends JComponent {&lt;br /&gt;
    ArrayList&amp;lt;Shape&amp;gt; shapes = new ArrayList&amp;lt;Shape&amp;gt;();&lt;br /&gt;
    Point startDrag, endDrag;&lt;br /&gt;
    public PaintSurface() {&lt;br /&gt;
      this.addMouseListener(new MouseAdapter() {&lt;br /&gt;
        public void mousePressed(MouseEvent e) {&lt;br /&gt;
          startDrag = new Point(e.getX(), e.getY());&lt;br /&gt;
          endDrag = startDrag;&lt;br /&gt;
          repaint();&lt;br /&gt;
        }&lt;br /&gt;
        public void mouseReleased(MouseEvent e) {&lt;br /&gt;
          Shape r = makeRectangle(startDrag.x, startDrag.y, e.getX(), e.getY());&lt;br /&gt;
          shapes.add(r);&lt;br /&gt;
          startDrag = null;&lt;br /&gt;
          endDrag = null;&lt;br /&gt;
          repaint();&lt;br /&gt;
        }&lt;br /&gt;
      });&lt;br /&gt;
      this.addMouseMotionListener(new MouseMotionAdapter() {&lt;br /&gt;
        public void mouseDragged(MouseEvent e) {&lt;br /&gt;
          endDrag = new Point(e.getX(), e.getY());&lt;br /&gt;
          repaint();&lt;br /&gt;
        }&lt;br /&gt;
      });&lt;br /&gt;
    }&lt;br /&gt;
    private void paintBackground(Graphics2D g2){&lt;br /&gt;
      g2.setPaint(Color.LIGHT_GRAY);&lt;br /&gt;
      for (int i = 0; i &amp;lt; getSize().width; i += 10) {&lt;br /&gt;
        Shape line = new Line2D.Float(i, 0, i, getSize().height);&lt;br /&gt;
        g2.draw(line);&lt;br /&gt;
      }&lt;br /&gt;
      for (int i = 0; i &amp;lt; getSize().height; i += 10) {&lt;br /&gt;
        Shape line = new Line2D.Float(0, i, getSize().width, i);&lt;br /&gt;
        g2.draw(line);&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
    }&lt;br /&gt;
    public void paint(Graphics g) {&lt;br /&gt;
      Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
      paintBackground(g2);&lt;br /&gt;
      Color[] colors = { Color.YELLOW, Color.MAGENTA, Color.CYAN , Color.RED, Color.BLUE, Color.PINK};&lt;br /&gt;
      int colorIndex = 0;&lt;br /&gt;
      g2.setStroke(new BasicStroke(2));&lt;br /&gt;
      g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.50f));&lt;br /&gt;
      for (Shape s : shapes) {&lt;br /&gt;
        g2.setPaint(Color.BLACK);&lt;br /&gt;
        g2.draw(s);&lt;br /&gt;
        g2.setPaint(colors[(colorIndex++) % 6]);&lt;br /&gt;
        g2.fill(s);&lt;br /&gt;
      }&lt;br /&gt;
      if (startDrag != null &amp;amp;&amp;amp; endDrag != null) {&lt;br /&gt;
        g2.setPaint(Color.LIGHT_GRAY);&lt;br /&gt;
        Shape r = makeRectangle(startDrag.x, startDrag.y, endDrag.x, endDrag.y);&lt;br /&gt;
        g2.draw(r);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    private Rectangle2D.Float makeRectangle(int x1, int y1, int x2, int y2) {&lt;br /&gt;
      return new Rectangle2D.Float(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), Math.abs(y1 - y2));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Save Your Drawing To a File ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Panel;&lt;br /&gt;
import java.awt.Point;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.awt.event.MouseListener;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.ObjectInputStream;&lt;br /&gt;
import java.io.ObjectOutputStream;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class SaveYourDrawingToFile extends JFrame implements MouseListener, ActionListener {&lt;br /&gt;
  List&amp;lt;Point&amp;gt; displayList = new ArrayList&amp;lt;Point&amp;gt;();&lt;br /&gt;
  String pathname = &amp;quot;data.dat&amp;quot;;&lt;br /&gt;
  JButton clearBtn = new JButton(&amp;quot;Clear&amp;quot;);&lt;br /&gt;
  JButton saveBtn = new JButton(&amp;quot;Save&amp;quot;);&lt;br /&gt;
  JButton restoreBtn = new JButton(&amp;quot;Restore&amp;quot;);&lt;br /&gt;
  JButton quitBtn = new JButton(&amp;quot;Quit&amp;quot;);&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    SaveYourDrawingToFile that = new SaveYourDrawingToFile();&lt;br /&gt;
    that.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public SaveYourDrawingToFile() {&lt;br /&gt;
    addMouseListener(this);&lt;br /&gt;
    setLayout(new BorderLayout());&lt;br /&gt;
    Panel pan = new Panel();&lt;br /&gt;
    clearBtn.addActionListener(this);&lt;br /&gt;
    pan.add(clearBtn);&lt;br /&gt;
    saveBtn.addActionListener(this);&lt;br /&gt;
    pan.add(saveBtn);&lt;br /&gt;
    restoreBtn.addActionListener(this);&lt;br /&gt;
    pan.add(restoreBtn);&lt;br /&gt;
    quitBtn.addActionListener(this);&lt;br /&gt;
    pan.add(quitBtn);&lt;br /&gt;
    add(&amp;quot;North&amp;quot;, pan);&lt;br /&gt;
    setSize(350, 200);&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    g.setColor(Color.white);&lt;br /&gt;
    g.fillRect(0, 0, getSize().width, getSize().height);&lt;br /&gt;
    g.setColor(Color.black);&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    while (i &amp;lt; displayList.size()) {&lt;br /&gt;
      Point p0 = (Point) (displayList.get(i++));&lt;br /&gt;
      Point p1 = (Point) (displayList.get(i++));&lt;br /&gt;
      int x = Math.min(p0.x, p1.x);&lt;br /&gt;
      int y = Math.min(p0.y, p1.y);&lt;br /&gt;
      int w = Math.abs(p0.x - p1.x);&lt;br /&gt;
      int h = Math.abs(p0.y - p1.y);&lt;br /&gt;
      g.drawRect(x, y, w, h);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void mousePressed(MouseEvent e) {&lt;br /&gt;
    Point p = new Point(e.getX(), e.getY());&lt;br /&gt;
    displayList.add(p);&lt;br /&gt;
  }&lt;br /&gt;
  public void mouseReleased(MouseEvent e) {&lt;br /&gt;
    Point p = new Point(e.getX(), e.getY());&lt;br /&gt;
    displayList.add(p);&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&lt;br /&gt;
  public void mouseClicked(MouseEvent e) {&lt;br /&gt;
  }&lt;br /&gt;
  public void mouseEntered(MouseEvent e) {&lt;br /&gt;
  }&lt;br /&gt;
  public void mouseExited(MouseEvent e) {&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    if (e.getSource() == clearBtn) {&lt;br /&gt;
      displayList = new Vector();&lt;br /&gt;
      repaint();&lt;br /&gt;
    } else if (e.getSource() == saveBtn) {&lt;br /&gt;
      try {&lt;br /&gt;
        FileOutputStream fos = new FileOutputStream(pathname);&lt;br /&gt;
        ObjectOutputStream oos = new ObjectOutputStream(fos);&lt;br /&gt;
        oos.writeObject(displayList);&lt;br /&gt;
        oos.flush();&lt;br /&gt;
        oos.close();&lt;br /&gt;
        fos.close();&lt;br /&gt;
      } catch (Exception ex) {&lt;br /&gt;
        System.out.println(&amp;quot;Trouble writing display list vector&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    } else if (e.getSource() == restoreBtn) {&lt;br /&gt;
      try {&lt;br /&gt;
        FileInputStream fis = new FileInputStream(pathname);&lt;br /&gt;
        ObjectInputStream ois = new ObjectInputStream(fis);&lt;br /&gt;
        displayList = (Vector) (ois.readObject());&lt;br /&gt;
        ois.close();&lt;br /&gt;
        fis.close();&lt;br /&gt;
        repaint();&lt;br /&gt;
      } catch (Exception ex) {&lt;br /&gt;
        System.out.println(&amp;quot;Trouble reading display list vector&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    } else if (e.getSource() == quitBtn) {&lt;br /&gt;
      setVisible(false);&lt;br /&gt;
      dispose();&lt;br /&gt;
      System.exit(0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Select the Ellipse to Move It in the Canvas ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Canvas;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Cursor;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.event.MouseAdapter;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.awt.event.MouseMotionAdapter;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import java.awt.geom.Rectangle2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class CircleWithHandles extends JFrame {&lt;br /&gt;
  DrawingCanvas canvas = new DrawingCanvas();&lt;br /&gt;
  public CircleWithHandles() {&lt;br /&gt;
    getContentPane().add(canvas);&lt;br /&gt;
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    pack();&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String arg[]) {&lt;br /&gt;
    new CircleWithHandles();&lt;br /&gt;
  }&lt;br /&gt;
  class DrawingCanvas extends Canvas {&lt;br /&gt;
    double x = 20, y = 20, w = 50, h = 50;&lt;br /&gt;
    int x1, y1, x2, y2;&lt;br /&gt;
    Ellipse2D ellipse;&lt;br /&gt;
    Ellipse2D selectedShape;&lt;br /&gt;
    Rectangle2D handleRectangle;&lt;br /&gt;
    Cursor curCursor;&lt;br /&gt;
    public DrawingCanvas() {&lt;br /&gt;
      setBackground(Color.white);&lt;br /&gt;
      addMouseListener(new MyMouseListener());&lt;br /&gt;
      addMouseMotionListener(new MyMouseMotionListener());&lt;br /&gt;
      setSize(400, 300); &lt;br /&gt;
    }&lt;br /&gt;
    public void paint(Graphics g) {&lt;br /&gt;
      Graphics2D g2D = (Graphics2D) g;&lt;br /&gt;
      ellipse = new Ellipse2D.Double(x, y, w, h);&lt;br /&gt;
      g2D.draw(ellipse);&lt;br /&gt;
      if (handleRectangle != null) {&lt;br /&gt;
        drawHighlightSquares(g2D, handleRectangle);&lt;br /&gt;
      }&lt;br /&gt;
      if (curCursor != null)&lt;br /&gt;
        setCursor(curCursor);&lt;br /&gt;
    }&lt;br /&gt;
    public void drawHighlightSquares(Graphics2D g2D, Rectangle2D r) {&lt;br /&gt;
      double x = r.getX();&lt;br /&gt;
      double y = r.getY();&lt;br /&gt;
      double w = r.getWidth();&lt;br /&gt;
      double h = r.getHeight();&lt;br /&gt;
      g2D.setColor(Color.black);&lt;br /&gt;
      g2D.fill(new Rectangle.Double(x - 3.0, y - 3.0, 6.0, 6.0));&lt;br /&gt;
      g2D.fill(new Rectangle.Double(x + w * 0.5 - 3.0, y - 3.0, 6.0, 6.0));&lt;br /&gt;
      g2D.fill(new Rectangle.Double(x + w - 3.0, y - 3.0, 6.0, 6.0));&lt;br /&gt;
      g2D.fill(new Rectangle.Double(x - 3.0, y + h * 0.5 - 3.0, 6.0, 6.0));&lt;br /&gt;
      g2D.fill(new Rectangle.Double(x + w - 3.0, y + h * 0.5 - 3.0, 6.0, 6.0));&lt;br /&gt;
      g2D.fill(new Rectangle.Double(x - 3.0, y + h - 3.0, 6.0, 6.0));&lt;br /&gt;
      g2D.fill(new Rectangle.Double(x + w * 0.5 - 3.0, y + h - 3.0, 6.0, 6.0));&lt;br /&gt;
      g2D.fill(new Rectangle.Double(x + w - 3.0, y + h - 3.0, 6.0, 6.0));&lt;br /&gt;
    }&lt;br /&gt;
    class MyMouseListener extends MouseAdapter {&lt;br /&gt;
      public void mousePressed(MouseEvent e) {&lt;br /&gt;
        if (ellipse.contains(e.getX(), e.getY())) {&lt;br /&gt;
          selectedShape = ellipse;&lt;br /&gt;
          if (handleRectangle != null)&lt;br /&gt;
            handleRectangle = ellipse.getBounds2D();&lt;br /&gt;
        } else {&lt;br /&gt;
          handleRectangle = null;&lt;br /&gt;
        }&lt;br /&gt;
        canvas.repaint();&lt;br /&gt;
        x1 = e.getX();&lt;br /&gt;
        y1 = e.getY();&lt;br /&gt;
      }&lt;br /&gt;
      public void mouseReleased(MouseEvent e) {&lt;br /&gt;
        if (ellipse.contains(e.getX(), e.getY())) {&lt;br /&gt;
          handleRectangle = ellipse.getBounds2D();&lt;br /&gt;
          selectedShape = ellipse;&lt;br /&gt;
        }&lt;br /&gt;
        canvas.repaint();&lt;br /&gt;
      }&lt;br /&gt;
      public void mouseClicked(MouseEvent e) {&lt;br /&gt;
        if (ellipse.contains(e.getX(), e.getY())) {&lt;br /&gt;
          selectedShape = ellipse;&lt;br /&gt;
          handleRectangle = ellipse.getBounds2D();&lt;br /&gt;
        } else {&lt;br /&gt;
          if (handleRectangle != null)&lt;br /&gt;
            handleRectangle = null;&lt;br /&gt;
        }&lt;br /&gt;
        canvas.repaint();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    class MyMouseMotionListener extends MouseMotionAdapter {&lt;br /&gt;
      public void mouseDragged(MouseEvent e) {&lt;br /&gt;
        if (ellipse.contains(e.getX(), e.getY())) {&lt;br /&gt;
          handleRectangle = null;&lt;br /&gt;
          selectedShape = ellipse;&lt;br /&gt;
          x2 = e.getX();&lt;br /&gt;
          y2 = e.getY();&lt;br /&gt;
          x = x + x2 - x1;&lt;br /&gt;
          y = y + y2 - y1;&lt;br /&gt;
          x1 = x2;&lt;br /&gt;
          y1 = y2;&lt;br /&gt;
        }&lt;br /&gt;
        canvas.repaint();&lt;br /&gt;
      }&lt;br /&gt;
      public void mouseMoved(MouseEvent e) {&lt;br /&gt;
        if (ellipse != null) {&lt;br /&gt;
          if (ellipse.contains(e.getX(), e.getY())) {&lt;br /&gt;
            curCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);&lt;br /&gt;
          } else {&lt;br /&gt;
            curCursor = Cursor.getDefaultCursor();&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        canvas.repaint();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  The SimpleDraw application ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.FlowLayout;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.awt.event.MouseListener;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import javax.swing.ButtonGroup;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JRadioButton;&lt;br /&gt;
public class SimpleDraw extends JFrame&lt;br /&gt;
        implements ActionListener, MouseListener {&lt;br /&gt;
    // (x1,y1) = coordinate of mouse pressed&lt;br /&gt;
    // (x2,y2) = coordinate of mouse released&lt;br /&gt;
    int x1;&lt;br /&gt;
    int y1;&lt;br /&gt;
    int x2;&lt;br /&gt;
    int y2;&lt;br /&gt;
    ArrayList&amp;lt;Shape&amp;gt; shapes = new ArrayList&amp;lt;Shape&amp;gt;();&lt;br /&gt;
    String shapeType = &amp;quot;Rectangle&amp;quot;;&lt;br /&gt;
    public SimpleDraw() {&lt;br /&gt;
        this.setTitle(&amp;quot;Simple DRAW&amp;quot;);&lt;br /&gt;
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
        // add check box group&lt;br /&gt;
        ButtonGroup cbg = new ButtonGroup();&lt;br /&gt;
        JRadioButton lineButton = new JRadioButton(&amp;quot;Line&amp;quot;);&lt;br /&gt;
        JRadioButton ovalButton = new JRadioButton(&amp;quot;Oval&amp;quot;);&lt;br /&gt;
        JRadioButton rectangleButton =&lt;br /&gt;
                new JRadioButton(&amp;quot;Rectangle&amp;quot;);&lt;br /&gt;
        cbg.add(lineButton);&lt;br /&gt;
        cbg.add(ovalButton);&lt;br /&gt;
        cbg.add(rectangleButton);&lt;br /&gt;
        lineButton.addActionListener(this);&lt;br /&gt;
        ovalButton.addActionListener(this);&lt;br /&gt;
        rectangleButton.addActionListener(this);&lt;br /&gt;
        rectangleButton.setSelected(true);&lt;br /&gt;
        JPanel radioPanel = new JPanel(new FlowLayout());&lt;br /&gt;
        radioPanel.add(lineButton);&lt;br /&gt;
        radioPanel.add(ovalButton);&lt;br /&gt;
        radioPanel.add(rectangleButton);&lt;br /&gt;
        this.addMouseListener(this);&lt;br /&gt;
        this.setLayout(new BorderLayout());&lt;br /&gt;
        this.add(radioPanel, BorderLayout.NORTH);&lt;br /&gt;
    }&lt;br /&gt;
    public void paint(Graphics g) {&lt;br /&gt;
        paintComponents(g);&lt;br /&gt;
        for (Shape shape : shapes) {&lt;br /&gt;
          Graphics2D g2 = (Graphics2D)g;  &lt;br /&gt;
          g2.draw(shape);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public void actionPerformed(ActionEvent ae) {&lt;br /&gt;
        shapeType = ae.getActionCommand().toString();&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseClicked(MouseEvent me) {&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseEntered(MouseEvent me) {&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseExited(MouseEvent me) {&lt;br /&gt;
    }&lt;br /&gt;
    public void mousePressed(MouseEvent me) {&lt;br /&gt;
        x1 = me.getX();&lt;br /&gt;
        y1 = me.getY();&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseReleased(MouseEvent me) {&lt;br /&gt;
        x2 = me.getX();&lt;br /&gt;
        y2 = me.getY();&lt;br /&gt;
        Shape shape = null;&lt;br /&gt;
        if (shapeType.equals(&amp;quot;Rectangle&amp;quot;)) {&lt;br /&gt;
            // a Rectangle cannot have a zero width or height&lt;br /&gt;
            if (x1 != x2 || y1 != y2) {&lt;br /&gt;
                shape = new Rectangle(x1, y1, x2, y2);&lt;br /&gt;
            }&lt;br /&gt;
        } &lt;br /&gt;
        if (shape != null) {&lt;br /&gt;
            this.shapes.add(shape);&lt;br /&gt;
            this.repaint();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        JFrame.setDefaultLookAndFeelDecorated(true);&lt;br /&gt;
        SimpleDraw frame = new SimpleDraw();&lt;br /&gt;
        frame.pack();&lt;br /&gt;
        frame.setVisible(true);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>