G
Guest
Gast
Hallo,
ich möchte meine GUI (JFrame) in Java ausdrucken, aber da gibt es bei mir Probleme mit der Skalierung. Es wird zwas ausgedruckt, aber nur ein Viertel von meiner GUI wird auf dem DIN A4 ausgedruckt. Was muss ich machen ,damit meine GUI (bzw. JFrame) automatisch so skaliert und ausgedruckt werden kann, dass es auf genau ein DIN A4 drauf passt?
Ich rufe einfach folgendes auf:
und die Klasse PrintUtilities sieht so aus:
Aber nur ein Viertel (oberste linkste teil) meiner GUI wird somit ausgedruckt. Wie kann ich meine GUI skalieren und sich auf ein DIN A4 anpassen lassen?
Viele Grüße
Taha
ich möchte meine GUI (JFrame) in Java ausdrucken, aber da gibt es bei mir Probleme mit der Skalierung. Es wird zwas ausgedruckt, aber nur ein Viertel von meiner GUI wird auf dem DIN A4 ausgedruckt. Was muss ich machen ,damit meine GUI (bzw. JFrame) automatisch so skaliert und ausgedruckt werden kann, dass es auf genau ein DIN A4 drauf passt?
Ich rufe einfach folgendes auf:
Code:
PrintUtilities.printComponent(meineGUI) :
und die Klasse PrintUtilities sieht so aus:
Code:
import java.awt.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.swing.*;
import java.awt.print.*;
/** A simple utility class that lets you very simply print
* an arbitrary component. Just pass the component to the
* PrintUtilities.printComponent. The component you want to
* print doesn't need a print method and doesn't have to
* implement any interface or do anything special at all.
*
* If you are going to be printing many times, it is marginally more
* efficient to first do the following:
* <PRE>
* PrintUtilities printHelper = new PrintUtilities(theComponent);
* </PRE>
* then later do printHelper.print(). But this is a very tiny
* difference, so in most cases just do the simpler
* PrintUtilities.printComponent(componentToBePrinted).
*
* 7/99 Marty Hall, [url]http://www.apl.jhu.edu/~hall/java/[/url]
* May be freely used or adapted.
*/
public class PrintUtilities implements Printable {
private Component componentToBePrinted;
public static void printComponent(Component c) {
new PrintUtilities(c).print();
}
public PrintUtilities(Component componentToBePrinted) {
this.componentToBePrinted = componentToBePrinted;
}
public void print() {
PrinterJob printJob = PrinterJob.getPrinterJob();
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
PageFormat pf = printJob.pageDialog(aset);
printJob.setPrintable(this, pf);
if (printJob.printDialog())
try {
printJob.print();
} catch(PrinterException pe) {
System.out.println("Error printing: " + pe);
}
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
if (pageIndex > 0) {
return(NO_SUCH_PAGE);
} else {
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
disableDoubleBuffering(componentToBePrinted);
componentToBePrinted.paint(g2d);
enableDoubleBuffering(componentToBePrinted);
return(PAGE_EXISTS);
}
}
/** The speed and quality of printing suffers dramatically if
* any of the containers have double buffering turned on.
* So this turns if off globally.
* @see enableDoubleBuffering
*/
public static void disableDoubleBuffering(Component c) {
RepaintManager currentManager = RepaintManager.currentManager(c);
currentManager.setDoubleBufferingEnabled(false);
}
/** Re-enables double buffering globally. */
public static void enableDoubleBuffering(Component c) {
RepaintManager currentManager = RepaintManager.currentManager(c);
currentManager.setDoubleBufferingEnabled(true);
}
}
Aber nur ein Viertel (oberste linkste teil) meiner GUI wird somit ausgedruckt. Wie kann ich meine GUI skalieren und sich auf ein DIN A4 anpassen lassen?
Viele Grüße
Taha