hi,
ich versuche grade, den Inhalt eines JPanels irgentwie auf papier zu bannen.
ich habe mir hier und woanders auch schon einige Beispiel zum Thema drucken durchgesehen, aber irgentwie klappt das nicht,
vieleicht auch weil ich die falschen Teile der Beispiele zusammensetze.
Also, meine vorgehensweise ist folgende:
ich habe eine classe PrinterUtil.java, die kommt nicht von mir, ich muß sie aber benutzen,
das ganze ist ein Team-Projekt, und ich soll jetzt die Ausgabe auf dem Papier gestalten.
Ich bastel also für jede verschiedene Druckausgabe, die wir brauchen eine Classe, die die Daten übergeben kriegen und sie dann in Form bringen muß,
den Druck an sich macht die PrinterUtil-Classe.
der Aufruf meiner Classen von aussen wird ungefähr so aussehen
wobei ich jetzt für die MyDrucker (Name geändert) verantwortlich bin.
Ein Fuchs wie ich einer bin habe dachte ich mir,
das ich die Classe ja direkt mal von JPanel erben lassen kann, einfach auf das Panel ein JTextPane packe,
und das dann mit html-text fülle, welcher die daten Anzeigt.
Leider bekomme ich das nicht hin.
Da ich einige tabellen etc auszgeben habe schien mir html am geeignetsten, um die Ausgabe zu formatieren.
meine Classe sieht bis jetzt so aus:
kann mir da einer auf die sprünge helfen, bitte?
wo ist meine wissenlücke, was habe ich nicht verstanden?
vielen dank schonmal im vorraus,
robert...
ich versuche grade, den Inhalt eines JPanels irgentwie auf papier zu bannen.
ich habe mir hier und woanders auch schon einige Beispiel zum Thema drucken durchgesehen, aber irgentwie klappt das nicht,
vieleicht auch weil ich die falschen Teile der Beispiele zusammensetze.
Also, meine vorgehensweise ist folgende:
ich habe eine classe PrinterUtil.java, die kommt nicht von mir, ich muß sie aber benutzen,
das ganze ist ein Team-Projekt, und ich soll jetzt die Ausgabe auf dem Papier gestalten.
Ich bastel also für jede verschiedene Druckausgabe, die wir brauchen eine Classe, die die Daten übergeben kriegen und sie dann in Form bringen muß,
den Druck an sich macht die PrinterUtil-Classe.
der Aufruf meiner Classen von aussen wird ungefähr so aussehen
Code:
public void scheineDrucken(List<UnsereData> a){
MyDrucker sd = new MyDrucker(a);
try{PrinterUtil.printDocument(sd);}catch(Exception e){}
}
Ein Fuchs wie ich einer bin habe dachte ich mir,
das ich die Classe ja direkt mal von JPanel erben lassen kann, einfach auf das Panel ein JTextPane packe,
und das dann mit html-text fülle, welcher die daten Anzeigt.
Leider bekomme ich das nicht hin.
Da ich einige tabellen etc auszgeben habe schien mir html am geeignetsten, um die Ausgabe zu formatieren.
meine Classe sieht bis jetzt so aus:
Code:
import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.*;
import java.awt.print.PrinterException;
import java.awt.Graphics2D;
import java.awt.print.PrinterJob;
import javax.swing.*;
public class testDrucker
extends JPanel
implements Printable{
//**grafikelemente**//
private JTextPane tPain;
/** Creates a new instance of testDrucker */
public testDrucker() {
System.out.println("konstruktor testdrucker");
initComponents();
scheinFuellen(0);
}
/***************************************
* Methode, die das Layout des Scheins festlegt
**************************************/
private void initComponents() {
System.out.println("initComponents");
tPain = new javax.swing.JTextPane();
tPain.setContentType("text/html");
tPain.setEditable(false);
setLayout(new java.awt.BorderLayout());
JScrollPane scrollPane = new JScrollPane(tPain);
add(scrollPane, BorderLayout.CENTER);
}
/****************************************
* Methode, die die Felder des Scheins mit den aktuellen werten aus der Liste füllt
**************************************/
private void scheinFuellen(int p) {
tPain.setText("<html><body>" +
"mal sehen ob hier auch tabellen funktionieren:
"+
"<table border='2'>" +
"<tr>" +
"<th>hier ist text</th>" +
"</tr>" +
"<tr>" +
"<th>und hier auch</th>" +
"</tr>" +
"</table>"+
"</body></html>");
}
/*********************************************
* Methode für das eigentliche ausdrucken
* @param graphics Graphics
* @param pageFormat PageFormat
* @param pageIndex int
* return int
* throws PrinterException
*********************************************/
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
int ret = PAGE_EXISTS;
System.out.println("printing.... " + pageIndex);
if(pageIndex>=2) {
ret = NO_SUCH_PAGE;
}
scheinFuellen(pageIndex);
Graphics2D g = (Graphics2D)graphics;
g.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
paint(g);
return ret;
}
}
kann mir da einer auf die sprünge helfen, bitte?
wo ist meine wissenlücke, was habe ich nicht verstanden?
vielen dank schonmal im vorraus,
robert...