Drucken mehrerer Panel von einem JTabbedPane

koddy013

Mitglied
Hallo,

ich habe eine JTabbedPane mit mehrere Panel. Sag mal für die Vereinfachung habe ich 2 TabPanel.
Durch einem ActionPerformed-Button hätte ich gerne diese beide Panel in verschiedene Papier auszudrucken. (d.h. in diesem Fall 2 Papier).

Meine ActionPerformed sieht wie folgt:
Java:
    private class  PrintListener  implements ActionListener
    {
        public void actionPerformed(ActionEvent evt)
        {
            PrinterJob job = PrinterJob.getPrinterJob(); //Get the printer's job list
            PageFormat pageFormat = job.defaultPage();
            job.setPrintable(new Printable()
            { //We print with this class (btnPrintAction, which implements Printable)
                public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException
                {
                    if (pageIndex >= 1)
                    {
                        return Printable.NO_SUCH_PAGE;
                    }
                    else
                    {
                        Graphics2D g2d = (Graphics2D) graphics;
                        g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

                        Paper paper = new Paper();
                        paper.setSize(585, 832);
                        paper.setImageableArea(0, 0, 585, 832);
                        view.panel1.print(graphics);
                        view.panel2.print(graphics);
                        return Printable.PAGE_EXISTS;
                    }
                }
        });

Aber ich kann nicht die beiden Panel zusammen ausdrucken. Die 2.Panel schreibt immer die 1.Panel über.
Kann jemand helfen, wie ich den Code verbessern soll?

Danke im voraus für jede Hilfe.

mfg,
 
Danke für das Antwort.
Diese finde ich klasse, aber ich habe noch eine Problem damit.

Auf der Beispiel von Google steht folgendes
book1.append(VolunteerApplication.this, new PageFormat());

also bei mir anstatt "VolunteerApplication.this", schreibe ich "view.panel1" und bei book2 schreibe ich "view.panel2".
Aber diese Schreibweise funktioniert nicht hier.

Eine Klasse kann ich nicht schreiben, da in diesem Panel auf mehrere interne Panel und Tabelle besteht.

Weiss du, wie kann ich den Code verbessern?

Danke im voraus für jede Hilfe.

Liebe Grüße,
 
Moin,

Danke für das Antwort.
Diese finde ich klasse, aber ich habe noch eine Problem damit.
Auf der Beispiel von Google steht folgendes
also bei mir anstatt "VolunteerApplication.this", schreibe ich "view.panel1" und bei book2 schreibe ich "view.panel2".
Aber diese Schreibweise funktioniert nicht hier.
Eine Klasse kann ich nicht schreiben, da in diesem Panel auf mehrere interne Panel und Tabelle besteht.
Weiss du, wie kann ich den Code verbessern?
Danke im voraus für jede Hilfe.
Liebe Grüße,

wenn Du Dir mal die Deklaration der Methode "append" aus dem ersten Link von HonniCilest anschaust, dann wirst Du auch sehen, was genau Du dort übergeben musst ;-]
Von "Klasse" steht da nämlich nichts ;-]


Gruß
Klaus
 
Zuletzt bearbeitet:
Moin,



wenn Du Dir mal die Deklaration der Methode "append" aus dem ersten Link von HonniCilest anschaust, dann wirst Du auch sehen, was genau Du dort übergeben musst ;-]
Von "Klasse" steht da nämlich nichts ;-]


Gruß
Klaus


Korrekt, der 2. Link sollte lediglich ein Beispiel darstellen, ich würde eine Mischungen aus deiner Lösung und dem Beispiel basteln, d.h. du gehst in etwa wie folgt vor:
-Book anlegen
-2x die Methode append() von Book ausführen, der erste Parameter ist dort ein Printable, kommt dir doch sicher irgendwie bekannt vor ;)
-PrinterJob anlegen
-Book als Pageable dem PrinterJob übergeben
-und so weiter und sofort

Du gehst also im Prinzip deine Vorgehensweise 2x durch. Der Unterschied ist nur, dass du Ergebnisse erst einzeln aneinanderhängst bevor du sie druckst. Dadurch wird gewährleistet, dass du auf keinen Fall irgendetwas überschreibst.
 
Zurück