示例#1
0
  public PrintDemoGfx(boolean q) {
    quiet = q;
    final JFrame f = new JFrame("Printing Test Dummy Frame");

    // Construct the object we want to print. Contrived:
    // this object would already exist in a real program.
    final GfxDemoCanvas thing = new GfxDemoCanvas(400, 300);

    f.getContentPane().add(thing, BorderLayout.CENTER);

    JButton printButton = new JButton("Print");
    f.getContentPane().add(printButton, BorderLayout.SOUTH);

    printButton.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            try {
              PrinterJob pjob = PrinterJob.getPrinterJob();
              pjob.setJobName("DemoGfx - Graphics Demo Printout");
              pjob.setCopies(1);
              // Tell the print system how to print our pages.
              pjob.setPrintable(
                  new Printable() {
                    /** called from the printer system to print each page */
                    public int print(Graphics pg, PageFormat pf, int pageNum) {
                      if (pageNum > 0) // we only print one page
                      return Printable.NO_SUCH_PAGE; // ie., end of job

                      // Now (drum roll please), ask "thing" to paint itself
                      // on the printer, by calling its paint() method with
                      // a Printjob Graphics instead of a Window Graphics.
                      thing.paint(pg);

                      // Tell print system that the page is ready to print
                      return Printable.PAGE_EXISTS;
                    }
                  });

              if (!quiet && pjob.printDialog() == false) // choose printer
              return; // user cancelled

              pjob.print(); // Finally, do the printing.
            } catch (PrinterException pe) {
              JOptionPane.showMessageDialog(
                  f, "Printer error" + pe, "Printing error", JOptionPane.ERROR_MESSAGE);
            }
          }
        });

    f.pack();
    f.setVisible(true);
  }