У меня возникла проблема с моим кодом, который печатает графический объект. Этот точный код работал около недели назад, и теперь, когда я открываю файл в 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 говорит мне, что я не Переопределение абстрактный метод печати (Graphics, PageFormat, целое), когда я и @Override говорит мне, что не делает ничего.
Также линия:
Graphics2D g2d = (Graphics2D)g;
ошибки, говоря, что не может преобразовать графические типы. У меня нет идеи, что я делаю неправильно, потому что этот точный код работал неделю назад.
Где вы видите объект "Graphics"? Вы можете напрямую получить объект «Graphics2D» и установить метод для принятия этого параметра? – Pietu1998
Не уверен, что это источник вашей проблемы, но у вас есть непроверенный бросок от 'g' до' g2d'. Несмотря на то, что ваш код изменился, он может получить разные ресурсы, чем неделю назад. Я бы, по крайней мере, добавил 'if (g instanceof g2d)' перед литой; вы также можете установить контрольную точку для проверки типа времени выполнения 'g'. – killscreen
Я просто скомпилировал ваш код без каких-либо проблем, которые вы описали. Я думаю, нам нужна дополнительная информация ... – DannyMo