Print JTextArea

Hallo Miteinander,
hab da mal wieder einen Fehler,aller anfang ist schwer :frowning:

The method setPrintable(Printable, PageFormat) in the type PrinterJob is not applicable for the arguments (JTextArea, PageFormat)

package test;

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.JTextArea;


public abstract class MeineTextarea extends JTextArea  implements Printable {

	 static  JTextArea testliste = new JTextArea(10,50);
	 public abstract int print(Graphics graphics, PageFormat pageFormat, int pageIndex);
	
	

	public void drucken()
	{
	PrinterJob printJob = PrinterJob.getPrinterJob(); 
	    PageFormat pageFormat = new PageFormat(); 
	    
	    pageFormat.setOrientation(PageFormat.LANDSCAPE); 
	    printJob.setPrintable(testliste, pageFormat); 
	    try { 
	        printJob.print(); 
	    } catch(PrinterException pe) { 
	        System.out.println("Error printing: " + pe);
	}
}


}

http://java.sun.com/javase/6/docs/api/java/awt/print/Printable.html
hilft mir aber leider nicht weiter. vielleicht kann mir ja einer von euch helfen. Danke.

Die Methode setPrintable erwartet ein Printable Objekt (eine Klasse mit dem Interface) nur du hast eine JTextArea, die das Interface nicht implementiert.
Du musst dir da was “basteln” um diese Sache zu beheben

printJob.setPrintable(this, pageFormat);

Deine Klasse erbt doch bereits von JTextArea, wozu also die statische JTextArea-Referenz in deiner Klasse?

Diese Zeile entfernen:
static JTextArea testliste = new JTextArea(10,50);

und diese so ändern:
printJob.setPrintable(this, pageFormat);

Damit deine Klasse auch noch brauchbar wird, nicht vergessen, diese Methode in deiner Klasse zu implementieren, sonst ist diese auch abstract.

danke.habs nun alles in einer Klasse, jedoch wenn ich auf drucken klicke, schaufelt er mir meinen Drucker voll, also z.b. will er dann 22.000 Seiten drucken. Jemand eine Idee?

Mir fällt grad ein: hast du mal eine Druckvorschau über den Treiber angefordert? Vielleicht schickst du dem Drucker ja wirklich 22000 Seiten, möglicherweise über eine Endlosschleife?

Damit nur eine Seite gedruckt wird, musst du in deiner „print“-Methode sowas machen:
if (pageIndex > 0) return(NO_SUCH_PAGE);