2D Graphics GUI Java

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class AnotherPrintDemo extends JFrame {
  DrawingCanvas canvas;
  JButton setUpButton = new JButton("Page Setup");
  JButton printButton = new JButton("Print");
  JButton cancelButton = new JButton("Cancel");
  public AnotherPrintDemo() {
    super();
    Container container = getContentPane();
    canvas = new DrawingCanvas();
    container.add(canvas);
    JPanel panel = new JPanel(new GridLayout(1, 3));
    ButtonListener buttonListener = new ButtonListener();
    setUpButton.addActionListener(buttonListener);
    panel.add(setUpButton);
    printButton.addActionListener(buttonListener);
    panel.add(printButton);
    cancelButton.addActionListener(buttonListener);
    panel.add(cancelButton);
    container.add(BorderLayout.SOUTH, panel);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    setSize(650, 275);
    setVisible(true);
  }
  class ButtonListener implements ActionListener {
    PrinterJob printJob;
    PageFormat pageFormat;
    PrintableCanvas printableCanvas;
    ButtonListener() {
      printJob = PrinterJob.getPrinterJob();
      pageFormat = printJob.defaultPage();
    }
    public void actionPerformed(ActionEvent e) {
      JButton tempButton = (JButton) e.getSource();
      if (tempButton.equals(setUpButton)) {
        pageFormat = printJob.pageDialog(pageFormat);
        printJob.validatePage(pageFormat);
      } else if (tempButton.equals(printButton)) {
        printableCanvas = new PrintableCanvas(pageFormat);
        printJob.setPrintable(printableCanvas);
        boolean ok = printJob.printDialog();
        if (ok) {
          try {
            printJob.print();
          } catch (Exception pe) {
            System.out.println("Printing Exception Occured!");
            pe.printStackTrace();
          }
        }
      } else if (tempButton.equals(cancelButton)) {
        printJob.cancel();
      }
    }
  }
  public static void main(String arg[]) {
    new AnotherPrintDemo();
  }
}
class DrawingCanvas extends JPanel {
  Font font;
  FontMetrics fontMetrics;
  int w, h;
  DrawingCanvas() {
    setBackground(Color.white);
    setSize(400, 275);
    w = this.getWidth();
    h = this.getHeight();
    font = new Font("Dialog", Font.BOLD, 50);
    fontMetrics = getFontMetrics(font);
  }
  public void paintComponent(Graphics g) {
    super.paintComponent(g); 
    Graphics2D g2D = (Graphics2D) g;
    paintContent(g2D, w, h);
  }
  public void paintContent(Graphics2D g2D, int w, int h) {
    g2D.setFont(font);
      g2D.drawString("Java Source and Support", 0,
        (float) (0.5 * h - 1.25 * fontMetrics.getHeight()));
  }
}
class PrintableCanvas implements Printable {
  DrawingCanvas canvas;
  PageFormat pageFormat;
  public PrintableCanvas(PageFormat pf) {
    pageFormat = pf;
  }
  public int print(Graphics g, PageFormat pageFormat, int pageIndex)
      throws PrinterException {
    if (pageIndex >= 1) {
      return Printable.NO_SUCH_PAGE;
    }
    Graphics2D g2D = (Graphics2D) g;
    canvas = new DrawingCanvas();
    canvas.paintContent(g2D, (int) pageFormat.getImageableWidth(),
        (int) pageFormat.getImageableHeight());
    // successful printing of the page
    return Printable.PAGE_EXISTS;
  }
}