Das aktuelle Fenster drucken

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Guden, ihr könnt mir sicherlich helfen.
So und zwar :
Ich habe ein Java-Programm, und will, dass das Programm das aktuelle Fenster druckt. Also wenn ich zum Beispiel Kundendaten anzeigen lasse, will ich dieses Fenster mit Klick auf "Drucken" in der Menüleiste (besteht bereits) ausdrucken können.
Habe bis her nur das gefunden :
Code:
package kundenverwaltung;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.print.*;
public class PrintStuff
{
  public static void main( String[] args ) throws PrinterException
  {
    PrinterJob pjob = PrinterJob.getPrinterJob();
    if ( pjob.printDialog() == false )
      return;
    pjob.setPrintable( new TextPrintable() );
    pjob.print();
  }
  
    static class TextPrintable implements Printable
  {
    static Font font = new Font( "Times", Font.PLAIN, 20 );
    public int print( Graphics g, PageFormat pageFormat, int pageIndex )
    {
      if ( pageIndex >= 2 )
      return Printable.NO_SUCH_PAGE;
      g.setFont( font );
      g.drawString( "Ich bin der King " + pageIndex, 100, 100 );
      return Printable.PAGE_EXISTS;
    }
  }
}

Allerdings will ich nicht den String ausdrucken, sondern das aktuelle Frame ! Könnt ihr den Quelltext so verändern, dass mein Traum in Erfüllung geht ? Das wäre echt nett !!
 

André Uhres

Top Contributor
Vielleicht hilft dir dieses Beispiel weiter:
Code:
package print;
/*
 * PrintTest.java
 */
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
import javax.swing.*;
public class PrintTest {
    public static void main(String[] args) {
        PrintFrame prfr = new PrintFrame();
        prfr.setVisible(true);
    }
}
 
/*
 * PrintFrame
 */
class PrintFrame extends JFrame implements ActionListener{
    private PrintPanel pp;
    public PrintFrame() {
        super("Printing Swing");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        pp = new PrintPanel();
        getContentPane().add(pp);
        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("File");
        JMenuItem printItem = new JMenuItem("Print...");
        menuBar.add(menu);
        menu.add(printItem);
        printItem.addActionListener(this);
        setJMenuBar(menuBar);
        pack();
        setLocationRelativeTo(null);
    }
    public void actionPerformed(ActionEvent evt){
        String command = evt.getActionCommand();
        if(command.equals("Print...")) {
            PrinterJob printJob = PrinterJob.getPrinterJob();
            PageFormat pageFormat = new PageFormat();
            pageFormat.setOrientation(PageFormat.LANDSCAPE);
            printJob.setPrintable(pp, pageFormat);
            if (printJob.printDialog())
                try {
                    printJob.print();
                } catch(PrinterException pe) {
                    System.out.println("Error printing: " + pe);
                }
        }
    }
}
 
/*
 * PrintPanel
 */
class PrintPanel extends JPanel implements Printable {
    public PrintPanel() {
        setBackground(Color.white);
        setPreferredSize(new Dimension(300, 200));
    }
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g.setColor(Color.black);
        g.drawRect(20,20,100,50);
        g.fillOval(80,80,60,30);
        g.drawString("Printing Swing is simple",100,150);
        g.setColor(Color.red);
        g.drawRect(0,0,299,199);
    }
    public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
        if (pageIndex > 0) {
            return(NO_SUCH_PAGE);
        } else {
            int x = (int)pageFormat.getImageableX() + 1;
            int y = (int)pageFormat.getImageableY() + 1;
            g.translate(x,y);
            RepaintManager currentManager = RepaintManager.currentManager(this);
            currentManager.setDoubleBufferingEnabled(false);
            paint(g);
            currentManager.setDoubleBufferingEnabled(true);
            return(PAGE_EXISTS);
        }
    }
}
 
G

Guest

Gast
Danke !
Wie rufe ich das auf ?

In der Klasse "VerwaltungGUI" :

if(e.getSource()==Drucken)
{
?????
}

Versteh ihr was ich meine ?

Eine Menübar habe ich ja bereits, die Klasse "Drucken" habe ich in die package eingebunden, jetzt muss ich die Klasse Drucken noch aufrufen können.
Kann jemand den obigen Code vervollständigen ?
 

André Uhres

Top Contributor
Anonymous hat gesagt.:
..Wie rufe ich das auf ?..
Das zu druckend JPanel implementiert Printable, mit der angegebenen "print" Methode:
Code:
class PrintPanel extends JPanel implements Printable {...}
Das Panel übergibst du dann dem PrinterJob (siehe "actionPerformed"):
Code:
printJob.setPrintable(pp, pageFormat);
 
G

Guest

Gast
Danke soweit, aber es geht immernoch nix. So langsam geht das richtig in die Nerven..

Also, die Klassen für das Drucken sieht so aus :
Code:
package kundenverwaltung;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.print.*;
public class PrintStuff
{
  public static void main( String[] args ) throws PrinterException
  {
    PrinterJob pjob = PrinterJob.getPrinterJob();
    if ( pjob.printDialog() == false )
      return;
//      pjob.setPrintable( new TextPrintable() );
      pjob.print();
  }
  
  public void actionPerformed(ActionEvent evt){
      String command = evt.getActionCommand();
      if(command.equals("Drucken")) {
          PrinterJob printJob = PrinterJob.getPrinterJob();
          if (printJob.printDialog())
              try {
                  printJob.print();
              } catch(PrinterException pe) {
                  System.out.println("Error printing: " + pe);
              }
        }      
     } 
 }

Im Hauptprogramm steht folgendes :
Code:
if(e.getSource()==Drucken)
	    {
		 PrintStuff pjob = new PrintStuff ();
          }

Fehler werden keine angezeigt, aber wenn ich das Programm starte, und in der Menüleiste auf Drucken gehe, geschieht nix..
Woran liegt das ????????
 

André Uhres

Top Contributor
Du hast das hier vergessen:

Code:
printJob.setPrintable(pp, pageFormat);

pp ist ganz einfach ne Referenz auf das zu druckende JPanel das Printable implementiert
und die "print"-Methode enthält die ich dir oben angegeben hab :wink:
 
G

Gast

Gast
sag mal. als format hast du dort ja panorama ausgewählt. wenn ich das jetzt einfach mal drucke, dann kommt nur ungefähr 1/4 einer anwendung auf eine din a 4 seite. mehr druckt der auch nicht. kann man das nicht auf eine din a 4 seite packen?
 

André Uhres

Top Contributor
Gast hat gesagt.:
..kann man das nicht auf eine din a 4 seite packen?
In der "print" Methode kannste skalieren :cool:
Code:
           Graphics2D g2d = (Graphics2D)g;
            g2d.scale(0.5d, 0.5d);
Um die ganze Papierfläche (oder fast die ganze) zu nutzen:
Code:
           Paper paper = new Paper();
            // Set to A4 size.
            paper.setSize(594.936, 841.536);
            // Set the margins.
            paper.setImageableArea(0, 0, 594.936, 841.536);
            pageFormat.setPaper(paper);
In der "print" Methode kannste nochmal x/y korrigieren:
Code:
           int x = (int)pageFormat.getImageableX() + 20;
            int y = (int)pageFormat.getImageableY() + 20;
            g.translate(x,y);
            Graphics2D g2d = (Graphics2D)g;
            g2d.scale(0.75d, 0.75d);
 
G

Guest

Gast
André Uhres hat gesagt.:
Du hast das hier vergessen:

Code:
printJob.setPrintable(pp, pageFormat);

pp ist ganz einfach ne Referenz auf das zu druckende JPanel das Printable implementiert
und die "print"-Methode enthält die ich dir oben angegeben hab :wink:

Da bekomm ich die Fehlermeldungen : printjob cannot be resolved und pageformat cannot be resolved.
Ist das eine unlösbare Aufgabe ???????
 
G

Gast

Gast
Hallo, möchte das gleiche mit einer JTextArea machen.

The method setPrintable(Printable, PageFormat) in the type PrinterJob is not applicable for
the arguments (JTextArea, PageFormat)
Code:
                PrinterJob printJob = PrinterJob.getPrinterJob(); 
                PageFormat pageFormat = new PageFormat(); 
                pageFormat.setOrientation(PageFormat.LANDSCAPE); 
                printJob.setPrintable(textArea, pageFormat); 
                try { 
                    printJob.print(); 
                } catch(PrinterException pe) { 
                    System.out.println("Error printing: " + pe); 
                }
hab leider keinen alternativen befehl gefunden. vielleicht könnt ihr mir weiterhelfen.
 
G

Gast

Gast
hab keine JTextArea Klasse erzeugt. ist es zwingend notwendig dies in einer eigenen Klasse zu tun oder kann man das irgendwie umgehen? casten kann mans leider auch nicht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
kodela aktuelle Position des Hauptfensters abfragen Allgemeine Java-Themen 12
A Swing Immer aktuelle Mausposition anzeigen lassen Allgemeine Java-Themen 7
F Aktuelle Variable Allgemeine Java-Themen 2
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
M Aktuelle Systemzeit und Datum abfragen Allgemeine Java-Themen 2
K kontinuierlich aktuelle Bestellsystem-Liste mit farbigem Status Allgemeine Java-Themen 2
F Die aktuelle Uhrzeit zurückgeben lassen Allgemeine Java-Themen 4
DEvent Aktuelle Uhrzeit per Anwendung Allgemeine Java-Themen 4
MQue aktuelle Wetterdaten für Java- Programm Allgemeine Java-Themen 9
Q Serialisierung / Speicherung Geschwindingkeit & Aktuelle Position Allgemeine Java-Themen 7
G Reflection: aktuelle bzw umschliessende Methode? Allgemeine Java-Themen 7
Kidao Wie ordne ich die aktuelle Zeit in einer Zeitreihe eine? Allgemeine Java-Themen 6
B Aktuelle Zeit im Format YYYY-MM-DD HH-MM-SS in Logfile schre Allgemeine Java-Themen 8
R Aktuelle Kompatibilitätsliste für JRE auf verschiedenen OS´s Allgemeine Java-Themen 2
G Aktuelle JRE Version? Allgemeine Java-Themen 7
F Wie bekomme ich die aktuelle aufgerufene Methode herraus? Allgemeine Java-Themen 6
L Das aktuelle Directory, in dem sich das Programm ausdrucken Allgemeine Java-Themen 8
J File: Inhalt des Ordners aus dem die aktuelle Datei ausgefüh Allgemeine Java-Themen 6
O aktuelle Tage bis zum jahresende ermitteln Allgemeine Java-Themen 3
S aktuelle url aus browser holen Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
A Zusammenspiel javafx Fenster Allgemeine Java-Themen 1
M StdDraw-Fenster schliessen Allgemeine Java-Themen 1
D Klassen 2 Fenster in GUI Allgemeine Java-Themen 3
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Fenster schließen verhindern Allgemeine Java-Themen 13
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
K Interface Fenster mit Regler Allgemeine Java-Themen 2
S BMI Rechner mit eclipse Visual Editor (Seperates Fenster) Allgemeine Java-Themen 7
F Fenster schließen bei Klick auf Kreuz Allgemeine Java-Themen 14
P Herausfinden, ob ein Process ein Fenster hat Allgemeine Java-Themen 1
K Doppeltes Fenster Allgemeine Java-Themen 3
F DOS-Fenster unterdrücke? Allgemeine Java-Themen 0
A Anderes Fenster neu laden Allgemeine Java-Themen 16
B Geöffnetes Fenster verifizieren Allgemeine Java-Themen 2
T LookAndFeel Java Skinning Fenster Allgemeine Java-Themen 13
M CapsLock abfragen wenn Fenster wieder aktiviert wird Allgemeine Java-Themen 5
E Prüfen ob Fenster mit Namen offen ist Allgemeine Java-Themen 2
G verdeckte Fenster werden im Vordergrund gezeichnet Allgemeine Java-Themen 6
N Fenster lädt nicht Allgemeine Java-Themen 28
J Zugriff auf Poker-Client Fenster Allgemeine Java-Themen 14
A Erkennen welches Fenster bei windowDeactivated aktiviert wird? Allgemeine Java-Themen 2
S Frage für ein popup Fenster Allgemeine Java-Themen 4
J Swing Wird invisible, nicht-ref. Fenster vom GC entfernt? Allgemeine Java-Themen 11
Z Fenster vergrößern und verkleiern Allgemeine Java-Themen 14
S Fenster "verschwindet" nicht, trotz setVisible(false); Allgemeine Java-Themen 22
A Zeichen beim Eingeben in ein DOS-Fenster nicht anzeigen? Allgemeine Java-Themen 3
J X11 app in Java Fenster Allgemeine Java-Themen 4
R Von Java aus Browser Fenster oeffnen und Webseite ausgeben? Allgemeine Java-Themen 2
H Fenster focus Allgemeine Java-Themen 5
Escorter .jar Datei Classpath mitgeben ohne Dos Fenster Allgemeine Java-Themen 8
ARadauer Fenster suchen und Verschieben Allgemeine Java-Themen 6
G Keyboard Shortcut (bei nicht aktivem fenster) Allgemeine Java-Themen 2
Steev Screenshot vom Bereich behind dem aktuellen Fenster machen Allgemeine Java-Themen 24
D Welches Fenster ist im moment aktiv? Allgemeine Java-Themen 11
T Java Fenster Allgemeine Java-Themen 5
C Fenster öffnen Allgemeine Java-Themen 4
P Login- Fenster Allgemeine Java-Themen 11
B kleines modales transparents Fenster ohne rahmen und buttons Allgemeine Java-Themen 15
J text aus externem fenster lesen Allgemeine Java-Themen 3
F neues fenster Allgemeine Java-Themen 3
P JTabbedPane Fenster minimieren Allgemeine Java-Themen 15
K Warten auf die Eingabe aus Fenster.... Allgemeine Java-Themen 2
M neue Thread in neuem Fenster Allgemeine Java-Themen 3
MQue Fenster aufklappen Allgemeine Java-Themen 3
C Fenster blinken lassen Allgemeine Java-Themen 2
T Explorer-Fenster öffnen mit Java Allgemeine Java-Themen 9
S Windows Fenster finden Allgemeine Java-Themen 9
E Wie bekomme ich mein Image in das Fenster Allgemeine Java-Themen 2
E Mit Button ein Fenster öffnen Allgemeine Java-Themen 4
G Java Fenster öffnen nach Iconklick(desktop) (helppls) Allgemeine Java-Themen 3
G mehrere JPanels als Fenster benutzen Allgemeine Java-Themen 3
M ALT-F4 fenster schließen unterdrücken Allgemeine Java-Themen 2
S Swing - Problem mit Fenster-/Komponenten-Größe Allgemeine Java-Themen 3
M 2 verschiedene LookAndFeels in einem Fenster möglich? Allgemeine Java-Themen 6
G Leere Fenster (Keine Schrift, Reiter/ Buttons) bei Java Allgemeine Java-Themen 5
F Fenster friert ein! Allgemeine Java-Themen 2
K JAVA Fenster-Modi Allgemeine Java-Themen 5
S fenster umbenennen Allgemeine Java-Themen 4
J Fenster aufpopen lassen? Allgemeine Java-Themen 8
N Java Fenster schließen Allgemeine Java-Themen 2
B JNI: HWND von aufrufendem Fenster bekommen. Allgemeine Java-Themen 4
W Fenster (EXCEL) aktivieren Allgemeine Java-Themen 6
J Fenster mit paint Methode selbst zeichnen Allgemeine Java-Themen 3
G Fenster verbinden (docken) Allgemeine Java-Themen 4
G Fenster/Frame schließen Allgemeine Java-Themen 16
L Windows-Fenster "Arbeitsplatz" anzeigen Allgemeine Java-Themen 13
G Auf KeyEvent reagieren, wenn das Fenster nicht aktiv ist Allgemeine Java-Themen 8
C alle Fenster bleiben grau Allgemeine Java-Themen 4
G Fenster durch eigenen Button minimieren Allgemeine Java-Themen 6
OnDemand Drucken / Druckserver Allgemeine Java-Themen 13
M Drucken drawString(); Allgemeine Java-Themen 1
M Drucken ohne Dialog Allgemeine Java-Themen 1
M Drucken von Dateien Allgemeine Java-Themen 10
S Seitenausrichtung beim Drucken Allgemeine Java-Themen 1
T Drucken einer PDF Datei Allgemeine Java-Themen 4
S Input/Output Drucken Allgemeine Java-Themen 2
C Mehrere Seiten drucken in Hoch- und Querformat Allgemeine Java-Themen 0

Ähnliche Java Themen


Oben