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
|