| The Canvas 
              component provides a blank area on which to draw. The Canvas 
              class extends the Component 
              class and adds little additional functionality other than offering 
              an empty display.  You can also paint on a Panel 
              component, though this wastes the Container 
              capabilities that it inherits. In many of the applet programs in 
              this course we paint on the applet's panel. Note that while Swing 
              has a parallel class for most of the other AWT components (e.g. 
               JButton 
              vs. Button) 
              but does not include a parallel JCanvas 
              class. Instead, Swing provides JPanel 
              for drawing. (It can be said, though, that there is a certain logical 
              consistency in offering a component intended just as a drawing surface 
              rather than also a container/drawing surface combo.)  The applet shown below uses a Canvas 
              subclass as a component on which to draw a message. 
              
                 
                  | CanvasApplet.java   |   
                  |  import 
                      java.awt.*;import java.applet.*;
 import java.awt.event.*;
 
 /** This program demonstrates the use of the
 * Canvas component for drawing.
 **/
 public class CanvasApplet extends Applet
 implements ActionListener
 {
 MyCanvas fCanvas;
 Button fButton;
 
 /** Create an interface with a Canvas and button.**/
 public void init () {
 // Use a borderlayout to control 
                      where
 // the components go.
 setLayout (new BorderLayout ());
 
 // Create an instance of myCanvas
 fCanvas = new MyCanvas ();
 add ("North", fCanvas);
 
 // Set the canvas to a fixed size.
 fCanvas.setSize (200,120);
 
 // Make a button and use this applet
 // as it's listener
 fButton = new Button ("Push");
 fButton.addActionListener (this);
 
 // Use a panel to fillup the rest 
                      of the
 // space not used by the canvas 
                      on top.
 Panel p = new Panel ();
 setLayout (new BorderLayout ());
 p.setBackground (Color.cyan);
 
 // And put the button in the middle 
                      of the panel
 p.add ("Center", fButton);
 add ("South", p);
 
 } //init
 
 /** Each button click will redraw the canvas. 
                      **/
 public void actionPerformed  (ActionEvent 
                      e) {
 fCanvas.repaint ();
 }
 
 } // class CanvasApplet
 
 /** Create a Canvas subclass for drawing.
 * It will keep track of the number of times
 * that it is painted and draw that number on
 * its display.
 **/
 class MyCanvas extends Canvas {
 
 int fNumCalls;
 
 MyCanvas () {
 fNumCalls = 0;
 setBackground (Color.yellow);
 } // ctor
 
 public void paint (Graphics g) {
 g.setColor (Color.black);
 fNumCalls++;
 String msg = "Number clicks = " 
                      + fNumCalls;
 // Draw at a hardwired coordinate 
                      position.
 g.drawString (msg, 40, 50);
 } //paint
 
 } // class MyCanvas
 |    Latest update: March 8, 2006 |