打印图形对象

use*_*252 6 java printing netbeans

我的代码打印图形对象时遇到问题.这个确切的代码工作大约一周前,现在当我在netbeans中打开文件时,它会在执行时崩溃.

这是代码:

package Project;

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

public class Print implements Printable {
  private Component componentToBePrinted;

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

  public Print(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);
      }
  }

  @Override
  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);
    }
  }

  public static void disableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(false);
  }

  public static void enableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(true);
  }
}
Run Code Online (Sandbox Code Playgroud)

Netbeans告诉我,当我和@Override告诉我它什么都不做时,我没有覆盖抽象方法print(Graphics,PageFormat,int).

还行:

Graphics2D g2d = (Graphics2D)g;
Run Code Online (Sandbox Code Playgroud)

错误说它无法转换图形类型.我不知道我做错了什么,因为这个确切的代码工作一周前.

dka*_*zel 5

听起来像是Java版本问题。 @Override是在 Java 5 中添加的,但仅对覆盖类的方法有效。Java 6 添加了@Override对在接口上实现方法的支持 (即Printable)。

此外,我认为Graphics传递的所有 Swing实例现在都是实际Graphics2D实例,因此从 Java 1.2 开始,转换应该是安全的。因此,如果您遇到转换错误,那么您可能正在使用非常旧的 Java 版本?

无论哪种方式,我都建议您检查您的 Netbeans 配置以确保您至少使用 Java 6。


Joh*_*ith 2

不久前我也遇到过类似的问题。

在某个编译器版本/java版本组合中,@Override注释不起作用并给出编译器错误。如果你删除它,它就会起作用。

这不能被视为一个完整的答案,因为我不知道它不起作用的原因,因为注释@Override是在 java 5 中引入的,并且我有编译器和 java 版本 >= 5。也许其他人可以启发我们原因。