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
User oder E-Mail
Passwort
·
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
Beginner
Java allgemein
JDBC
JNI
Networking
Online-Ressourcen
Swing + AWT
XML
Meckerecke
Antworten
Neuer Beitrag
Gesamtdarstellung
Detaildarstellung
Einzeldarstellung
Threaddarstellung
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