30. november 2001 - 13:34
#1
At printe fra java er bestemt ikke nemt, da man skal konvertere al sin tekst og hele tiden skrive kommandoer til printeren, for at tjekke om der er mere plads på papiret osv.
Jeg mener dog at der tidligere har været et spørgsmål om dette her på eksperten. Jeg har i hvert fald diskuteret emnet herinde før.
30. november 2001 - 14:57
#2
Hvis du tegner din streng i en komponent er det let
at printe det, her en en klasse der kan bruges. Den
nemmeste måde at bruge den på er at kalde
makePrintable(component) og så taste ctrl-p
i den komponent, så får du en menu til
at snakke med printeren.
/**
* Class ComponentPrinter allows a component to be printed.
* <BR>
* The static method {@link #makePrintable(Component)} allows
* a Component to be printed with the ctrl-p key sequence.
* <BR>
* To print a component from itself use code like the follwing:
* <BR><B>Example of use:</B><BR>
* <PRE>
* ComponentPrinter printer = new ComponentPrinter( this );
* try {
* printer.print();
* }
* catch( PrinterException e ) {
* System.out.println( \"PrinterException = \" + e );
* }
* </PRE>
* @author Carsten Knudsen
* @version 1.0
*/
public class ComponentPrinter implements Printable {
private Component c;
/**
* Constructor for class ComponentPrinter that
* takes a Component as an argument.
* @param c Component that we wish to print.
**/
public ComponentPrinter( Component c ) {
this.c = c;
} // constructor
/**
* The method print sets up the PrinterJob.
**/
public void print() throws PrinterException {
PrinterJob job = PrinterJob.getPrinterJob();
PageFormat format = job.pageDialog( job.defaultPage() );
job.setPrintable( this, format );
if ( job.printDialog() )
job.print();
} // print
/**
* The method print is called by PrinterJob.
**/
public int print( Graphics g, PageFormat format, int pagenum ) {
if ( pagenum > 0 )
return Printable.NO_SUCH_PAGE;
Graphics2D g2 = (Graphics2D)g;
g2.translate( format.getImageableX(), format.getImageableY() );
c.paint( g2 );
return Printable.PAGE_EXISTS;
} // print
/**
* The static method makePrintable registers a key listener on
* the component, and when the user presses ctrl-p key the
* contents can be printed directly on a printer.
**/
public static void makePrintable( final Component c ) {
c.addKeyListener( new KeyAdapter() {
public void keyPressed( KeyEvent e ) {
if ( e.getKeyCode() == KeyEvent.VK_P && e.isControlDown() )
{
ComponentPrinter printer = new ComponentPrinter( c );
try {
printer.print();
} // try
catch ( PrinterException pe ) {
} // catch
} // if
} // keyPressed
} // KeyAdapter
);
} // makePrintable
} // ComponentPrinter