AWT Printing

Status
Nicht offen für weitere Antworten.

Developer_X

Top Contributor
Hi, wie kann man AWT Componente ganz leicht drucken, ich habe ein Canvas auf das ich zeichne, ich möchte nun ganz einfach, dass "Canvas" drucken, wenns geht mit PrintDialog,
doch wenn ich die methode
Java:
Canvas c;
//...
public void print()
{
      c.print();
}
passiert nichts, dann habe ich hier nachgelesen
JPanel drucken - Swing + AWT - JavaForum
wie man printen könnte,
da kam ein Dialog, der hatte es auch gedruckt, war aber ne weiße seite, villeicht lag es auch in der methode:
print

weil wenn man seine klasse von printable erben lässt, braucht man diese methode ja
Java:
public int print(Graphics g, PageFormat pf, int page) throws PrinterException 
	{
		 if (page > 0) 
		 { 
			 return NO_SUCH_PAGE;
		 }
		       
		g = v.getGraphics().create();

		return PAGE_EXISTS;
	}
(Mein Canvas Objekt bzw. die Instanz davon heißt v)
ich glaube der Springende punkt ist, dass man "g" die Graphics von "v" zuweißt, wer kennt ne einfachere lösung als das, oder kann mir sagen wie ich "g" die Graphics von "v" zuweisen kann?

Danke für eure Hilfe,
DeveloperX
 

Rainbow

Bekanntes Mitglied
auf der Seite bei der du das nachgelesen hast steht doch noch mehr, was du gar nciht in deiner Methode drin hast...
ich bin mir nicht ganz sicher, aber ich denke, es muss auf jeden Fall ein translate rein, deswegen auch die weiße Seite, weil das Canvas wohl ausserhalb des Blattes gedruckt wurde, also nciht drauf ist.

ich habe selbst auch schon mal so etwas geschrieben und habe das drin stehen
Java:
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
paint(g2d);
 

Developer_X

Top Contributor
danke für deine Antwort, doch ich habe das Problem entdeckt, villeicht ist es das,
also wenn ich auch nur irgendein fenster über meiner zeichen fläche, ein Canvas Object, schiebe, dann verschwindet all die grafik, ebenso ist es wenn ich printe, die ganze grafik verschwindet vom cavnas und dann erst kommt der print dialog, kann mir da einer helfen?
 

mmz

Aktives Mitglied
Also, bei mir funktioniert das
Java:
// Aktion zum Drucken
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        PrinterJob printJob = PrinterJob.getPrinterJob();
        printJob.setPrintable(this); // hier anstatt this deine printable Klasse einsetzen
        if (printJob.printDialog()) {
            try {
                printJob.print();
            } catch (Exception ex) {
                throw new RuntimeException(ex);
            }
        }
    }
    // print wird überschrieben
    // Hier die aufrufenden Klasse, aber sollte kein Thema sein das in deiner
    // von Canvas abgeleiteten Klasse (oder doch besser JPanel!!!) umzusetzen
    public int print(Graphics g, PageFormat pf, int index) throws
            PrinterException {

        Graphics2D g2 = (Graphics2D) g;
        if (index >= 1) {
            return Printable.NO_SUCH_PAGE;
        } else {

            jPanel1.printAll(g2); // hier natürlich auch anpassen, welche Komponente gedruckt werden soll
            return Printable.PAGE_EXISTS;
        }
    }
Hier wird der komplette Inhalt des Panels ( JFrames ) je nach dem gedruckt. Plus Dialog.

Umbauen kannst es ja auf deine Bedürfnisse... :lol: Nur nen Grundgerüst.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben