Avatar billede elysium Nybegynder
28. maj 2002 - 21:31 Der er 4 kommentarer og
1 løsning

Printning i java


Hvordan får man printet et JTA med simpel text??

Jeg giver ikke point til en person der bare copy paster en lang smøre med en stor eller flere klasser, det hele skal forgå i en knap.

;)
Avatar billede disky Nybegynder
28. maj 2002 - 21:39 #1
en JTA ???

Hvis det skal foregå i en knap uden brug af en eller flere klasser, har du et stort problem.

Jeg må skuffe dig alt i java sker pga. en eller flere klassers metoder :-)
Avatar billede elysium Nybegynder
28. maj 2002 - 21:59 #2
JTextarea...

Og jeg forstår ikke helt at du mener at skuffe mig da langfra alt ligefrem SKAL foregå i klasser, og deres metoder?...

Men OK så en klasse hvor jeg kan kalde en metode der f.eks. kunne printe t JTextArea.
Avatar billede disky Nybegynder
28. maj 2002 - 22:43 #3
Jeg har ikke lige tid til at lave det for dig.

Men søg på www.javasoft.com efter 'printing jtextarea'
Avatar billede carstenknudsen Nybegynder
28. maj 2002 - 23:48 #4
Du bliver vist nødt til at acceptere at
det er lidt sværere at lave end som så.
Her er der en løsning der kan bruges.
Du skal lave en ActionListener på din knap
som denne klasse:
public class PrintListener implements ActionListener {
private JTextArea text;
public PrintListener(JTextArea text) {
this.text = text;
}
public void actionPerformed(ActionEvent ae) {
    PrinterJob job = PrinterJob.getPrinterJob();
    PageFormat pageFormat = job.pageDialog( job.defaultPage() );
    TextPrinter textPrinter = new TextPrinter( text.getText(), pageFormat );
    job.setPageable( textPrinter );
    if ( job.printDialog() ) {
        job.print();
    } // if

}
}
I din egen klasse skal du altså have noget som:
JButton button = ...;
JTextArea text = ...;
button.addActionListener(new PrintListener(text));

TextPrinter klassen er defineret her:
import java.awt.*;
import java.awt.print.*;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.List;

/**
* @author Carsten Knudsen
* @version 1.0
*
**/
public class TextPrinter
    implements Pageable, Printable, Serializable {

    private String defaultFontFamily = "Monospaced";
    private int defaultFontStyle = Font.PLAIN;
    private int defaultFontSize = 10;
    private float lineSpaceFactor = 1.2f;
    private int lineSpacing;
    private int linesPerPage;
    private int numberOfPages;
    private int baseline = -1;
    private PageFormat pageFormat;
    private Font font;
    private List lines;

    public TextPrinter( String text, PageFormat pageFormat ) throws IOException {
    this( new StringReader( text ), pageFormat );
    } // constructor

    public TextPrinter( File file, PageFormat pageFormat ) throws IOException {
    this( new FileReader( file ), pageFormat );
    } // constructor

    public TextPrinter( Reader reader, PageFormat pageFormat ) throws IOException {
    this.pageFormat = pageFormat;
    BufferedReader breader = new BufferedReader( reader );
    lines = new ArrayList();
    String line;
    while ( ( line = breader.readLine() ) != null ) {
        lines.add( line );
    } // while
    breader.close();
        setFont( new Font( defaultFontFamily, defaultFontStyle, defaultFontSize ) );
    } // constructor

    public void setFont( Font font ) {
    this.font = font;
    lineSpacing = (int)( font.getSize() * lineSpaceFactor );
    linesPerPage = (int)Math.floor( pageFormat.getImageableHeight() / lineSpacing );
    numberOfPages = ( lines.size() - 1 ) / linesPerPage + 1;
    } // setFont

    ////////////////////////////////
    // implementation of Pageable //
    ////////////////////////////////

    public int getNumberOfPages() {
    return numberOfPages;
    } // getNumberOfPages

    public PageFormat getPageFormat( int pageNumber ) {
    return pageFormat;
    } // getPageFormat

    public Printable getPrintable( int pageNumber ) {
    return this;
    } // getPrintable

    /////////////////////////////////
    // implementation of Printable //
    /////////////////////////////////

    public int print( Graphics g, PageFormat pageFormat, int pageNumber ) {
    if ( pageNumber < 0 || pageNumber >= numberOfPages )
        return NO_SUCH_PAGE;
    if ( baseline == -1 ) {
        FontMetrics fm = g.getFontMetrics( font );
        baseline = fm.getAscent();
    } // if
    g.setColor( Color.white );
    g.fillRect( (int)pageFormat.getImageableX(), (int)pageFormat.getImageableY(),
            (int)pageFormat.getImageableWidth(), (int)pageFormat.getImageableHeight() );
    g.setFont( font );
    g.setColor( Color.black );
    int startLine = pageNumber * linesPerPage;
    int endLine = startLine + linesPerPage - 1;
    if ( endLine >= lines.size() ) {
        endLine = lines.size() - 1;
    } // if
    int x0 = (int)pageFormat.getImageableX();
    int y0 = (int)pageFormat.getImageableY();
    y0 += lineSpacing;
    for (int i = startLine; i <= endLine; i++) {
        String line = (String)lines.get( i );
        int index;
        while ( ( index = line.indexOf( "\t" ) ) >= 0 ) {
        line = line.substring( 0, index ) + "    " + line.substring( index + 1 );
        } // while
        if ( line.length() > 0 ) {
        g.drawString( line, x0, y0 );
        } // if
        y0 += lineSpacing;
    } // for
    return PAGE_EXISTS;
    } // print
   
} // TextPrinter
Avatar billede elysium Nybegynder
29. maj 2002 - 17:07 #5
Fedt nu virker det!!

Jeg takker, for hjælpen og en god besvarelse.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester