Fenster drucken
-
Hallo,
Kann man von einem Fenster quasi einen Screenshot machen und drucken lassen?
-
Dafür gibt es das Interface Printable. Dieses Interface müsste die Klasse implementieren, die gedruckt werden soll. In deinem Fall also von der Fensterklasse. Dort musst du dann das Interface implementieren (nur eine Methode). Drucken ist in Java ein wenig naja heikel. Versuch es mal wenn was unklar ist helfen wir hier gern weiter.
-
Mach mir mut....
-
Nee so schlimm ist es nicht aber für mich am Anfang schwer zu verstehen. Was natürlich nichts heissen muss
-
Soweit so gut. Also ich kann jetzt diesen Drucken Dialog öffnen und text ausgeben den ich mit drawString mache. Aber wie kann ich denn jetzt mein Fenster drucken?
-
Also in der Regel läuft das so. Die Druckmethode ruft intern die paint()-Methode des Fensters mit dem Druckerkontext auf (das ist das Graphics-Objekt, welches geräteunabhängig ist) und dann wird gedruckt.
-
das klingt doch total simpel. warum meintest du das sei schwer?
-
@Bär: Es ist simpel solange man wirklich nur ein paar Komponenten etc. drucken will. Wenn man Dokumente oder ähnliches zu drucken hat verhält es sich anders. Vor allem bei der Pagination aber wie gesagt es muss sich ja nicht für jeden gleich schwer auswirken wie damals auf mich
-
Also irgendwie will das nicht. Ich habe einen ganz einfachen JFrame erzeugt.
public class test extends JFrame implements Printable
Wenn jemand einen Button drückt wird folgendes gemacht
PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintable(new SimplePrint()); if (job.printDialog()) { try { job.print(); } catch (PrinterException e) { JOptionPane.showMessageDialog(null, e.getMessage()); } }
Und hier die Methode print()
public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException { if (pageIndex == 1) return Printable.NO_SUCH_PAGE; g.setFont(fnt); g.setColor(Color.BLACK); g.drawString("Page " + (pageIndex+1), 100, 100); return Printable.PAGE_EXISTS; }
Was mache ich denn falsch?
-
Wie wäre es mit einem paint(g)? Das ist doch das was ich oben meinte.
-
Ups, das paint(g) habe ich vergessen zu schreiben. In meinem Programm ist das schon drin. Aber leider wird das Fenster trotzdem nicht gedruckt. Es wird nur immer "PAGE 1" usw gedruckt
Kann man das an die falsche Stelle schreiben? Es steht einfach in print() drin.