carookee - group communication for you
Home / JavaForum / Swing + AWT
Infos   |   Features   |   Gold-Edition   |   Kundenservice   
java
  Übersicht
  Forum
Beginner
Java allgemein
JDBC
JNI
Networking
Online-Ressourcen
Swing + AWT
XML
Meckerecke
  Mitglieder
LOGIN





· Passwort vergessen
· Kostenlos anmelden
  Information
  Demo
  Features
  Im Vergleich
  Anmeldung
SUCHE
Beiträge, Foren oder Verfasser finden:
  Kundenservice
  Impressum
  Datenschutz
  AGB
Status
4.934 User online
0 User eingeloggt
 

Beiträge
   Antworten     Neuer Beitrag    

Beitrag 236 von 1460 (16%) |<   <   >   >|

Autor Andreas Schmied
Datum 23.10.03, 17:41
Betreff Drucken eines Componenten


Hallo zusammen, ich häng im Moment an folgendem Problem.

Ich verwende JDK 1.3.1 und will unter NT eine SwingComponente ausdrucken.

Das Problem dabei ist die größe der Componente, meist wesentlich länger und breiter als eine Seite. Daher muß der Druck aufgeteilt werden, sowohl in der Länge als auch breite. Das ganze hab ich nun mit Rendering des Graphics2D hinzubekommen, aber ich komm damit nicht zurecht, vielleicht kennt jemand das Problem oder weiss woran es liegt.

Der Ausdruck selbst passt einfach nicht, Page 1-1 wird noch entsprechend angezeigt. Auf Page 1-2/1-... ist die Tabelle nicht mehr zu sehen und der Header verschoben. Wahrscheinlich ein Fehler im Clip und Translate - aber ich hab noch nie damit gearbeitet und seh nichts was falsch sein könnte (hab mich am Sun Advanced-Printing Beispiel orientiert). Page 2-1 geht dann wieder

Hier nochmal der Quellcode, vielleicht sieht ja jemand von euch auf einen kurzen Blick was nicht stimmt. Eventuell stimmt was mit dem pageIndex nicht, zumindest gibt es dort etwas was ich mir nicht erklären kann. Statt 0-1-2-3... hochzuzählen passiert jede Index das ganze 2mal (also 0-0-1-1-2-2...)

Bin im Moment mit meinem Latein am Ende und sehr dankbar für jeden Tip und Hinweise.

Danke im Vorraus

public int print(Graphics g, PageFormat pageFormat, int page)
throws PrinterException {
return printTable(g, pageFormat, page);
}

private int printTable(Graphics g, PageFormat pageFormat, int pageIndex)
throws PrinterException {

JTable tableView = table;
pageFormat.setOrientation(PageFormat.LANDSCAPE);
Graphics2D g2 = (Graphics2D) g;

g2.setColor(Color.black);
int fontHeight = g2.getFontMetrics().getHeight();
int fontDesent = g2.getFontMetrics().getDescent();

double pageHeight = pageFormat.getImageableHeight() - fontHeight;
double pageWidth = pageFormat.getImageableWidth();
double tableWidth = (double)tableView.getColumnModel().getTotalColumnWidth();
double tableHight = (double)tableView.getHeight();
double scale = 1;

//if (tableWidth >= pageWidth)
// scale = pageWidth / tableWidth;
//System.out.println("Scale: "+ scale);

double headerHeightOnPage = tableView.getTableHeader().getHeight() * scale;
double tableWidthOnPage = tableWidth * scale;
double oneRowHeight = (tableView.getRowHeight() + tableView.getRowMargin()) * scale;
int numRowsOnAPage = (int) ((pageHeight - headerHeightOnPage) / oneRowHeight);
double pageHeightForTable = oneRowHeight * numRowsOnAPage;
int pagesWidth = (int) Math.ceil(tableView.getTableHeader().getWidth() / pageWidth);
int pagesHeight = (int) Math.ceil(((double) tableView.getRowCount()) / numRowsOnAPage);
int totalNumPages = pagesWidth * pagesHeight;

if (pageIndex >= totalNumPages){
return NO_SUCH_PAGE;
}

disableDoubleBuffering(this);

int pageX = (pageIndex - ((pageIndex/pagesWidth) * pagesWidth));
int pageY = pageIndex / pagesWidth;

g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
String footerString = new String("Page: " + (pageY + 1) + " - " + (pageX + 1));

g2.drawString(
footerString,
(int) pageWidth / 2 - 35,
(int) (pageHeight + fontHeight - fontDesent)
);

g2.translate(0f, headerHeightOnPage);
int translateX = pageX * (int) Math.ceil(pageWidth);
int translateY = -(pageY * (int) Math.ceil(pageHeight));
g2.translate(translateX, translateY);

if ((pageIndex + pagesWidth) >= totalNumPages){
int lastRowPrinted = numRowsOnAPage * pageY;
int numRowsLeft = tableView.getRowCount() - lastRowPrinted;
g2.setClip(
pageX * (int)Math.ceil(pageWidth),
pageY * (int)Math.ceil(pageHeightForTable),
(pageX + 1)* (int)Math.ceil(pageWidth),
(int) Math.ceil(oneRowHeight * numRowsLeft)
);
}
else {
g2.setClip(
pageX * (int)Math.ceil(pageWidth),
pageY * (int)Math.ceil(pageHeightForTable),
(pageX+1)*(int)Math.ceil(pageWidth),
(pageY+1)*(int)Math.ceil(pageHeightForTable)
);
}
tableView.paint(g2);

g2.translate(0f, -headerHeightOnPage);
translateX = -(pageX * (int) Math.ceil(pageWidth));
translateY = (pageY * (int) Math.ceil(pageHeight));
g2.translate(translateX, translateY);

g2.setClip(
pageX * (int) Math.ceil(pageWidth),
0,
(pageX + 1 ) *(int) Math.ceil(pageWidth),
(int) Math.ceil(headerHeightOnPage)
);
tableView.getTableHeader().paint(g2);
enableDoubleBuffering(this);
return Printable.PAGE_EXISTS;
}




 Auf diesen Beitrag antworten
 Neuen Beitrag verfassen


|<   <   >   >|

                                                                                                                                                                                                                           

Impressum  · Datenschutz  · AGB  · Infos  · Presse
Ein modernes Forum: teamturn.com