Program: PlotterAWT

In Section 8.12, we discussed a series of Plotter classes. The PlotterAWT class shown in Example 12-7 extends that to provide a “plot preview” service: before being plotted on a (probably slow) plotter, the plot is displayed in an AWT window using the Graphics drawing primitives.

Example 12-7. PlotterAWT.java

import java.awt.*;
import java.awt.event.*;

/**
 * A Plotter subclass for drawing into an AWT Window. Reflecting back
 * to AWT gives us a "known working" plotter to test on.
 * You can also steal this as a basis for your own plotter driver!
 */
public class PlotterAWT extends Plotter {
    Frame f;
    Image os;
    PCanvas p;
    Graphics g;
    Font font;
    FontMetrics fontMetrics;
    PlotterAWT(  ) {
        super(  );
        f = new Frame("Plotter");
        p = new PCanvas(os, MAXX, MAXY);
        f.add(p);
        f.pack(  );
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter(  ) {
            public void windowClosing(WindowEvent e) {
                // If we do setVisible and dispose, then the Close completes
                PlotterAWT.this.f.setVisible(false);
                PlotterAWT.this.f.dispose(  );
                System.exit(0);
            }
        });
        g = p.getOsGraphics(  );
    }
    public void drawBox(int w, int h) {
        g.drawRect(curx, cury, w, h);
        p.repaint(  );
    }
    public void rmoveTo(int incrx, int incry){
        moveTo(curx += incrx, cury += incry);
    }
    public void moveTo(int absx, int absy){
        if (!penIsUp)
            g.drawLine(curx, cury, absx, absy);
        curx = absx;
        cury = absy;
    }
    public void setdir(float deg){}
    void penUp(  ){ penIsUp = true; }
    void penDown(  ){ penIsUp = false; }
    void penColor(int c){
        switch(c) {
        case 0: g.setColor(Color.white); break;
        case 1: g.setColor(Color.black); break;
        case 2: g.setColor(Color.red); break;
        case 3: g.setColor(Color.green); break;
        case 4: g.setColor(Color.blue); break;
        default: g.setColor(new Color(c)); break;
        }
    }
    void setFont(String fName, int fSize) {
        font = new Font(fName, Font.BOLD, fSize);
        fontMetrics = p.getFontMetrics(font);
    }
    void drawString(String s) {
        g.drawString(s, curx, cury);
        curx += fontMetrics.stringWidth(s);
    }

    /** A Member Class that contains an off-screen Image that is
     * drawn into; this component's paint(  ) copies from there to
     * the screen. This avoids having to keep a list of all the
     * things that have been drawn.
     */
    class PCanvas extends Canvas {
        int width;
        int height;

        PCanvas(Image im, int x, int y) {
            width = x;
            height = y;
            setBackground(Color.white);
            setForeground(Color.red);
        }

        public Graphics getOsGraphics(  ) {
            checkOS(  );
            return g;
        }
        private void checkOS(  ) {
            // This createImage fails mysteriously if done in a constructor!
            os = createImage(width, height);
            // System.out.println("PCanvas.checkOS(  ): image= " + os);
            if (os == null)
                throw new IllegalArgumentException("createImage failed");
            g = os.getGraphics(  );
        }

        public void paint(Graphics pg) {
            pg.drawImage(os, 0, 0, null);
        }
        public Dimension getPreferredSize(  ) {
            return new Dimension(width, height);
        }
    }
}
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.223.239.226