我遇到了打印圖形對象的代碼問題。這個確切的代碼大約一週前工作,現在當我在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的告訴我,我不重寫抽象方法打印(圖形,PageFormat中,INT)當我和@覆蓋告訴我它是什麼都不做。
也行:
Graphics2D g2d = (Graphics2D)g;
錯誤出來說,它不能轉換圖形類型。我不知道我做錯了什麼,因爲這個確切的代碼在一個星期前工作。
你在哪裏得到'Graphics'對象?你能直接得到一個'Graphics2D'對象並設置方法來接受它作爲參數嗎? – Pietu1998 2013-05-06 15:54:43
不知道如果這是你的問題的根源,但你必須從'g'到'g2d'未經檢查的演員。即使您的代碼已更改,它可能會獲得與一週前不同的輸入。我至少會在演員陣前添加一個'if(g instanceof g2d)';你也可以設置一個斷點來檢查'g'的運行時類型。 – killscreen 2013-05-06 16:03:18
我剛剛編譯了你的代碼,沒有提到你描述的任何問題。我認爲,我們需要更多的信息... – DannyMo 2013-08-09 04:06:13