Hallo zusammen,
ich habe das Problem, dass mein JTable beim Drucken immer über mehrere Seiten geht.
Gibt es hier die Möglichkeit zusagen, dass es beispielsweite immer auf 1 Seite breit heruntergezoomt wird, so wie es beispielsweise im Excel unter Layout möglich ist?
Desweiteren werden nur die Daten-Zeilen gedruckt, die Überschriftzeilen werden leider nicht gedruckt. Woran liegt das?
Die JTable wird über ein DefaultTableModel und dem Befehl .addColumn bzw. addRow befüllt.
ich habe das Problem, dass mein JTable beim Drucken immer über mehrere Seiten geht.
Gibt es hier die Möglichkeit zusagen, dass es beispielsweite immer auf 1 Seite breit heruntergezoomt wird, so wie es beispielsweise im Excel unter Layout möglich ist?
Desweiteren werden nur die Daten-Zeilen gedruckt, die Überschriftzeilen werden leider nicht gedruckt. Woran liegt das?
Die JTable wird über ein DefaultTableModel und dem Befehl .addColumn bzw. addRow befüllt.
Java:
class TableReport implements Printable {
private Printable tablePrintable;
private PageFormat pageFormatJTable;
public TableReport(final JTable table) {
tablePrintable = table.getPrintable(null,
null, null);
}
public int print(final Graphics graphics, final PageFormat pageFormat,
final int pageIndex) throws PrinterException {
Graphics2D g = (Graphics2D) graphics;
int x1 = (int) pageFormat.getImageableX();
int y1 = (int) pageFormat.getImageableY();
int w1 = (int) pageFormat.getImageableWidth();
int h1 = (int) pageFormat.getImageableHeight();
if (pageFormatJTable == null) {
pageFormatJTable = (PageFormat) pageFormat.clone();
Paper paperJTable = pageFormatJTable.getPaper();
if (pageFormatJTable.getOrientation() == PageFormat.PORTRAIT) {
paperJTable.setImageableArea(10, y1 + 400,
w1, h1 - 400);//
} else {
paperJTable.setImageableArea(y1 + 400, 10,
h1 - 400, w1);
}
pageFormatJTable.setPaper(paperJTable);
}
String title = "Test";
String subtitle = "Subtitle";
Font f = new Font("Arial", Font.PLAIN, 10);
g.setFont(g.getFont().deriveFont(10f));
FontMetrics fm = g.getFontMetrics();
g.drawString(title, x1 + (w1 - fm.stringWidth(title)) / 2, y1 + 15);
g.setFont(f);
fm = g.getFontMetrics();
g.drawString(subtitle, x1 + (w1 - fm.stringWidth(subtitle)) / 2,
y1 + 30);
g.drawString("Adresszeile1", 100, 200);
g.drawString("Adresszeile2", 100, 220);
g.drawRect(x1, y1, w1, 40); //schwarzes Rechteck um Überschrift
String footer = "Page " + (pageIndex + 1);
g.drawString(footer, x1 + (w1 - fm.stringWidth(footer)) / 2, y1
+ h1 - 10);
// print the table:
Graphics gCopy = g.create();
int retVal = tablePrintable.print(gCopy, pageFormatJTable,
pageIndex);
gCopy.dispose();
//
return retVal;
}
Java:
try {
Printable printable = new TableReport(table);
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(printable);
PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
boolean printAccepted = job.printDialog(attr);
if (printAccepted) {
try {
job.print(attr);
} catch (PrinterException e1) {
e1.printStackTrace();
}
}
} finally {
}