Painter


Painter.java

// Fig. 14.34: Painter.java
// Testing PaintPanel.
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Point;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JPanel;

class PaintPanel extends JPanel 
{
   private int pointCount = 0; // count number of points

   // array of 10000 java.awt.Point references
   private Point[] points = new Point[ 10000 ];  

   // set up GUI and register mouse event handler
   public PaintPanel()
   {
      // handle frame mouse motion event
      addMouseMotionListener(

         new MouseMotionAdapter() // anonymous inner class
         {  
            // store drag coordinates and repaint
            public void mouseDragged( MouseEvent event )
            {
               if ( pointCount < points.length ) 
               {
                  points[ pointCount ] = event.getPoint(); // find point
                  ++pointCount; // increment number of points in array
                  repaint(); // repaint JFrame
               } // end if
            } // end method mouseDragged
         } // end anonymous inner class
      ); // end call to addMouseMotionListener
   } // end PaintPanel constructor

   // draw ovals in a 4-by-4 bounding box at specified locations on window
   public void paintComponent( Graphics g )
   {
      super.paintComponent( g ); // clears drawing area

      // draw all points in array
      for ( int i = 0; i < pointCount; i++ )
         g.fillOval( points[ i ].x, points[ i ].y, 4, 4 );
   } // end method paintComponent
} // end class PaintPanel

public class Painter
{
   public static void main( String[] args )
   { 
      // create JFrame
      JFrame application = new JFrame( "A simple paint program" );

      PaintPanel paintPanel = new PaintPanel(); // create paint panel
      application.add( paintPanel, BorderLayout.CENTER ); // in center
      
      // create a label and place it in SOUTH of BorderLayout
      application.add( new JLabel( "Drag the mouse to draw" ), 
         BorderLayout.SOUTH );

      application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      application.setSize( 400, 200 ); // set frame size
      application.setVisible( true ); // display frame
   } // end main
} // end class Painter


Maintained by John Loomis, updated Sat Jun 20 11:32:38 2015