Problem mit Drucken (JTextArea)

hepa fan

Grünschnabel
Hallo,

ich bin ein Anfänger und wollte ein JTextArea aus drucken und zwar nach einer Methode, wie es in dem Buch, das ich benutze beschrieben war. In dem Buch waren immer einige Zeilen abgedruckt und ich diese so übernommen, nur das ich die Variablen etwas anders benannt hab. Aber die nach dem Aufruf des Printdialogs passiert nichts. Ich hoffe ihr könnt mir helfen.

Besten Dank schon einmal im Voraus.
Code:
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.io.*; 
import javax.swing.text.*; 
import javax.swing.event.*;
import java.util.*;

import java.util.Hashtable;
import java.awt.print.*;


class ditor extends JFrame implements Printable{ 
//class texteditor extends JFrame
    //Variablen deklariere 
    
    //Variablen für Drucken
    private Vector<String> zeilen;
    private int zeilenHohe;
    private int anzahlSeiten;
    private int zeilenProSeite;
    private boolean druckAbfragen;
    FontMetrics fm;
    String str;

    //-------------------------------
  
  ActionListener ButtonLi   = new ButtonListener();
  
  JButton b_drucken   = new JButton();
  



  JScrollPane bildlauf = new JScrollPane(); 
  JTextArea textfeld = new JTextArea(); 

  
  
  public ditor() 
  { 
  
  //Textfeld einrichten 
  textfeld.getDocument();
  textfeld.setLineWrap(true); 
  textfeld.setWrapStyleWord(true); 
  textfeld.setBackground(Color.WHITE); 
  textfeld.setFont(new Font("SansSerif", Font.PLAIN, 20)); 
  
  //Bildlauf einrichten 
  bildlauf.getViewport().add(textfeld, null); 
  b_drucken.setText("Drucken");
  b_drucken.addActionListener(ButtonLi);
  getContentPane().add(b_drucken, BorderLayout.WEST);
  getContentPane().add(bildlauf,BorderLayout.CENTER); 
  

  } 

  
  protected void drucken() {
      PrinterJob druckJob = PrinterJob.getPrinterJob();
      druckJob.setJobName("Javaditor -  drucken");
      
      druckJob.setCopies(1);
      
      PageFormat pf = druckJob.defaultPage();
      
      textZerlegen();
      try {
          druckAbfragen = true;
          druckJob.print();
         
          Book buch = new Book();
          buch.append(this,pf,anzahlSeiten);
          druckJob.setPageable(buch);
          
          druckAbfragen=false;
          if(druckJob.printDialog()) {
                    druckJob.print();
           }
       } catch (Exception e) {
          JOptionPane.showMessageDialog(this,"Fenler beim Drucken" + e, "Druckfehler", JOptionPane.ERROR_MESSAGE);
       }
      
      
      /*
      d_fenster =new drucken();
      d_fenster.setVisible(true);
      textZerlegen();
      */
  }
  private void textZerlegen() {
      zeilen = new Vector<String>();
      
      String letztesToken = "";
      
      String text = textfeld.getText();
      StringTokenizer t = new StringTokenizer(text, "\n\r", true);
      
      while (t.hasMoreTokens()) {
          String zeile = t.nextToken();
          
          if(zeile.equals("\r"))
              continue;
          
          if(zeile.equals("\n") && letztesToken.equals("\n"))
              zeilen.add("");
          
          letztesToken = zeile;
          
          if(zeile.equals("\n"))
              continue;
          
             //d_fenster.paintComponent(d_fenster.g,zeile);
          
            zeilen.add(zeile);
      }
  }
  
  public int print(Graphics pg, PageFormat pf, int seitennr) throws PrinterException {

      Graphics2D pg2 = (Graphics2D) pg;
      pg2.translate(pf.getImageableX(), pf.getImageableY());
      
      Font f = textfeld.getFont();
      pg2.setFont(f);
      fm = pg2.getFontMetrics();
      
      if(druckAbfragen==true) {
          int seitenBreite  = (int) pf.getImageableHeight();
          int seitenHohe    = (int) pf.getImageableHeight();
          int anzahlZeilen  = zeilen.size();
          
          //Felder füllen
          zeilenHohe        = fm.getHeight();
          zeilenProSeite    = Math.max(seitenHohe/zeilenHohe,1);
          anzahlSeiten      = (int) Math.ceil((double)anzahlZeilen / (double) zeilenProSeite);
          
          return Printable.NO_SUCH_PAGE;
      }
      else {
          if (seitennr >= anzahlSeiten)
              return Printable.NO_SUCH_PAGE;
          
          int x = 0;
          int y = fm.getAscent();
          
          int zeilenIndex = zeilenProSeite * seitennr;
          
          while(zeilenIndex < zeilen.size() && y < (int) pf.getImageableHeight()) {
              str = zeilen.get(zeilenIndex);
              pg2.drawString(str, x, y);
              y += zeilenHohe;
              ++zeilenIndex;
          }
          
          return Printable.PAGE_EXISTS;
      }
      
  }

   
   protected static final class WindowLauscher extends WindowAdapter {
       public void windowClosing (WindowEvent e) {
           System.exit(0);
       }
   }
   
   public class ButtonListener implements ActionListener { 
    public void actionPerformed (ActionEvent e) { 
        if(e.getSource() == b_drucken) { 
            drucken();
        }
    }}
   
    public static void main(String[] args) {
        String dateiname = null; 
        ditor fenster = new ditor(); 
        fenster.setSize(750,600); 
        fenster.setLocation(150,75); 
        fenster.setVisible(true);
        fenster.textfeld.setText("Bis jetzt funktioniert:\n\n-Neu\n-Öffnen\n-Speichern unter" +
                "\n-Speichern" +
                "\n-ausschneiden\n-kopieren\n-einfügen\n-Fett\n-Kursiv\n-Schriftart ändern\n\nund natürlich Beenden" +
                "\n\n\n Jetzt neu: Anwendung beendet sich richtig beim schließen");
        
  }

}
 
Zurück