Drucken mit Java

Hallo alle miteinander ich will einen Druck machen aber ich weiss nicht wie!!

Habe dieses Beispiel hier geschrieben:

Java:
        //PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        java.awt.print.PrinterJob printerJob = PrinterJob.getPrinterJob();
        javax.print.PrintService services[] = java.awt.print.PrinterJob.lookupPrintServices();
        boolean doPrint = printerJob.printDialog();
        String sprinter = null;
        int iprinter = -1;
        if (doPrint == true) {
            sprinter = printerJob.getPrintService().getName();
            for(int i = 0;i < services.length;i++) {
                if(services[i].getName().equals(sprinter) == true) {
                    iprinter = i;
                    break;
                }
            }
        }
        
        for(int i = 0;i < this.buffimages.capacity();i++) {
            java.awt.Graphics2D g2 = (java.awt.Graphics2D)this.buffimages.get(i).getGraphics();
            PrinterJob prjob = ((PrinterGraphics)g2).getPrinterJob();
            prjob.setPrintService(services[iprinter]);
            prjob.print();
        }

Aber ich bekomme immer diese Exception:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.java2d.SunGraphics2D cannot be cast to java.awt.print.PrinterGraphics
at myprintpreview.MyPrintPreview.printDokument(MyPrintPreview.java:120)
at myprintpreview.FormPrintControl.drucken(FormPrintControl.java:34)
at myprintpreview.FormPrintControl.druckenActionPerformed(FormPrintControl.java:161)
at myprintpreview.FormPrintControl.access$100(FormPrintControl.java:7)
at myprintpreview.FormPrintControl$2.actionPerformed(FormPrintControl.java:238)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6041)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5806)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Ich kann mir schon denken das ich zwischen den beiden Klassen nicht hin und her casten kann.

Das Beispiel für den Cast

PrinterJob prjob = ((PrinterGraphics)g2).getPrinterJob();

habe ich auf dieser Seite gefunden

http://www.torsten-horn.de/techdocs/java-print.htm#MyPrintableObject.


Ich habs aber auch schon mit java.awt.print.book probiert, aber hier muss ich ein Objekt erzeugen das das Interface Printable implementiert.

Ich habe keine Ahnung wie ich das Book und printerJob.setPageable(this.book); umsetzen soll.

Hat jemand eine Ahnung
Ich habe eine Bildvorschau gebastelt und versuche jetzt alle BufferedImages zu drucken die ich im Vector gesammelt habe.

Hier mal der Code des Projektes.

Main - Klasse
Java:
package myprintpreview;

public class Main {

    public static void main(String[] args) {
        //System.out.println("Bin in der main() - Methode");
        MyPrintPreview t = new MyPrintPreview();
        t.setTitle("Drucken von \"Abfrage Bestellliste\" ");
        
        java.awt.image.BufferedImage buffimage = t.createImage();
        java.awt.Graphics2D g = buffimage.createGraphics();
        
        g.setBackground(new java.awt.Color(255,255,255));
        // ---------------------------------------------------------------------
        // Auffüllen des Hintergrundes mit Weiss
        g.setColor(new java.awt.Color(255,255,255));
        g.fillRect(0, 0, 595, 842);
        // ---------------------------------------------------------------------
        // Zeichnen der Markierung für die Übersschrift
        g.setColor(new java.awt.Color(213,213,213));        
        g.fillRect(30, 25, 535, 60);
        // ---------------------------------------------------------------------
        // Zeichnen der Überschrift
        g.setColor(new java.awt.Color(0,0,0));
        g.setFont(new java.awt.Font(java.awt.Font.SERIF, java.awt.Font.PLAIN, 32));
        g.drawString("B e s t e l l l i s t e   ", 47, 65);
        // ---------------------------------------------------------------------
        // Zeichnen des Spalten mit Ihren Inhalten vorher muss aber die größe der Schrift umgeschaltet werden
        g.setFont(new java.awt.Font(java.awt.Font.SERIF, java.awt.Font.PLAIN, 12));
        // ---------------------------------------------------------------------
        // Zeichnen der Fusszeile
        // - Mitarbeiter
        // - Datum und Uhrzeit
        // - Seite x von y
        // - In der DB wird eine Drucknummer erzeugt diese wird geholt und wird dann hier unten angezeigt
        g.setColor(new java.awt.Color(213,213,213));        
        g.fillRect(30, 800, 535, 815);
        // ---------------------------------------------------------------------
        g.setColor(new java.awt.Color(0,0,0));
        g.setFont(new java.awt.Font(java.awt.Font.SERIF, java.awt.Font.PLAIN, 8));
        // ---------------------------------------------------------------------
        g.drawString("65556757", 40, 810);
        // ---------------------------------------------------------------------
        g.drawString("Benutzername", 130, 810);
        // ---------------------------------------------------------------------
        java.util.Date date = new java.util.Date();
        java.sql.Date sqldate = new java.sql.Date(date.getTime());
        java.sql.Time sqltime = new java.sql.Time(date.getTime());        
        g.drawString(sqldate.toString(), 350, 810);
        g.drawString(sqltime.toString(), 400, 810);
        // ---------------------------------------------------------------------
        g.drawString("Seite 1 / 3", 520, 810);
        // ---------------------------------------------------------------------
        
        //t.setPrintImage(buffimage);
        t.addImage(buffimage);        
        
        
        java.awt.image.BufferedImage buffimage1 = t.createImage();
        java.awt.Graphics2D g1 = buffimage1.createGraphics();
        
        g1.setBackground(new java.awt.Color(255,255,255));
        // ---------------------------------------------------------------------
        // Auffüllen des Hintergrundes mit Weiss
        g1.setColor(new java.awt.Color(255,255,255));
        g1.fillRect(0, 0, 595, 842);
        // ---------------------------------------------------------------------
        // Zeichnen der Markierung für die Übersschrift
        g1.setColor(new java.awt.Color(213,213,213));        
        g1.fillRect(30, 25, 535, 60);
        // ---------------------------------------------------------------------
        // Zeichnen der Überschrift
        g1.setColor(new java.awt.Color(0,0,0));
        g1.setFont(new java.awt.Font(java.awt.Font.SERIF, java.awt.Font.PLAIN, 32));
        g1.drawString("B e s t e l l l i s t e     T e s t", 47, 65);
        // ---------------------------------------------------------------------
        // Zeichnen des Spalten mit Ihren Inhalten vorher muss aber die größe der Schrift umgeschaltet werden
        g1.setFont(new java.awt.Font(java.awt.Font.SERIF, java.awt.Font.PLAIN, 12));
        // ---------------------------------------------------------------------
        // Zeichnen der Fusszeile
        // - Mitarbeiter
        // - Datum und Uhrzeit
        // - Seite x von y
        // - In der DB wird eine Drucknummer erzeugt diese wird geholt und wird dann hier unten angezeigt
        g1.setColor(new java.awt.Color(213,213,213));        
        g1.fillRect(30, 800, 535, 815);
        // ---------------------------------------------------------------------
        g1.setColor(new java.awt.Color(0,0,0));
        g1.setFont(new java.awt.Font(java.awt.Font.SERIF, java.awt.Font.PLAIN, 8));
        // ---------------------------------------------------------------------
        g1.drawString("65556757", 40, 810);
        // ---------------------------------------------------------------------
        g1.drawString("Benutzername", 130, 810);
        // ---------------------------------------------------------------------
        java.util.Date date1 = new java.util.Date();
        java.sql.Date sqldate1 = new java.sql.Date(date1.getTime());
        java.sql.Time sqltime1 = new java.sql.Time(date1.getTime());        
        g1.drawString(sqldate1.toString(), 350, 810);
        g1.drawString(sqltime1.toString(), 400, 810);
        // ---------------------------------------------------------------------
        g1.drawString("Seite 2 / 3", 520, 810);
        // ---------------------------------------------------------------------
        
        t.setPrintImage(buffimage1);
        //t.addImage(buffimage1);
        
        
        java.awt.image.BufferedImage buffimage2 = t.createImage();
        java.awt.Graphics2D g2 = buffimage2.createGraphics();
        
        g2.setBackground(new java.awt.Color(255,255,255));
        // ---------------------------------------------------------------------
        // Auffüllen des Hintergrundes mit Weiss
        g2.setColor(new java.awt.Color(255,255,255));
        g2.fillRect(0, 0, 595, 842);
        // ---------------------------------------------------------------------
        // Zeichnen der Markierung für die Übersschrift
        g2.setColor(new java.awt.Color(213,213,213));        
        g2.fillRect(30, 25, 535, 60);
        // ---------------------------------------------------------------------
        // Zeichnen der Überschrift
        g2.setColor(new java.awt.Color(0,0,0));
        g2.setFont(new java.awt.Font(java.awt.Font.SERIF, java.awt.Font.PLAIN, 32));
        g2.drawString("B e s t e l l l i s t e     L a g e r", 47, 65);
        // ---------------------------------------------------------------------
        // Zeichnen des Spalten mit Ihren Inhalten vorher muss aber die größe der Schrift umgeschaltet werden
        g2.setFont(new java.awt.Font(java.awt.Font.SERIF, java.awt.Font.PLAIN, 12));
        // ---------------------------------------------------------------------
        // Zeichnen der Fusszeile
        // - Mitarbeiter
        // - Datum und Uhrzeit
        // - Seite x von y
        // - In der DB wird eine Drucknummer erzeugt diese wird geholt und wird dann hier unten angezeigt
        g2.setColor(new java.awt.Color(213,213,213));        
        g2.fillRect(30, 800, 535, 815);
        // ---------------------------------------------------------------------
        g2.setColor(new java.awt.Color(0,0,0));
        g2.setFont(new java.awt.Font(java.awt.Font.SERIF, java.awt.Font.PLAIN, 8));
        // ---------------------------------------------------------------------
        g2.drawString("65556757", 40, 810);
        // ---------------------------------------------------------------------
        g2.drawString("Benutzername", 130, 810);
        // ---------------------------------------------------------------------
        java.util.Date date2 = new java.util.Date();
        java.sql.Date sqldate2 = new java.sql.Date(date2.getTime());
        java.sql.Time sqltime2 = new java.sql.Time(date2.getTime());        
        g2.drawString(sqldate2.toString(), 350, 810);
        g2.drawString(sqltime2.toString(), 400, 810);
        // ---------------------------------------------------------------------
        g2.drawString("Seite 3 / 3", 520, 810);
        // ---------------------------------------------------------------------
        
        //t.setPrintImage(buffimage2);
        t.addImage(buffimage2);
        
        /*byte b[] = new byte[3];
        try {
            System.in.read(b);
        }
        catch(Exception e) {
            System.out.println(e.getMessage());
            
        }*/
    }
}
 
Die Hauptklasse dieser kleinen Bibliothek
Java:
package myprintpreview;

import java.awt.Graphics2D;
import java.util.Vector;
import java.awt.print.PageFormat;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import java.awt.PrintJob;
import java.awt.Toolkit;
import java.awt.print.PrinterGraphics;
import javax.print.attribute.HashPrintRequestAttributeSet;

public class MyPrintPreview {
    // ====================== Steuerelement Deklaration START ==================
    private FormPreviewFrame formPreviewFrame = null;
    private FormPrintControl formPrintControl = null;
    // ===================== Steuerelement Deklaration END =====================
    
    
    
    // ====================== Variablen Deklaration START ======================
    private Vector<java.awt.image.BufferedImage> buffimages;
    private java.awt.print.Book book = null;
    // ======================= Variablen Deklaration END =======================
    
    
    
    // ====================== Funktionen Definition START ======================    
    public java.awt.image.BufferedImage getImage(int NR) {
        java.awt.image.BufferedImage ret = null;
        if (this.buffimages.capacity() <= NR) {
            ret = this.buffimages.get(NR);
        }
        return ret;
    }

    public java.awt.image.BufferedImage createImage() {
        java.awt.image.BufferedImage ret = new java.awt.image.BufferedImage(595, 842, java.awt.image.BufferedImage.TYPE_INT_RGB);
        return ret;
    }

    public boolean setPrintImage(java.awt.image.BufferedImage X) {
        boolean ret = false;
        if (X != null) {
            this.buffimages.add(X);
            this.buffimages.trimToSize();
            //System.out.println("image value not null");
            for (int i = 0; i < this.buffimages.capacity(); i++) {
                if (this.buffimages.get(i).equals(X) == true) {
                    this.formPrintControl.setAktuelleSeite(i);
                }
            }
            this.formPreviewFrame.setPrintImage(X);
            ret = true;
        }
        return ret;
    }

    public boolean setPrintImage(int NR) {
        boolean ret = false;
        if (this.buffimages.capacity() >= NR) {
            this.formPreviewFrame.setPrintImage(this.buffimages.get(NR));
            ret = true;
        }
        this.formPrintControl.setAktuelleSeite(NR);
        return ret;
    }

    public boolean addImage(java.awt.image.BufferedImage X) {
        boolean ret = false;
        if (X != null) {
            this.buffimages.add(X);
            this.buffimages.trimToSize();
            this.formPrintControl.setAktuelleSeite(this.formPrintControl.getAktuelleSeite());
            ret = true;
        }
        return ret;
    }

    public void setTitle(String TITLE) {
        this.formPreviewFrame.setTitle(TITLE);
    }

    public void schliessePrintPreview() {
        this.formPreviewFrame.setVisible(false);
        this.formPrintControl.setVisible(false);

        this.formPreviewFrame.dispose();
        this.formPrintControl.dispose();
    }

    public int getMaxImages() {
        return this.buffimages.capacity();
    }

    public void printDokument() throws PrinterException {
        //PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        java.awt.print.PrinterJob printerJob = PrinterJob.getPrinterJob();
        javax.print.PrintService services[] = java.awt.print.PrinterJob.lookupPrintServices();
        boolean doPrint = printerJob.printDialog();
        String sprinter = null;
        int iprinter = -1;
        if (doPrint == true) {
            sprinter = printerJob.getPrintService().getName();
            for(int i = 0;i < services.length;i++) {
                if(services[i].getName().equals(sprinter) == true) {
                    iprinter = i;
                    break;
                }
            }
        }
        
        for(int i = 0;i < this.buffimages.capacity();i++) {
            java.awt.Graphics2D g2 = (java.awt.Graphics2D)this.buffimages.get(i).getGraphics();
            PrinterJob prjob = ((PrinterGraphics)g2).getPrinterJob();
            prjob.setPrintService(services[iprinter]);
            prjob.print();
        }
        
        /*this.book = new java.awt.print.Book();
        PrinterJob printerJob = PrinterJob.getPrinterJob();

        // defualt page immer setzen?
        PageFormat pf = printerJob.pageDialog(printerJob.defaultPage());

        printerJob.setPageable(this.book);
        boolean doPrint = printerJob.printDialog();
        if (doPrint == true) {
            try {
                printerJob.print();
            } catch (PrinterException exception) {
                System.err.println("Druckfehler: " + exception);
            }
        }*/
    }
    // ======================= Funktionen Definition END =======================
    
    
    
    // ==================== Eventhandler Definition START ======================
    // ===================== Eventhandler Definition END =======================
    
    
    
    // ======================= Konstruktor definition START ====================
    public MyPrintPreview() {
        //System.out.println("Konstruktor MyPrintPreview");
        this.buffimages = new Vector<java.awt.image.BufferedImage>();
        this.formPreviewFrame = new FormPreviewFrame();
        this.formPrintControl = new FormPrintControl(this);
    }
    // ======================= Konstruktor definition ENDE =====================
}


Das Frame das meine Grundlage für das Canvas ist
Java:
package myprintpreview;

public class FormPreviewFrame extends javax.swing.JFrame {
    // ====================== Steuerelement Deklaration START ==================
    private FormPrintPreview previewPrint = null;
    // ===================== Steuerelement Deklaration END =====================
    
    
    
    // ====================== Variablen Deklaration START ======================    
    // ======================= Variablen Deklaration END =======================
        
    
    
    // ====================== Funktionen Definition START ======================
    private java.awt.image.BufferedImage createPrintImage() {
        java.awt.image.BufferedImage p = new java.awt.image.BufferedImage(595, 842, java.awt.image.BufferedImage.TYPE_INT_RGB);
        java.awt.Graphics2D g = p.createGraphics();
        return p;
    }
    
    public void setPrintImage(java.awt.image.BufferedImage X) {        
        this.previewPrint.setPrintImage(X);
    }
    // ======================= Funktionen Definition END =======================
    
    
    
    // ==================== Eventhandler Definition START ======================
    // ===================== Eventhandler Definition END =======================
    
    
    
    // ======================= Konstruktor definition START ====================
    public  FormPreviewFrame() {
        //System.out.println("Konstruktor FormPreviewFrame");
        // erzeugen des eigenen Frames wovon ich erbe
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setBounds(100, 100, 595, 842);
        this.setLayout(null);
        this.setResizable(false);
        this.setVisible(true);        
        
        // erzeuge abgeleitete Canvas Klasse
        this.previewPrint = new FormPrintPreview();
        this.add(this.previewPrint);
        this.setComponentZOrder(this.previewPrint, 0);        
    }
    // ======================= Konstruktor definition ENDE =====================
}


Das PrintControll Fenster womit man den Druck anstoßen kann und die Seiten durchschalten
Java:
package myprintpreview;

public class FormPrintControl extends javax.swing.JFrame {
    // ====================== Steuerelement Deklaration START ==================
    private javax.swing.JButton ButtonNaechsteSeite;
    private javax.swing.JButton ButtonVorherigeSeite;
    private javax.swing.JButton ButtonErsteSeite;
    private javax.swing.JButton ButtonLetzteSeite;
    private javax.swing.JButton ButtonDrucken;
    private javax.swing.JButton ButtonAbbrechen;
    
    private javax.swing.JScrollPane ScrollPaneFrame;
    // ===================== Steuerelement Deklaration END =====================
    
    
    
    // ====================== Variablen Deklaration START ======================
    private MyPrintPreview printpreview;
    private int aktuellesimage;
    // ======================= Variablen Deklaration END =======================
        
    
    
    // ====================== Funktionen Definition START ======================
    private void abbrechen() {
        this.printpreview.schliessePrintPreview();
    }
    
    private void drucken() {
        this.printpreview.printDokument();
        this.abbrechen();
    }
    
    private void ladeVorherigeSeite() {
        if(this.printpreview.getMaxImages() > 0) {
            int tmp = this.aktuellesimage - 1;
            this.aktuellesimage = tmp;
            if(tmp == 0) {
                this.ButtonErsteSeite.setEnabled(false);
                this.ButtonVorherigeSeite.setEnabled(false);
            }
            this.printpreview.setPrintImage(tmp);
            // entsperren der Buttons für letzteSeite und naechsteSeite
            if(this.ButtonLetzteSeite.isEnabled() == false) {
                this.ButtonLetzteSeite.setEnabled(true);        
            }
            if(this.ButtonNaechsteSeite.isEnabled() == false) {
                this.ButtonNaechsteSeite.setEnabled(true);
            }
        }
    }
    
    private void ladeErsteSeite() {
        if(this.printpreview.getMaxImages() > 0) {            
            this.ButtonErsteSeite.setEnabled(false);
            this.ButtonVorherigeSeite.setEnabled(false);
            this.printpreview.setPrintImage(0);
            // entsperren der Buttons für letzteSeite und naechsteSeite
            if(this.ButtonLetzteSeite.isEnabled() == false) {
                this.ButtonLetzteSeite.setEnabled(true);        
            }
            if(this.ButtonNaechsteSeite.isEnabled() == false) {
                this.ButtonNaechsteSeite.setEnabled(true);
            }
        }
    }
    
    private void ladeLetzteSeite() {
        if(this.printpreview.getMaxImages() > 0) {            
            this.ButtonLetzteSeite.setEnabled(false);
            this.ButtonNaechsteSeite.setEnabled(false);
            this.printpreview.setPrintImage((this.printpreview.getMaxImages() - 1));
            // entsperren der Buttons für ersteSeite und vorherigeSeite
            if(this.ButtonErsteSeite.isEnabled() == false) {
                this.ButtonErsteSeite.setEnabled(true);        
            }
            if(this.ButtonVorherigeSeite.isEnabled() == false) {
                this.ButtonVorherigeSeite.setEnabled(true);
            }
        }
    }
    
    private void ladeNaechsteSeite() {
        if(this.printpreview.getMaxImages() > 0) {
            int tmp = this.aktuellesimage + 1;
            this.aktuellesimage = tmp;
            if(tmp == (this.printpreview.getMaxImages() - 1)) {
                this.ButtonLetzteSeite.setEnabled(false);
                this.ButtonNaechsteSeite.setEnabled(false);
            }
            this.printpreview.setPrintImage(tmp);
            // entsperren der Buttons für ersteSeite und vorherigeSeite
            if(this.ButtonErsteSeite.isEnabled() == false) {
                this.ButtonErsteSeite.setEnabled(true);        
            }
            if(this.ButtonVorherigeSeite.isEnabled() == false) {
                this.ButtonVorherigeSeite.setEnabled(true);
            }
        }
    }
    
    public void setAktuelleSeite(int X) {
        if(this.printpreview.getMaxImages() > 0) {
            if(X == 0) {
                this.ButtonErsteSeite.setEnabled(false);
                this.ButtonVorherigeSeite.setEnabled(false);
            
                this.ButtonLetzteSeite.setEnabled(true);
                this.ButtonNaechsteSeite.setEnabled(true);
            }
            else {
                if(X == (this.printpreview.getMaxImages() - 1)) {
                    this.ButtonErsteSeite.setEnabled(true);
                    this.ButtonVorherigeSeite.setEnabled(true);
            
                    this.ButtonLetzteSeite.setEnabled(false);
                    this.ButtonNaechsteSeite.setEnabled(false);
                }
                else {
                    if(this.ButtonLetzteSeite.isEnabled() == false) {
                        this.ButtonLetzteSeite.setEnabled(true);        
                    }
                    if(this.ButtonNaechsteSeite.isEnabled() == false) {
                        this.ButtonNaechsteSeite.setEnabled(true);
                    }
                    if(this.ButtonErsteSeite.isEnabled() == false) {
                        this.ButtonErsteSeite.setEnabled(true);        
                    }
                    if(this.ButtonVorherigeSeite.isEnabled() == false) {
                        this.ButtonVorherigeSeite.setEnabled(true);
                    }                    
                }
            }
            this.aktuellesimage = X;
        }
        else {
            this.ButtonErsteSeite.setEnabled(false);
            this.ButtonVorherigeSeite.setEnabled(false);
            this.ButtonLetzteSeite.setEnabled(false);
            this.ButtonNaechsteSeite.setEnabled(false);
        }
    }
    
    public int getAktuelleSeite() {
        return this.aktuellesimage;
    }
    // ======================= Funktionen Definition END =======================
        
    
    
    // ==================== Eventhandler Definition START ======================
    private void abbrechenActionPerformed() {
        this.abbrechen();
    }
    
    private void druckenActionPerformed() {
        this.drucken();
    }
    
    private void ladeVorherigeSeiteActionPerformed() {
        this.ladeVorherigeSeite();        
    }
    
    private void ladeErsteSeiteActionPerformed() {
        this.ladeErsteSeite();        
    }
    
    private void ladeLetzteSeiteActionPerformed() {
        this.ladeLetzteSeite();        
    }
    
    private void ladeNaechsteSeiteActionPerformed() {
        this.ladeNaechsteSeite();        
    }
    // ===================== Eventhandler Definition END =======================
    
    
    
    // ======================= Konstruktor definition START ====================
    public FormPrintControl(MyPrintPreview X) {
        //System.out.println("Konstruktor FormPrintControl");
        this.printpreview = X;
        // erzeugen des eigenen Frames wovon ich erbe
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setBounds(695, 100, 250, 110);
        this.setLayout(null);
        this.setResizable(false);        
        this.setTitle("Druckkontrolle");
        
        this.ScrollPaneFrame = new javax.swing.JScrollPane();
        this.ScrollPaneFrame.setBounds(0, 0, 250, 110);
        this.add(this.ScrollPaneFrame);
        this.setComponentZOrder(this.ScrollPaneFrame, 0);
        
        this.ButtonErsteSeite = new javax.swing.JButton("<<");
        this.ButtonErsteSeite.setBounds(20, 20, 50, 20);
        this.ScrollPaneFrame.add(this.ButtonErsteSeite);
        this.ScrollPaneFrame.setComponentZOrder(this.ButtonErsteSeite, 0);
        
        this.ButtonVorherigeSeite = new javax.swing.JButton("<");
        this.ButtonVorherigeSeite.setBounds(70, 20, 50, 20);
        this.ScrollPaneFrame.add(this.ButtonVorherigeSeite);
        this.ScrollPaneFrame.setComponentZOrder(this.ButtonVorherigeSeite, 0);        
        
        this.ButtonNaechsteSeite = new javax.swing.JButton(">");
        this.ButtonNaechsteSeite.setBounds(120, 20, 50, 20);
        this.ScrollPaneFrame.add(this.ButtonNaechsteSeite);
        this.ScrollPaneFrame.setComponentZOrder(this.ButtonNaechsteSeite, 0);
        
        this.ButtonLetzteSeite = new javax.swing.JButton(">>");
        this.ButtonLetzteSeite.setBounds(170, 20, 50, 20);
        this.ScrollPaneFrame.add(this.ButtonLetzteSeite);
        this.ScrollPaneFrame.setComponentZOrder(this.ButtonLetzteSeite, 0);
        
        this.ButtonDrucken = new javax.swing.JButton("Drucken");
        this.ButtonDrucken.setBounds(20, 50, 100, 20);
        this.ScrollPaneFrame.add(this.ButtonDrucken);
        this.ScrollPaneFrame.setComponentZOrder(this.ButtonDrucken, 0);
        
        this.ButtonAbbrechen = new javax.swing.JButton("Abbrechen");
        this.ButtonAbbrechen.setBounds(120, 50, 100, 20);
        this.ScrollPaneFrame.add(this.ButtonAbbrechen);
        this.ScrollPaneFrame.setComponentZOrder(this.ButtonAbbrechen, 0);        
        
        // Alle Eventhandler implementieren
        this.ButtonAbbrechen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                abbrechenActionPerformed();
            }
        });
        
        this.ButtonDrucken.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                druckenActionPerformed();
            }
        });
        
        this.ButtonVorherigeSeite.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ladeVorherigeSeiteActionPerformed();
            }
        });
        
        this.ButtonErsteSeite.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ladeErsteSeiteActionPerformed();
            }
        });
        
        this.ButtonLetzteSeite.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ladeLetzteSeiteActionPerformed();
            }
        });
        
        this.ButtonNaechsteSeite.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ladeNaechsteSeiteActionPerformed();
            }
        });
        
        
        
        this.setVisible(true);
    }
    // ======================= Konstruktor definition ENDE =====================
}


Das Canvas Objekt
Java:
package myprintpreview;

public class FormPrintPreview extends java.awt.Canvas {
    // ====================== Steuerelement Deklaration START ==================    
    // ===================== Steuerelement Deklaration END =====================
    
    
    
    // ====================== Variablen Deklaration START ======================
    private java.awt.image.BufferedImage printImage = null;
    // ======================= Variablen Deklaration END =======================
        
    
    
    // ====================== Funktionen Definition START ======================
    public java.awt.image.BufferedImage getPrintImage() {
        return printImage;        
    }
  
    public void setPrintImage(java.awt.image.BufferedImage printImage) {
        this.printImage = printImage;
        this.repaint();
    }
  
    public void paint(java.awt.Graphics g)  {
        if(printImage != null) {            
            g.drawImage(this.printImage, 0, 0, this);
        }        
    }
    // ======================= Funktionen Definition END =======================
    
    
    
    // ==================== Eventhandler Definition START ======================
    // ===================== Eventhandler Definition END =======================
    
           
    
    // ======================= Konstruktor definition START ====================
    public FormPrintPreview() {
        this(null);
    }    
    
    public FormPrintPreview(java.awt.image.BufferedImage printImage) {
        super();
        this.printImage = printImage;
    }
    // ======================= Konstruktor definition ENDE =====================
}


Das eigene Printable Objekt
Java:
package myprintpreview;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;


public class MyPrintPage implements Printable {
    
    private java.awt.image.BufferedImage image;
    
    public MyPrintPage() {
        this.image = new java.awt.image.BufferedImage(595, 842, java.awt.image.BufferedImage.TYPE_INT_RGB);
    }
    
    public java.awt.image.BufferedImage getImage() {
        return this.image;
    }
    
    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
        if (page > 0) { /* We have only one page, and 'page' is zero-based */
            return NO_SUCH_PAGE;
        } else {            
            Graphics2D g2d = (Graphics2D)g;
            g2d.translate(pf.getImageableX(), pf.getImageableY());
            return PAGE_EXISTS;
        }
    }
}


Das ist zwar jetzt viel Code, aber wenn jemand eine Lösung weiss:
- wie ich alle Bilder in einem DruckJob an den Drucker(Druckwarteschlange) senden kann
- warum das mit dem Printable Objekt nicht funktioniert
- wie ich das aktuelle Druck Problem lösen kann mit Cast

würde ich mich darüber freuen.

Cu Nathaniell
 
Da steht ja auch was der Fehler ist.
Der Fehler ist in dieser Zeile.
Code:
PrinterJob prjob = ((PrinterGraphics)g2).getPrinterJob();

Du kannst kein Graphics2d-Object in einen PrinterJob casten.

MFG

Sascha
 
Bin kein Experte im drucken unter Java, aber versuch mal
Java:
PrintJob prjob = getToolkit().getPrintJob(bla, bla, bla); //Guck in die API, was da reingehört
Graphics pg = prjob.getGraphics();

So, jetzt versuch mal auf das Graphics-Objekt vom PrintJob dein Image zu zeichnen und versuche das mal zu drucken.

Ansonsten:
Hier
oder
hier
 
@ Sascha
Das habe ich doch auch schon gesagt das das nicht geht laut der Exception.
Aber wie schon gesagt habe, habe ich dafür auch Referenzcode gefunden!!

@ All Users
Aber wie kann es dann gehen Habe dazu auch schon ein paar fragen dazu fornuliert!!?


CU Nathaniell
 
Danke, dass du mein Post überlesen hast. Da hab ich schon geschrieben, dass du auf das Graphics Objekt des Printjobs zeichnen musst. Für den Fall dass du damit nicht zurecht kommst, hab ich 2 Links.
 
@ Sascha
Die Seite habe ich auch schon genötigt!!

Wie ich gehört habe ist das javax.print package für das Drucken von Graphics2D Objekten geeignet die ich ja auch wie oben im Code beschrieben über die Funtkion

Java:
public java.awt.image.BufferedImage createImage() {
    java.awt.image.BufferedImage ret = new java.awt.image.BufferedImage(595, 842, java.awt.image.BufferedImage.TYPE_INT_RGB);
return ret;
}

und dann über das zurück gelieferte BufferedImage die dortige createImage - Funktion verwende.

CU Nathaniell
 
@Matze

Tut mir leid Matze ich wollte nur nicht das weitere Kommentare kommen wie Google benutzen usw.

Den Ansatz den du verfolgst der geht über diese Printable - Objekte die man selber schreiben muss und ich habe keine Ahnung wie diese Objekte dann für das Drucken aufgerufen werden

Außerdem ist wie schon gesagt worden das package javax.print besser dafür geeignet.
Die Referenz für diese Seite wo das Stand weiss ich im moment nicht mehr.

Ich kann das Graphics Objekt nicht mit dem Printjob Zeichnen da ich ansonsten meine Struktur für Druckvorschau total kaputt mache.

Ich muss irgendwie die getGraphics - Methode der BufferedImages nutzen können um das zu Zeichnen!!
Kennt dafür jemand einen Weg?

PS: @ Matze das war nicht Böse gemeint das ich nicht gleich auf deinen Thread geantwortet habe

CU Nathaniell
 
Zuletzt bearbeitet:
Zurück