Auftrag an Drucker senden

Whizzle

Mitglied
Hallo!
Meine Druckfunktion öffent mir zwar den Druckdialog und den PageDialog, aber wenn ich letztendlich auf Drucken klicke, fängt der Drucker nicht an. Kann mir vielleicht jemand sagen, was ich übersehen haben könnte? Habe echt keine Idee mehr!


PrinterJob pj = PrinterJob.getPrinterJob();
PageFormat pf = pj.defaultPage();
boolean druck = pj.printDialog();
pf = pj.pageDialog(pf);
try {
pj.print();
} catch (PrinterException e) {

}
}

public int print(Graphics g, PageFormat pf, int page)
{
int ypos = (int) pf.getImageableY();
int xpos = (int) pf.getImageableX();
g.drawImage(Tools.img, xpos, ypos, null);
return Print.PAGE_EXISTS;
}

MfG
Patrick
 
Hallo!

... hier mal ne andere Lösung, so gehts auf jeden Fall ...

Code:
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.PrintJob;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

/**
 * @author      Darimont<br>
 * @version     1.0<br>
 * Date of creation:  24.03.2004<br>
 * File:         PrintTest.java<br>
 * Modifier:     Darimont<br>
 * Revision:     Revision<br>
 * State:        Germany<br>
 */

public class PrintTest extends JFrame {

	private Image img;
	private MediaTracker mt;

	public PrintTest() {
		super("PrintTest");
		setSize(320, 240);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		try {
			mt = new MediaTracker(this);
			img =
				ImageIO.read(new File("c:/bug1.png")).getScaledInstance(
					320,
					240,
					Image.SCALE_FAST);
			mt.addImage(img, 0);
			mt.waitForAll();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		JLabel label = new JLabel(new ImageIcon(img));
		label.setSize(320, 240);

		final PrintTest _this = this;
		label.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent evt) {
				Toolkit tk = Toolkit.getDefaultToolkit();
				PrintJob pj = tk.getPrintJob(new Frame(), "", null);
				if (pj != null) {
					Graphics g = pj.getGraphics();
					_this.printComponents(g);
					g.dispose();
					pj.end();
				}

			}
		});
		this.getContentPane().add(label);

		setVisible(true);
	}

	public static void main(String[] args) {
		new PrintTest();
	}
}

Gruß Tom
 
Hi!
Danke für deine superschnelle Antwort. Deinen Lösungsansatz verstehe ich auch soweit. Nur, was bedeutet das

final PrintTest _this = this;

und in Bezug darauf das
_this.printComponents(g);

Was muss ich denn bei mir als final für PrintTest nehmen, denn das erkennt er bei mir ja nicht. Oder habe ich da einfach nur was übersehen?
Danke nochmal
Patrick
 
Zuletzt bearbeitet:
Hallo!

...
final PrintTest _this = this;
ist ein kleiner "Trick" ...
Da ich in der anonymen Klasse mit this eine Referenz auf die anony. Klasse selbst bekomme, ich jedoch eine Referenz auf die umliegende Klasse brauche und man von anonymen Klassen nur auf final Variablen der außen herum definierten Klasse zugreifen kann hab ich mir einfach mal die Referenz auf die äußere Klase (den JFrame) in _this gesichert, welche ich dann verwende...

Gruß Tom
 
Zuletzt bearbeitet:
Zurück