JFrame ausdrucken

  • Themenstarter Themenstarter Gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,

ich habe eine kleine grafische Oberfläche, in der Einträge sind. Jetzt möchte ich diesen je nach Größe an das Papier anpassen und ganz ausdrucken. Nur ich kriege es nicht hin, das Papier an die Größe anzupassen.
Code:
        drucken.addActionListener(new ActionListener(){
                   public void actionPerformed(ActionEvent e) {
                	   Toolkit tk = Toolkit.getDefaultToolkit();
                	   PrintJob pj = tk.getPrintJob( new Frame(), "", null );
                	   if ( pj != null ) {
                	     Graphics g = pj.getGraphics();
                	     printComponents( g );
                	     g.dispose();
                	     pj.end();
                	   }
                   } 
             });
Wenn der Frame jetzt halt ne bestimmte Größe hat, wird nur ein Teil von Ihm gedruckt.
 
Schau dir mal das Beispiel hier an zur Skalierung:

Code:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;

public class TestPrintFrame extends JFrame implements Printable
{
	public TestPrintFrame()
	{
		super( "Testframe" );
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		setSize( 800, 600 );

		JButton bt = new JButton( new PrintAction( this ) );

		getContentPane().add( bt );
	}

	public int print( Graphics graphics, PageFormat pageFormat, int pageIndex )
		throws PrinterException
	{
		if ( pageIndex > 0 )
		{
			return NO_SUCH_PAGE;
		}
		
		Graphics2D g2d = (Graphics2D) graphics;

		double scaleVertical = pageFormat.getHeight() / getHeight();
		double scaleHorizontal = pageFormat.getWidth() / getWidth();
		
		if ( scaleHorizontal < scaleVertical )
		{
			g2d.scale( scaleHorizontal, scaleHorizontal );			
		}
		else
		{
			g2d.scale( scaleVertical, scaleVertical );
		}		

		printComponents( g2d );
		g2d.dispose();		
		
		return PAGE_EXISTS;
	}

	public static void main( String[] args )
	{
		new TestPrintFrame().setVisible( true );
	}

}

class PrintAction extends AbstractAction
{
	Printable	painter	= null;

	public PrintAction( Printable painter )
	{
		super( "Print me!" );
		
		this.painter = painter;
	}

	public void actionPerformed( ActionEvent e )
	{
		PrinterJob job = PrinterJob.getPrinterJob();
		job.setPrintable( painter );

		if ( job.printDialog() )
		{
			try
			{
				job.print();
			}
			catch( PrinterException ex )
			{
				ex.printStackTrace();
			}
		}
	}
}

Du holst dir den Skalierungsfaktor, indem du PageFormat mit der Fenstergröße gegenüberstellst und skalierst dann halt so, dass sich das Fenster an die Seitenbreite (oder Höhe) anpasst.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben