-2

これは、フォームを印刷できるコードです。マーティ・ホールによって作成されました。印刷するフォームのプロパティを設定する印刷フォームの [OK] ボタンをクリックするたびにコーディングできるかどうかを尋ねたかったのですが、どうすればよいですか? このコードのどの部分で?私が自分自身を明確にすることができない場合は申し訳ありません。XD

package thesis;

import java.awt.*;
import javax.swing.*;
import java.awt.print.*;

/** A simple utility class that lets you very simply print
 *  an arbitrary component. Just pass the component to the
 *  PrintUtilities.printComponent. The component you want to
 *  print doesn't need a print method and doesn't have to
 *  implement any interface or do anything special at all.
 *  <P>
 *  If you are going to be printing many times, it is marginally more
 *  efficient to first do the following:
 *  <PRE>
 *    PrintUtilities printHelper = new PrintUtilities(theComponent);
 *  </PRE>
 *  then later do printHelper.print(). But this is a very tiny
 *  difference, so in most cases just do the simpler
 *  PrintUtilities.printComponent(componentToBePrinted).
 *
 *  7/99 Marty Hall, http://www.apl.jhu.edu/~hall/java/
 *  May be freely used or adapted.
 */

public class PrintUtilities implements Printable {
  private Component componentToBePrinted;

  public static void printComponent(Component c) {
    new PrintUtilities(c).print();
  }

  public PrintUtilities(Component componentToBePrinted) {
    this.componentToBePrinted = componentToBePrinted;
  }

  public void print() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    printJob.setPrintable(this);
    if (printJob.printDialog())
      try {
        printJob.print();
      } catch(PrinterException pe) {
        System.out.println("Error printing: " + pe);
      }
  }

  public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
    if (pageIndex > 0) {
      return(NO_SUCH_PAGE);
    } else {
      Graphics2D g2d = (Graphics2D)g;
      g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
      disableDoubleBuffering(componentToBePrinted);
      componentToBePrinted.paint(g2d);
      enableDoubleBuffering(componentToBePrinted);
      return(PAGE_EXISTS);
    }
  }

  /** The speed and quality of printing suffers dramatically if
   *  any of the containers have double buffering turned on.
   *  So this turns if off globally.
   *  @see enableDoubleBuffering
   */
  public static void disableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(false);
  }

  /** Re-enables double buffering globally. */

  public static void enableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(true);
  }
}
4

3 に答える 3

3

私はあなたの質問を理解していると思います。あなたが抱えている問題は、 PrintUtilities クラスが、使用者が操作を印刷またはキャンセルすることを決定したかどうかを公開しないためです。そのようにしたい場合は、いくつかの変更を加える必要があります。

public static Boolean printComponent(Component c) {
    return (new PrintUtilities(c)).print();
}

public Boolean print() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    printJob.setPrintable(this);
    if (printJob.printDialog()) { // i assume this is where the dialog is shown
        // user decided to print
        try {
            printJob.print();
        } catch(PrinterException pe) {
            System.out.println("Error printing: " + pe);
        }
        return true;
    }
    else {
        // user canceled
        return false;
    }
}

printComponent を呼び出すと、実際に印刷されたかどうかが返されます。

于 2012-10-06T00:39:21.170 に答える
2

ActionListner「印刷」ボタンを添付する必要があります

btnOkay.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
      PrintUtilities pu = new PrintUtilities(componentToBePrinted);
      pu.print();
    }
}

詳細については、アクション リスナーの作成方法を参照してください。

于 2012-10-06T00:32:29.053 に答える
0
public void print() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    printJob.setPrintable(this);
    if (printJob.printDialog())
      try {
          System.out.println("code here");
        printJob.print();
      } catch(PrinterException pe) {
        System.out.println("Error printing: " + pe);
      }
  }

見つけた。これを投稿して申し訳ありません。他の人からの回答があると書かれているため、質問を削除できません。そして、ここが私がコーディングできる部分であることがわかりました。

于 2012-10-06T01:05:09.770 に答える