Tôi gặp sự cố với mã của mình để in đối tượng đồ họa. Mã chính xác này đã hoạt động khoảng một tuần trước và bây giờ khi tôi mở tệp trong netbeans, nó bị treo trên thực thi.In một đối tượng đồ họa
Đây là mã:
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 nói với tôi rằng tôi không Trọng phương pháp in trừu tượng (Graphics, PageFormat, int) khi tôi và @ Override nói với tôi nó đang làm gì.
Cũng dòng:
Graphics2D g2d = (Graphics2D)g;
lỗi ra nói rằng nó không thể chuyển đổi các loại đồ họa. Tôi không có ý tưởng những gì tôi đang làm sai vì mã chính xác này đã làm việc một tuần trước đây.
Bạn lấy đối tượng 'Graphics' ở đâu? Bạn có thể nhận trực tiếp đối tượng 'Graphics2D' và đặt phương thức để chấp nhận đối tượng đó làm tham số không? – Pietu1998
Không chắc chắn nếu đó là nguồn gốc của vấn đề của bạn, nhưng bạn có một diễn viên không được kiểm soát từ 'g' đến' g2d'. Mặc dù mã của bạn đã thay đổi, nó có thể nhận được các đầu vào khác với nó đã được một tuần trước đây. Tôi sẽ ít nhất thêm một 'if (g instanceof g2d)' trước khi cast; bạn cũng có thể đặt điểm ngắt để kiểm tra kiểu thời gian chạy của 'g'. – killscreen
Tôi vừa biên soạn mã của bạn mà không có bất kỳ vấn đề nào bạn mô tả. Tôi nghĩ chúng ta cần thêm thông tin ... – DannyMo