Avatar billede cybershah Nybegynder
01. juni 2005 - 15:32 Der er 2 kommentarer og
1 løsning

Udskrive fra en JTextArea til fysisk printer

Jeg har nu kigget meget her i eksperten, men er desværre forvirret! Jeg har en tekst i min JTextArea, som jeg gerne vil udskrive. Dette skal ske med en knap. Jeg har nu efter min søgen på eksperten fundet frem til at man først skal gemme teksten i en txt fil og så udskrive den derfra? eller hvad? det eneste kode, som var til at overskue, var arne_v's simple eksempel
http://eksperten.dk/spm/416478

import java.awt.*;
import java.awt.print.*;

class PrinTest {

    public static void main(String[] args) {
        PrinterJob job = PrinterJob.getPrinterJob();
        Book bk = new Book();
        bk.append(new Printable() {
            public int print(Graphics g, PageFormat page, int index) {
                page.setOrientation(PageFormat.LANDSCAPE);
                g.drawString("Dette er en test", 100, 100);
                return 0;

            }
        }, job.defaultPage());
        job.setPageable(bk);
        if (job.printDialog()) {
            try {
                job.print();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

}

Hvordan kan jeg så fra min GUI klasse, sende besked hertil? jeg mener ik det er nødvendigt og ligge hele min kode her, da jeg går ud fra at det hele skal ske i printKnappens actionListener.

Det er ren tekst, som skal udskrives og en eventuel forkalring på generelt udskrivning i JAVA vil være kanon!
Avatar billede _carsten Nybegynder
01. juni 2005 - 20:23 #1
En forholdsvis simpel måde (hvis man overhovedet kan sige det) er denne måde

Den tager ikke højde for nogen ting, ej heller sideskift


import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.text.BadLocationException;

public class PrintContent extends javax.swing.JFrame implements Printable {
   
    public PrintContent() {
        initComponents();
    }

    private void initComponents() {
        textarea = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);
        textarea.setLineWrap(true);
        getContentPane().add(textarea, java.awt.BorderLayout.CENTER);

        jButton1.setText("Print tekst");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                doPrintJob(evt);
            }
        });

        getContentPane().add(jButton1, java.awt.BorderLayout.SOUTH);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-400)/2, (screenSize.height-500)/2, 400, 500);
    }

    private void doPrintJob(java.awt.event.ActionEvent evt) {
        job = PrinterJob.getPrinterJob();
       
        job.setPrintable(this);

        try{
            System.out.println("Forsøger print");
            job.print();
        }
        catch(PrinterException p){
            p.printStackTrace();
        }
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new PrintContent().setVisible(true);
            }
        });
    }

    public int print(Graphics g, PageFormat pF, int page) throws PrinterException {
        if(page >= 0 && page < numberOfPages){
            g.translate((int)pF.getImageableX(), (int)pF.getImageableY());
            try{
                int lineHeight = textarea.modelToView(0).height;
                int h = 10;
               
                for(int i = 0; i < textarea.getLineCount(); i++){
                    int x = textarea.getLineStartOffset(i);
                    int y = textarea.getLineEndOffset(i);
                    g.drawString( textarea.getText(x, y-x ) , 10, (h += lineHeight));
                }
            }
            catch (BadLocationException i){
                i.printStackTrace();
            }
           
            return Printable.PAGE_EXISTS;
        }

        return Printable.NO_SUCH_PAGE;
    }
   
    private javax.swing.JButton jButton1;
    private javax.swing.JTextArea textarea;
    private PrinterJob job;
    private int numberOfPages = 1;
}
Avatar billede cybershah Nybegynder
01. juni 2005 - 23:28 #2
Tusind tak! det virkede... det skal do lige siges at jeg kun havde brug for print metoderne og da jeg kører efter Model-View-Controller, så har jeg en GUI klasse for sig selv. Dvs. at jeg laver en Print Classe i view pakken, som indeholder print koden.
80 point til dig, ska bare lige ha' et svar!
Avatar billede _carsten Nybegynder
02. juni 2005 - 10:59 #3
Kommer her !
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