Zum Inhalt springen

Probleme mit eigener Drucken()-Methode


Dannyboy

Empfohlene Beiträge

Hallo,

wie der Threadtitel erahnen läßt habe ich aktuell Probleme bei meiner eigens implementierten Drucken-Methode (in meiner Klasse wird das Interface Printable implementiert).

Und zwar ist es so das ich zwar das Panel 1:1 ausdrucken kann und es auch vom Aufbau so aussieht wie ich es haben möchte, es aber passiert das wenn ich zwei unterschiedliche Informationen über Datensätze habe er mir komischerweise 2-Mal dasselbe ausdruckt.

Mit anderen Worten gehe ich so vor:

Ich lasse mir einen Datensatz als übersichtliche Seite mit Information A anzeigen, klicke dann in meinem visualisierten Panel (ist eben diese neue Seite) unterhalb auf Drucken, dann poppt das Standard Druck Menü auf und ich bestätige einfach mit "OK" (und angewählt sind mein Netzwerkdrucker sowie der Druckbereich "Alles")!

Jetzt klick ich nach dem Abschicken des Druckauftrags auf Abbrechen (um eben die visualisierte Seite zu schließen) und lass mir eine Information B (aus einem anderen Datensatz) anzeigen. Diese möchte ich auch ausdrucken (nach obigem Schema geh ich vor). Was passiert? Es kommen zwar 2 Seiten nach ca. 10 - 15 Sekunden aus dem Drucker, aber er druckt mir 2 Mal die Information B aus! Jetzt frage ich mich, wie ich sicherstellen kann, das eben bei beliebig vielen anstehenden Druckaufträgen im Spool die Werte auch intern beibehalten werden und er mir auch die Sachen so ausdruckt wie ich sie erwarte (im obigen Fall ja Information A und Information B). Momentan überschreibt er mir ja quasi in meinem PrintJob den Wert! Anbei mal der Quellcode:

Erst einmal die Methode die aufgerufen wird wenn man auf dem Button "Drucken" klickt:

------------

private void performDrucken() {

		SwingWorker swingWorker = new SwingWorker() {

			public Object construct() {

				performDruckenHelper();

					return this;

			}

		};

		swingWorker.start();

	}
Hier wird eben ein eigener Thread erzeugt so das der Anwender parallel neben dem Drucken Prozess auch weiterhin ohne Hänger andere Datensätze suchen kann Dann folgt die Methode die mir den PrintJob liefert und das eigentliche Drucken anstartet: -----------
private void performDruckenHelper()  {

		//PrintJob

		PrinterJob printjob = PrinterJob.getPrinterJob(); 

		printjob.setPrintable(this); 


		if (printjob.printDialog() == false ) return; 


			try {

				printjob.print();

				System.out.println("End PrintJob.print()");

			}

			catch(Exception PrintException){

				PrintException.printStackTrace();

			}

	}

Abschließend meine Print()-Methode: -------------------
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(view.getDateiauskunftDetailsPanel());



			// Höhe und Breite von der Seite sowie dem Panel

			Dimension d = view.getDateiauskunftDetailsPanel().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);


			view.getDateiauskunftDetailsPanel().print(g2d);


			return (PAGE_EXISTS);

		}

		else

			return (NO_SUCH_PAGE);

	}

An welcher Stelle ist der Fehler? Zunächst dachte ich das der PrintJob mit einer internen end()-Methode beendet werden muss aber das gibts hier irgendwie nicht (nach dem Drucken scheint sich der Job selber zu beenden). Nur er darf mir ja nicht unterschiedliche Informationen quasi immer mit dem zuletzt angestarteten Druck überschreiben. :(

Könnt Ihr mir hier nen Tipp geben?

Bearbeitet von Dannyboy
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...