打印图形对象

时间:2013-05-06 15:48:22

标签: java netbeans printing

我的代码打印图形对象时遇到问题。这个确切的代码工作大约一周前,现在当我在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);
  }
}

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

还行:

Graphics2D g2d = (Graphics2D)g;

错误说它无法转换图形类型。我不知道我做错了什么,因为这个确切的代码在一周前就已经运行了。

5 个答案:

答案 0 :(得分:4)

这听起来像是Java版本问题。 Java {5}中添加了@Override,但仅对重写的类方法有效。 Java 6添加了对@Override的支持,以实现接口上的方法(Printable是)。

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

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

答案 1 :(得分:2)

我刚才有类似的问题。

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

这不能被视为一个完整的答案,因为我不知道它不起作用的原因,因为{5}中引入了@Override注释,我有编译器和java版本> = 5也许别人可以告诉我们原因。

答案 2 :(得分:1)

如果您删除@Override,它将有效。

答案 3 :(得分:1)

听起来您的Netbeans配置CLASSPATH已更改或Swing jar中的Printable类文件已损坏,因此Java编译器无法找到基类。

您没有说明您正在使用的Netbeans版本。以下内容适用于OSX的7.2.1。

在项目属性中(右键单击项目名称以查找它),选择库并确保计算机上的JDK设置为您确定完整且有效的JDK。您也可以尝试来源|扫描外部更改...... ,应该重新读取JDK清单。重新启动IDE是缺少引用的另一个建议修复。重新安装JDK来修复损坏的jar是最后的尝试。

答案 4 :(得分:1)

这在我的机器上没有问题。正如其他人所建议的那样,您可能在NetBeans中遇到配置问题。它不太可能是Java本身的问题,但仍然可能。

无论如何,对于这种问题,我建议安装Eclipse。如果某些东西在Eclipse而不是NetBeans,NetBeans而不是Eclipse中运行,或者你只是得到完全不同的错误,那么它往往非常有启发性。