Dannyboy Geschrieben 6. Oktober 2008 Geschrieben 6. Oktober 2008 (bearbeitet) Hallo Leute, aktuell habe ich eine neue Aufgabe bekommen. Und zwar ist es so das ich meine eigene Java Anwendung um eine wichtige zusätzliche Funktionalität erweitern soll. Zunächst einmal eine grobe Beschreibung zu meiner Anwendung: Meine Anwendung ist eine Client-Server-Anwendung (Visualisierung konkreter Datenbestände mit Hilfe einer GUI) mit JDBC Connector und der Anwender hat die Möglichkeit spezielle Suchfilter zu benutzen, um in einer speziellen DB-Tabelle ein Ergebnis zu erzielen. Die Suche sowie die dazugehörige Ergebnismenge ist bereits komplett abgeschlossen und funktioniert auch mit meiner GUI Anwendung einwandfrei. Jetzt soll der Anwender aber auch die Möglichkeit haben, sich die Ergebnisinformationen, die mir die Anwendung in Tabellenform liefert, als HTML Seite anzuzeigen (spezielle Vorlage, wie das Ganze in HTML auszusehen hat, ist auf dem Papier vorhanden!) und sich diese Vorlage dann auch auszudrucken. Soll heißen er markiert eben den Satz den er haben will in der Ergebnismenge (ist ein TableModel) und klickt z.B. auf nen Button "Anzeigen" (hab ich vorab schon erstellt und wird in der initialize()-Methode meiner View-Klasse integriert sobald die Verbindung zur HTML Vorlage abgeschlossen ist) und dann soll eben die HTML Vorlage erscheinen (mit eben den Informationen aus der Tabelle). Diese HTML Seite soll nach Möglichkeit auch ausgedruckt werden können. So bevor Ihr Euch jetzt fragt wieso man das Ganze noch als HTML Seite haben soll kann ich Euch sagen das bei uns die Sachbearbeiter zwar mit meiner Anwendung unseren Partnern am Telefon Auskunft über gewisse Datensätze geben können; unsere Partner aber natürlich auch unter Umständen etwas Festes in der Hand haben wollen (daher die Möglichkeit eine HTML Vorlage anzuzeigen und das Ganze auszudrucken). Bisher habe ich ein wenig recherchiert und mir sind ein paar Dinge durch den Kopf gegangen. So wie ich gesehen habe wird des öfteren immer wieder JEditorPane genannt, das wohl html basierten Text anzeigen kann. Das Blöde an der Sache wäre nur das ich dann irgendwie die zusätzliche Funktionalität des Druckens integrieren müsste. Und ob das so trivial möglich ist weiß ich eben nicht (gibt soviel ich weiß auch ne Print API). Schlecht wäre es natürlich nicht wenn es einen internen Java Standardbrowser mit ganz wenigen Funktionen geben würde (z.B. Drucken). Dann müsste ich nicht das Eine (eventuell mit JEditorPane die Vorlage erstellen) und später das Andere (eigene modifizierte Druck-Klasse schreiben) benutzen sondern könnte es mir wohl ein wenig leichter machen. Gibt es so einen Java Standardbrowser (oder etwas ähnliches) überhaupt in Java 5? Mir gehts jetzt auch zunächst nicht darum das Ihr mir hier sofort die fertige Lösung programmiert sondern ersteinmal um die Logik (wie ich das Problem am besten lösen könnte). Die Suche habe ich benutzt und vor ganzen 3 Jahren (!) hatte perdian (der sich mit Java wohl sehr gut auskennt) folgendes geschrieben: Ich würde generell auf JEditorPane verzichten. Die HTML Funktionalitäten sind weit hinter der Zeit zurückgeblieben (HTML 3.0 wird noch vernünftig angezeigt, das wars dann auch schon) und ist eigentlich mehr für Rendering als für Edit-Operationen ausgelegt. Alternativ kann man die beiden folgenden Pakete mal ausprobieren: Unter SWT das Browser Widget Viewing HTML pages with SWT Browser widget oder Swing basiert die WebBrowser Kompenente von JDIC https://jdic.dev.java.net/ Beide basieren nicht auf einer eigenen Browser Engine sondern embedden den IE (Win32) bzw. Mozilla (*nix). Damit ist zumindesens die Darstellung sehr gut, was das Bearbeiten angeht könnte es schwieriger werden, da hab ich mich bisher noch nicht wirklich mit beschäftigt. Ich werde mir beide Links mal von der Theorie her zu Gemüte führen, würde aber parallel dazu gerne wissen, ob es nicht vielleicht mittlerweile deutlich bessere Möglichkeiten gibt oder JEditorPane momentan doch eine gute Wahl wäre. Da ich Java nicht mal so eben aus dem Ärmel runterprogrammieren kann, werde ich es mir vielleicht auch etwas schwieriger machen als es vielleicht ist. Es ist auf jedenfall so das der Anwender wenn immer nur einen (!) Satz zum Anzeigen und späteren ausdrucken benutzen wird. Für erste Meinungen und Lösungsansätze wäre ich sehr dankbar! Bearbeitet 6. Oktober 2008 von Dannyboy Zitieren
Dannyboy Geschrieben 6. Oktober 2008 Autor Geschrieben 6. Oktober 2008 Ich muss noch ergänzen das ich hier mit Eclipse 3.2.2 entwickle (integriert sind Plugins wie EMF 2.2.4, GEF 3.2.2 und VE 1.2.1). Zitieren
perdian Geschrieben 6. Oktober 2008 Geschrieben 6. Oktober 2008 Ich frage mich gerade: Wieso denn unbedingt HTML, wenn keine zwingender Bedarf besteht? Deine Anforderung ist doch "nur" etwas ausdruckbares zu haben, oder? Dann würde ich sagen: Vergiss HTML (zumindest die direkte Erstellung) und sieh dir lieber andere Frameworks an, die dir eine strukturierte Ausgabe deiner Daten ermöglichen. Spontan fällt mir da JasperReports ein, was die verschiedensten Ausgabeformate unterstützt. Swing direkt, PDF, HTML, und AFAIK noch eine Reihe anderer. Ist einfach einzubinden, liefert gute Ergebnisse, da würde ich mich primär dran halten. Zitieren
nekokaburi Geschrieben 6. Oktober 2008 Geschrieben 6. Oktober 2008 Tagchen! Puh ein ziemlich schwieriges Thema. Aber erstmal Glückwunsch, dass du es so gut beschrieben und erklärt hast . Zum Anzeigen von HTML eignet sich eine JEditorPane schon! Bearbeiten nur seeeehr eingeschränkt. Außerdem gibt es ein paar Einschränkungen (CSS, XHTML kompatibles HTML funktionierte bei mir nicht immer)... Aber für alle "normalen" Sachen (Tabellen, etc.) eignet es sich. Das Drucken könntest du über einen Printjob lösen. Hier kann man Swing Komponenten direkt drucken (korrigiert mich, falls das nicht möglich ist ). Du könntest also einfach die komplette JEditorPane drucken. Schönen Tag noch, Neko Zitieren
Dannyboy Geschrieben 6. Oktober 2008 Autor Geschrieben 6. Oktober 2008 (bearbeitet) Ich frage mich gerade: Wieso denn unbedingt HTML, wenn keine zwingender Bedarf besteht? Deine Anforderung ist doch "nur" etwas ausdruckbares zu haben, oder? Dann würde ich sagen: Vergiss HTML (zumindest die direkte Erstellung) und sieh dir lieber andere Frameworks an, die dir eine strukturierte Ausgabe deiner Daten ermöglichen. Spontan fällt mir da JasperReports ein, was die verschiedensten Ausgabeformate unterstützt. Swing direkt, PDF, HTML, und AFAIK noch eine Reihe anderer. Ist einfach einzubinden, liefert gute Ergebnisse, da würde ich mich primär dran halten. HTML wurde vom Auftraggeber genannt. Ich denke dies wurde auch deswegen genannt da es für Ihn ja eine mittlerweile mehr als gewohnte Struktur ist. Die Vorlage die ich hier auf dem Papier vorliegen habe hat zentral eine größere Informationstabelle. Im Kopf des Blattes befindet sich von der jeweiligen Institution die Adressanschrift und einige andere Informationen! Hab erst gedacht es über (X)HTML recht gut nachzubauen (u.A. mit Tables). Dann müsste halt nur immer an den entsprechenden Stellen meine Variablen durch die zuvor im Datensatz markierten Informationen ersetzt werden. Wegen der Funktionalität: Der User soll auf jedenfall die Möglichkeit haben drucken zu können; angedacht war auch ein Speichern aber das hängt wohl noch in der Schwebe. Ich werde mir auf jedenfall Deinen Link zu den JasperReports anschauen und hoffe das ich damit etwas anfangen kann. Habe auch an SWT gedacht aber da scheint die Portabilität drunter zu leiden da es in der JRE standardmäßig natürlich nicht mitgeliefert wird (beschränkt sich ja bei grafischen Dingen afaik auf AWT und Swing). Tagchen! Puh ein ziemlich schwieriges Thema. Aber erstmal Glückwunsch, dass du es so gut beschrieben und erklärt hast . Zum Anzeigen von HTML eignet sich eine JEditorPane schon! Bearbeiten nur seeeehr eingeschränkt. Außerdem gibt es ein paar Einschränkungen (CSS, XHTML kompatibles HTML funktionierte bei mir nicht immer)... Aber für alle "normalen" Sachen (Tabellen, etc.) eignet es sich. Das Drucken könntest du über einen Printjob lösen. Hier kann man Swing Komponenten direkt drucken (korrigiert mich, falls das nicht möglich ist ). Du könntest also einfach die komplette JEditorPane drucken. Schönen Tag noch, Neko Ja ist nicht immer so einfach sich nur auf das Wesentliche zu beschränken. Für mich ist halt der richtige Schritt bei der Umsetzung wichtig. Ich will ja auch nicht unnötige zeitliche Ressourcen verbraten. Gleichzeitig soll es natürlich auch den Anforderungen im weitesten Sinne genügen. Ist für mich halt nur etwas schwieriger da ich mit der Materie Java noch nicht perfekt vertraut bin (war für ca. 1 Jahr raus) und ich es mir ja auch durch learning by doing immer mehr aneignen will (wobei ich mir möglichst bald wohl noch ein paar Schulungen beantragen werde). Sollte Euch noch was einfallen oder Ihr noch weitere gute Beispiele zu meinem Anliegen haben immer raus damit! Bearbeitet 6. Oktober 2008 von Dannyboy Zitieren
Mohadipe Geschrieben 6. Oktober 2008 Geschrieben 6. Oktober 2008 Nur mal mein Gedanke zu deinem Problem. ich würde versuchen den Datensatz als HTML Seite zu exportieren. Danach kann die Anzeige und das Drucken jeder beliebige Browser erledigen. Man müsste sich also "nur" um das erstellen der HTML Seite kümmern. Diese speichern und im Standard-Browser laden. Für das Erstellen könntest du mal schauen ob javax.swing.text javax.swing.text.html javax.swing.text.html.parser was für dich sind. Andererseits klingt das Thema auch verdächtig danach schon mal erfunden worden zu sein. Also wie hier schon jemand sagte mal nach Frameworks schauen. Hoffe das war noch ein sinnvoller Gedanke für dich. Gruß Moha Zitieren
Dannyboy Geschrieben 6. Oktober 2008 Autor Geschrieben 6. Oktober 2008 Nur mal mein Gedanke zu deinem Problem. ich würde versuchen den Datensatz als HTML Seite zu exportieren. Danach kann die Anzeige und das Drucken jeder beliebige Browser erledigen. Man müsste sich also "nur" um das erstellen der HTML Seite kümmern. Diese speichern und im Standard-Browser laden. Für das Erstellen könntest du mal schauen ob javax.swing.text javax.swing.text.html javax.swing.text.html.parser was für dich sind. Andererseits klingt das Thema auch verdächtig danach schon mal erfunden worden zu sein. Also wie hier schon jemand sagte mal nach Frameworks schauen. Hoffe das war noch ein sinnvoller Gedanke für dich. Gruß Moha Klingt auch sehr gut! Zumal dann eben auch der Vorteil herrscht das ich mich auch nicht noch zusätzlich um so Sachen wie Print Jobs kümmern muss. Standardmäßig ist hier im Haus auf jedem Client der Internet Explorer installiert. Nehmen wir an ich versuche Deine Lösung. Ist es dann auch so das ich in einer einzigen Klassendatei mein HTML Grundgerüst mit den Tables etc. zusammenbau oder muss ich in Eclipse alles zusätzlich in ner xml-File auslagern? Zitieren
Mohadipe Geschrieben 6. Oktober 2008 Geschrieben 6. Oktober 2008 Bitte meine Idee nicht falsch verstehen. Selber machen musste ich sowas auch noch nicht. Wäre nur mein Ansatz gewesen, den ich zu erst untersucht hätte. Ob du das erstellen in einer JavaKlasse löst oder in mehreren ist ne Designfrage. Aber mach es in mehreren alles in einer wird nen ziemlicher Spagetticode. Denk daran du wirst das Zeug wahrscheinlich auch warten müssen. Wie meinst du das in ein XML-File auslagern? Gruß Moha Zitieren
Dannyboy Geschrieben 6. Oktober 2008 Autor Geschrieben 6. Oktober 2008 (bearbeitet) Bitte meine Idee nicht falsch verstehen. Selber machen musste ich sowas auch noch nicht. Wäre nur mein Ansatz gewesen, den ich zu erst untersucht hätte. Ob du das erstellen in einer JavaKlasse löst oder in mehreren ist ne Designfrage. Aber mach es in mehreren alles in einer wird nen ziemlicher Spagetticode. Denk daran du wirst das Zeug wahrscheinlich auch warten müssen. Wie meinst du das in ein XML-File auslagern? Gruß Moha Wie ich gesehen habe wurde zum Beispiel die Menüstruktur unserer eigenen internen Arbeitsplattform (alles mit Eclipse in Java geschrieben) als xml-Datei ausgelagert. Diese nennt sich applications.xml und man kann recht schnell die eigenen Anwendungen, die man schreibt, halt in die komplette Arbeitsplattform integrieren. Aufgerufen wird jede Anwendung über eine Ctrl-Klasse. Hätte ja sein können das Du mit Deinem Vorschlag gemeint hast das ich die eigentliche Vorlage (wie die Ansicht nach einem Klick auf einem markierten Datensatz sowie den Button "Details Anzeigen" aussieht) in einer separaten xml-File erstelle und in einer normalen Klassendatei dann eben nur die Verbindung zu dieser xml-File vollziehe. Bearbeitet 6. Oktober 2008 von Dannyboy Zitieren
perdian Geschrieben 7. Oktober 2008 Geschrieben 7. Oktober 2008 HTML wurde vom Auftraggeber genannt.Na und? Das muss deshalb ja nicht zwangsläufig das richtig sein. Ich kenne auch viele Kunden, die meinen weil sie irgendwann mal ein Stichtwort gehört haben sei das immer und überall die richtige Lösung. Ich meine das gar nicht mal abwertend - aber als Entwickler hast du eben einen breiteren und besseren Einblick in die Möglichkeiten, die es für die Umsetzung gibt. Die Frage sollte daher lauten: Was soll erreicht werden? Ich behaupte mal dem Kunden ist es komplett egal ob es nun HTML ist oder nicht - er möchte seine ausdruckbare Version haben, die Technik dahinter ist vollkommen unwichtig. Ich denke dies wurde auch deswegen genannt da es für Ihn ja eine mittlerweile mehr als gewohnte Struktur ist. [...] Im Kopf des Blattes befindet sich von der jeweiligen Institution die Adressanschrift und einige andere Informationen! Hab erst gedacht es über (X)HTML recht gut nachzubauen (u.A. mit Tables). Dann müsste halt nur immer an den entsprechenden Stellen meine Variablen durch die zuvor im Datensatz markierten Informationen ersetzt werden.Die "gewohnte Struktur" kommt aber nicht von der Umsetzung in HTML sondern von dem, was dabei rauskommt - nämlich dem Dokument. Mein Tipp: Versuch nicht krampfhaft irgendwelche HTML-Lösungen zu finden, wenn diese Art der Umsetzung überhaupt nicht gesetzt ist. Versuch das zu finden, was das beste Ergebnis produziert - und wähle danach die Technik aus. Zitieren
Dannyboy Geschrieben 7. Oktober 2008 Autor Geschrieben 7. Oktober 2008 (bearbeitet) Na und? Das muss deshalb ja nicht zwangsläufig das richtig sein. Ich kenne auch viele Kunden, die meinen weil sie irgendwann mal ein Stichtwort gehört haben sei das immer und überall die richtige Lösung. Ich meine das gar nicht mal abwertend - aber als Entwickler hast du eben einen breiteren und besseren Einblick in die Möglichkeiten, die es für die Umsetzung gibt. Die Frage sollte daher lauten: Was soll erreicht werden? Ich behaupte mal dem Kunden ist es komplett egal ob es nun HTML ist oder nicht - er möchte seine ausdruckbare Version haben, die Technik dahinter ist vollkommen unwichtig. Die "gewohnte Struktur" kommt aber nicht von der Umsetzung in HTML sondern von dem, was dabei rauskommt - nämlich dem Dokument. Mein Tipp: Versuch nicht krampfhaft irgendwelche HTML-Lösungen zu finden, wenn diese Art der Umsetzung überhaupt nicht gesetzt ist. Versuch das zu finden, was das beste Ergebnis produziert - und wähle danach die Technik aus. Ja, Du hast Recht. Mittlerweile werde ich es doch anders lösen. Und zwar werde ich es so machen, das ich eigene Darsteller-Klassen und die dazugehörige Ctrl-Klasse entwickle. Ich hatte mir das so vorgestellt das ich mit Swing meine GUI zur Darstellung der ganzen Informationselemente des markierten Satzes erstelle (in diese "Datensatz anzeigen"-GUI wird man dann nur über ein Kontextmenü "Details Anzeigen" gelangen). Dann wollte ich quasi alle Elemente (Labels, TextFields etc.) in ein Panel packen und dieses mit Hilfe der Java internen Print API ausdrucken. Jetzt habe ich zum Testen mal in dem sich neuen aufpoppenden Fenster (wenn man halt nach der zuvor gestarteten Suchabfrage ein Ergebnis findet, einen Datensatz markiert und auf "Details anzeigen" klickt) ein neues Fenster mit einem Panel (integriert ist dort momentan das Label "Dies ist ein Test") erstellt. Ich wollte nun mit einem Button Drucken den PrintDialog öffnen und dann eben die Information, die ich dem Panel zugewiesen habe, ausdrucken. Leider hänge ich im Quellcode fest Anbei der Code: private void performDrucken() { PrinterJob printjob = PrinterJob.getPrinterJob(); printjob.setPrintable(this); if (printjob.printDialog() == false ) return; try { printjob.print(); } catch(Exception PrintException){ PrintException.printStackTrace(); } } Und hier die print()-Methode: public int print(Graphics g, PageFormat pageFormat, int page) throws PrinterException { //int i; Graphics2D g2d; //Line2D.Double line = new Line2D.Double(); if(page == 0) { //--- Create a graphic2D object and set the default parameters g2d = (Graphics2D) g; g2d.setColor (Color.black); //--- Translate the origin to be (0,0) g2d.translate (pageFormat.getHeight(), pageFormat.getWidth()); //g2d.draw( ......) <---- ich möchte mein Panel übergeben //paintComponent(g2d); return (PAGE_EXISTS); } else return (NO_SUCH_PAGE); } Bitte nicht wundern, es gibt noch ein paar andere Testsachen im Quellcode. Habe mal 2 Sachen auskommentiert da ich gerade nicht weiß wie ich mein Panel korrekt übergeben kann, damit es ausgedruckt wird. Also in einer Klasse ist nur mein Panel (es wird da später nur Labels und TextFields geben). In einer anderen View-Klasse wird dieses Panel anhand der Methode getDateiauskunftDetailsPanel() übergeben. Zusätzlich gibts hier aber noch ein paar andere Methoden. Und dann wird über die Ctrl-Klasse der Rest gesteuert. Das Aufrufen der "Detail anzeigen"-GUI sowie das Betätigen des Drucken Buttons (inklusive Erscheinen des Druckdialogs) klappt einwandfrei. Nur was muss ich noch genau in den Quellcode integrieren damit er mir nur den Inhalt des Panels ausdruckt. Kann mir da jemand weiterhelfen? Im Moment kommt nur eine leere Seite raus (ist mir aber auch bewusst da ich den Teil mit dem g2d.draw .... nicht so richtig hinbekomme). Irgendwelche Ideen? Bearbeitet 7. Oktober 2008 von Dannyboy Zitieren
Dragon8 Geschrieben 7. Oktober 2008 Geschrieben 7. Oktober 2008 Da du, soweit ich das mitbekommen habe, ja Swing einsetzt, kannst du einfach die print(Graphics) Methode der JComponent benutzen. Diese Methode zeichnet den Inhalt der Komponente in das Graphics-Objekt. Zitieren
Dannyboy Geschrieben 8. Oktober 2008 Autor Geschrieben 8. Oktober 2008 (bearbeitet) Da du, soweit ich das mitbekommen habe, ja Swing einsetzt, kannst du einfach die print(Graphics) Methode der JComponent benutzen. Diese Methode zeichnet den Inhalt der Komponente in das Graphics-Objekt. Geht das auch etwas genauer? Bezogen auf meinen obigen Quellcode, kann man da nicht konkret etwas erweitern um den Inhalt meines Panels (übergebe den kompletten Panel-Inhalt der PanelView-Klasse an eine Methode getDateiauskunftPanel() in der DarstellerView-Klasse) auszudrucken? Ich hab auch nach weiteren Beispielen im Internet gesucht und zum Beispiel das hier gefunden: Hier klicken Nur erscheint mir das Ganze etwas aufgebläht. Habt Ihr nicht noch ein anderes triviales Code Beispiel? Ich muss dazusagen das wenn immer nur ein einseitiges Dokument (!) ausgedruckt werden muss (da die Detailansicht nach Möglichkeit später auch nur einseitig (DIN A4) sein wird!). Momentan steht ja nur in dem Panel ein Label mit dem Text "Dies ist ein Test" drin. Wie übergebe ich dem Graphics-Objekt jetzt die Methode getDateiauskunftPanel() damit er mir mein Panel ausdrucken kann? Mit z.B. g2d.draw((Graphics) view.getDateiauskunftPanel) funktioniert das ja ebenfalls nicht (gut hier handelt es sich ja auch um ein Shape und der Cast klappt nicht). Schade das es keine drawComponent()-Methode gibt. Das mit der Komponente hört sich gut an, aber ich steh grad voll auf dem Schlauch bzw. habe ein Brett vorm Kopf. :confused::upps Danke für Eure Mühe! Bearbeitet 8. Oktober 2008 von Dannyboy Zitieren
Dragon8 Geschrieben 8. Oktober 2008 Geschrieben 8. Oktober 2008 Ganz einfache Sache. Dein JPanel ist ja von der Basisklasse JComponent abgeleitet. Sodass dein JPanel ebenfalls die Methode print(Graphics) besitzt. Wenn ich nun also einfach davon ausgehe, dass deine Methode getDateiauskunftPanel() dir dein JPanel zurückgibt, müsste das wie folgt funkionieren: getDateiauskunftPanel().print(g2d); Du übergibst also das Graphics Objekt der Methode print() sodass diese Methode den Inhalt des JPanels in dieses Graphics Objekt zeichnen kann. Dein Versuch mit g2d.draw(...) kannst dann weglassen. Zitieren
Dannyboy Geschrieben 8. Oktober 2008 Autor Geschrieben 8. Oktober 2008 (bearbeitet) Hi, danke nocheinmal! Habs grade auch selber hinbekommen, allerdings hatte ich es erst mit printAll() gemacht. Habs jetzt geändert. Anbei der Code: public int print(Graphics g, PageFormat pageFormat, int page) throws PrinterException { if (page > 0) { return NO_SUCH_PAGE; } Graphics2D g2d = (Graphics2D)g; getDateiauskunftPanel().print(g2d); return PAGE_EXISTS; } Kommt mir nur etwas langsam vor. Kann man das irgendwie optimieren? Hab mal was davon gehört, DoubleBuffering zu deaktivieren. Bearbeitet 8. Oktober 2008 von Dannyboy Zitieren
Dannyboy Geschrieben 9. Oktober 2008 Autor Geschrieben 9. Oktober 2008 (bearbeitet) Hallo Leute, so ich bin mittlerweile einen Schritt weiter gegangen. Und zwar skaliere ich das grafische Panel immer so das es auf eine Druckseite paßt. Anbei der Quellcode: public int print(Graphics g, PageFormat pageFormat, int page) throws PrinterException { Graphics2D g2d; if(page == 0) { //erstellt ein Graphics 2D Objekt g2d = (Graphics2D) g; g2d.setColor (Color.black); //pageFormat.setOrientation(PageFormat.PORTRAIT); disableDoubleBuffering(getDateiauskunftPanel()); // Höhe und Breite von der Seite sowie dem Panel Dimension d = getDateiauskunftPanel().getSize(); double panelWidth = d.width; double panelHeight = d.height; double pageHeight = pageFormat.getImageableHeight(); double pageWidth = pageFormat.getImageableWidth(); double scaleX = pageWidth / panelWidth; double scaleY = pageHeight / panelHeight; g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); g2d.scale(scaleX, scaleY); getDateiauskunftPanel().print(g2d); return (PAGE_EXISTS); } else return (NO_SUCH_PAGE); } Das klappt soweit auch ganz gut. Nur der Part mit meiner eigenen Methode "disableDoubleBuffering(get...)" beschleunigt mir den Ausdruck nicht wirklich (obwohl dies laut einem Internet Beispiel klappen müsste). Zudem kann ich, nachdem ich über den DruckDialog den Druck angestartet habe, für ca. 15 Sekunden nichts machen (meine Anwendung arbeitet wohl den Prozess ab). Sollte ich diesen ohne Weiteres in einen eigenen Thread packen oder nur eine zusätzliche Meldung abstoßen? Kann man ansonsten noch etwas Wichtiges am Quellcode anpassen oder erweitern? Wieso kann man eigentlich nicht, ähnlich wie bei der Klasse "PrintJob", bei der Klasse "PrinterJob" eine end()-Methode finden? Dann könnte ich ihm doch explizit sagen das er nach dem Drucken den printJob schließen kann oder? Bearbeitet 9. Oktober 2008 von Dannyboy Zitieren
Dannyboy Geschrieben 9. Oktober 2008 Autor Geschrieben 9. Oktober 2008 Bezüglich dem Blockieren der Anwendung für ca. 15 Sekunden: Hat sich erledigt, ich hab jetzt einfach den SwingWorker benutzt (SwingUtilities). Da ist man dann in einem eigenen Thread und man kann nach dem Anstarten des Drucks auch ganz normal mit der Anwendung weiterarbeiten, das Fenster verschieben usw.! Das Einzige was mich etwas stört ist das der mir in dem DruckDialog unterhalb des Punktes "Alles" (Druckbereich) den Punkt "Seiten von 1 bis 9999" anzeigt. Würde zu gerne wissen ob man das irgendwie so einstellen kann das man maximal da stehen hat "Seiten von 1 bis 1". Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.