JTable drucken

Status
Nicht offen für weitere Antworten.

Plunder

Neues Mitglied
Hallo liebe Java-Gemeinde,

ich drucke meine JTable mit
Java:
myJTable.print()
Nun möchte ich die Breite der Seitenränder auf einen bestimmten Wert voreinstellen (z.B. 10mm) und dies nicht jedes Mal über den Print Dialog neu einstellen müssen. Kann mir jemand helfen?
 

André Uhres

Top Contributor
Versuch's mal so:
Java:
private PrintRequestAttributeSet attr;
...
private void print() {
    if (attr == null) {
        attr = new HashPrintRequestAttributeSet();
        float leftMargin = 10;
        float rightMargin = 10;
        float topMargin = 10;
        float bottomMargin = 10;
        attr.add(OrientationRequested.PORTRAIT);
        attr.add(MediaSizeName.ISO_A4);
        MediaSize mediaSize = MediaSize.ISO.A4;
        float mediaWidth = mediaSize.getX(Size2DSyntax.MM);
        float mediaHeight = mediaSize.getY(Size2DSyntax.MM);
        attr.add(new MediaPrintableArea(
                leftMargin, topMargin,
                (mediaWidth - leftMargin - rightMargin),
                (mediaHeight - topMargin - bottomMargin), Size2DSyntax.MM));
    }
    try {
        jTable1.print(JTable.PrintMode.FIT_WIDTH, null, null, true, attr, true);
    } catch (PrinterException ex) {
        ex.printStackTrace();
    } catch (HeadlessException ex) {
        ex.printStackTrace();
    }
}
 

mathieu

Mitglied
Hi,
was Sie geschrieben haben, funktionniert hammer. Ich möchte noch kurz was wissen.
Wie kann man ein Kopfzeile und Fusszeile setzen?

Danke
MfG aus Paris

Mathieu
 

André Uhres

Top Contributor
Wie kann man ein Kopfzeile und Fusszeile setzen?
Dazu dient der zweite und dritte Parameter (MessageFormat):
Java:
print(JTable.PrintMode, MessageFormat, MessageFormat, boolean, PrintRequestAttributeSet, boolean)

Header und Footer Text kann hinzugefügt werden (ansonsten einfach null angeben);
im MessageFormat kann man als ArgumentIndex 0 für die Seitennummer angegeben: [c]new MessageFormat("Page {0}") [/c]

JTable.PrintMode.NORMAL druckt die JTable mit der aktuellen Grösse.
JTable.PrintMode.FIT_WIDTH verkleinert die JTable, wenn nötig, so daß alle Spalten auf eine Seite passen.
Mit dem ersten boolean Parameter kann man angeben ob der Druckdialog angezeigt werden soll oder nicht.
"PrintRequestAttributeSet" ermöglicht die direkte Angabe von Druckattributen.
Wenn der zweite boolean true ist (empfohlen), wird während des Druckvorgangs ein modaler Progressdialog angezeigt, mit Abbruchmöglichkeit.
 

mathieu

Mitglied
Hi André,
Ok für den print(), einverstanden.
print(JTable.PrintMode, MessageFormat, MessageFormat, boolean, PrintRequestAttributeSet, boolean)


MessageFormat header= new MessageFormat("Hi This is my JTable");
MessageFormat footer = new MessageFormat("Page {0,number,#.#}");

print(JTable.PrintMode, header, footer, true, PrintRequestAttributeSet, true)

Wie kann man in Kopfzeile ein multi line text schreiben?

MfG aus Paris
Mathieu
 

André Uhres

Top Contributor
Wie kann man in Kopfzeile ein multi line text schreiben?
Folgende Methode ist verfügbar für erweiterte Druckanforderungen:
Java:
getPrintable(JTable.PrintMode, MessageFormat, MessageFormat)
Unten ist ein Demoprogramm das zeigt, wie man die JTable Druckfunktion anpassen kann. Als Beispiel drucken wir einen Reportheader mit zwei Zeilen und Rand.
Ein sehr gutes Tutorial über das Drucken von Tabellen, mit weiteren Einzelheiten: How to Print Tables
Java:
/*
 * TableReportDemo.java
 * This demo shows you how to customize the JTable print function.
 * As an example, we print a report header with two rows and a border.
 */
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
import java.util.logging.*;
import javax.print.attribute.*;
import javax.swing.*;
import javax.swing.JTable.*;
import javax.swing.table.*;
public class TableReportDemo extends JFrame {
    private JTable table;
    private JButton btPrint;
    private Action printAction = new AbstractAction("Print...") {
        public void actionPerformed(final ActionEvent e) {
            try {
                printJTable();
            } catch (PrinterException ex) {
                Logger.getLogger(TableReportDemo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    };
    public TableReportDemo() {
        super("TableReportDemo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        btPrint = new JButton();
        add(btPrint, BorderLayout.SOUTH);
        btPrint.setAction(printAction);
        add(new JScrollPane(createTable()), BorderLayout.CENTER);
        pack();
    }
    public JTable createTable() {
        String[] title = new String[]{"Title A", "Title B", "Title C", "Title D", "Title E"};
        String[][] data = new String[][]{};
        DefaultTableModel model = new DefaultTableModel(data, title);
        table = new JTable(model);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        for (int i = 0; i < 50; i++) {
            model.addRow(new String[]{String.valueOf(i), "", "", ""});
        }
        return table;
    }
 
    private void printJTable() throws PrinterException {
        // possibly prepare the table for printing here first
        // wrap in a try/finally so table can be restored even if something fails
        try {
            // fetch the printable
            Printable printable = new TableReport(table);
            PrinterJob job = PrinterJob.getPrinterJob();// fetch a PrinterJob
            job.setPrintable(printable);// set the Printable on the PrinterJob
            // create an attribute set to store attributes from the print dialog
            PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
            // display a print dialog and record whether or not the user cancels it
            boolean printAccepted = job.printDialog(attr);
            if (printAccepted) {// if the user didn't cancel the dialog
                job.print(attr);// do the printing
            }
        } finally {
            // possibly restore the original table state here
        }
    }
    public static void main(final String[] args) {
        Runnable gui = new Runnable() {
 
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                new TableReportDemo().setVisible(true);
            }
        };
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }
}
class TableReport implements Printable {
    private Printable tablePrintable;
    private PageFormat pageFormatJTable;
    public TableReport(final JTable table) {
        tablePrintable = table.getPrintable(JTable.PrintMode.FIT_WIDTH, 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(x1, y1 + 60,//skip header area
                        w1, h1 - 90);//reserve space for header and footer
            }else{
                paperJTable.setImageableArea(y1 + 60, x1,//skip header area
                        h1 - 90, w1);//reserve space for header and footer
            }
            pageFormatJTable.setPaper(paperJTable);
        }
        String title = "Title";
        String subtitle = "Subtitle";
        Font f = g.getFont();
        g.setFont(g.getFont().deriveFont(15f));
        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.drawRect(x1, y1, w1, 40);
        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;
    }
}
 

Tom_

Aktives Mitglied
@André Funktioniert super! Wobei ich das Kernstück nicht herauslesen kann, wenn ich es nachprogrammiere, dann druckt es mir nur den äußeren Rahmen von dem JTable.
Hab mich jetzt dazu entschlossen demo einfach zu Parametrieren.

Verstehe ich es richtig, dass man mit int x1 = (int) pageFormat.getImageableX();
int y1 = (int) pageFormat.getImageableY();
int w1 = (int) pageFormat.getImageableWidth();
int h1 = (int) pageFormat.getImageableHeight();
indirekt auch die Row's pro Seite bestimmen kann?

Wie weit gehen die theoretischen Möglichkeiten beim Java-drucken. Kann ich ganze Seiten designen also mit Graphik -und Textelementen?

lg
Tom
 

André Uhres

Top Contributor
Hallo Tom,

es freut mich, dass du den Code nützlich findest. Allerdings machen wir bei so alten Threads gewöhnlich einen neuen auf und verweisen lediglich auf den alten. Das aber nur nebenbei.

Die "ImageableHeight" entspricht der bedruckbaren Seitenhöhe und wird oft benutzt, um die Anzahl von Zeilen pro Seite zu bestimmen, abhängig von der Zeilenhöhe. Die "ImageableWidth" wird oft benutzt, um einen "scale factor" zu bestimmen, damit die Breite des Dokuments ganz auf eine Seite passt.

Mit Java können wir ganze Seiten mit allen möglichen Graphik- und Textelementen entwerfen.

Gruß,
André
 

Tom_

Aktives Mitglied
ok! :) Danke für den Hinweis. Bin über google auf den Thread gekommen, ist mir gar nicht aufgefallen wie alt der schon ist.
Das reicht mir im Moment zum weiter machen, wenn ich mehr Fragen habe, dann machen ich einen neunen Thread auf.

lg
Tom
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Drucken eines JTable Allgemeine Java-Themen 6
KeTho1712 Java Swing: JTable standardmäßig füllen, sodass bei Start bereits Datensätze gespeichert sind Allgemeine Java-Themen 1
H Swing JTextArea als TableCellRenderer in JTable - wie Zeilen selektieren? Allgemeine Java-Themen 47
D JTable mit JTextAreas in den Zellen Allgemeine Java-Themen 8
X Swing JTable zeigt nichts Allgemeine Java-Themen 4
G jTable aktualisieren?! Allgemeine Java-Themen 1
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
A Fehler beim Aktualisieren JTable Allgemeine Java-Themen 1
D falsche Zeile aus JTable in MySQL gelöscht Allgemeine Java-Themen 6
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
V JTable Externe Lib Allgemeine Java-Themen 2
F JTable Pfeiltasten-Verhalten Allgemeine Java-Themen 1
T jTable Gestaffelte Überschriften Allgemeine Java-Themen 22
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
R jTable, nur Werte zwischen 2 Double values ausgeben Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
A JTable Bilder Allgemeine Java-Themen 1
F JTable mit Zellen die sich durch andere Eingaben füllen Allgemeine Java-Themen 1
A JTable - CellRange auslesen Allgemeine Java-Themen 2
A jTable Renderer Allgemeine Java-Themen 5
N JTable filtern Allgemeine Java-Themen 3
hdi JTable#print & Druckgröße Allgemeine Java-Themen 6
S JTable: Model durch ein anderes ersetzen Allgemeine Java-Themen 2
G JTable: ListSelectionListener removen Allgemeine Java-Themen 8
M JTable + ArrayList Allgemeine Java-Themen 3
G Aktualisierung einer JTable erfolgt nicht zuverlässig Allgemeine Java-Themen 14
E Hintergrund einer JTable änden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
Iron Monkey Inhalt von JTable in die Textdatei mit StringWidth schreiben Allgemeine Java-Themen 3
P jTable getSelectedRow? Allgemeine Java-Themen 2
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
B LEERE JTable MouseListener + popupmenu Allgemeine Java-Themen 2
X xml aus Zip in JTable Allgemeine Java-Themen 2
L jTable drag & drop einzelner Zeilen Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
H JTable per iText in PDF: Größenanpassung möglich? Allgemeine Java-Themen 2
F XML zu JTable mit JDOM Allgemeine Java-Themen 2
E JTable wird nicht angezeigt Allgemeine Java-Themen 11
Screen ImageIcon in Cell der JTable Allgemeine Java-Themen 2
G JTable mit Keylistener geht nicht Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
A Swing JTable Polymorphismus Allgemeine Java-Themen 2
trash super + JTable Allgemeine Java-Themen 7
D JTable -> 1Spalte nur zahlen Allgemeine Java-Themen 2
L JTABLE setvalueat methode! Allgemeine Java-Themen 16
C Swing Daten zwischen JTable teilen Allgemeine Java-Themen 6
hdi JTable: Sortierung von Date-Objekten Allgemeine Java-Themen 4
B JTable nach Icon sortieren Allgemeine Java-Themen 6
N Exception beim auslesen einer JTable Allgemeine Java-Themen 5
M jdesktop binding: jTable update nach Änderung... Allgemeine Java-Themen 3
D JTable mit GROUP BY Allgemeine Java-Themen 23
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
X JTable mit Checkboxen -> Setzen (true/false) der Checkboxen per Mouseklick... Allgemeine Java-Themen 3
A JTable Feldwerte in JTextFelder mit blättern Allgemeine Java-Themen 5
DStrohma [Erledigt] Wieso kann ich Taste 'ENTER' in JTable nicht belegen? Allgemeine Java-Themen 2
M jTable Allgemeine Java-Themen 19
D jTable und TableModel Allgemeine Java-Themen 2
B Exception bei leerem JTable verhindern Allgemeine Java-Themen 10
A Observable BeansBinding an einer JTable bzw. JXTable Allgemeine Java-Themen 3
P Textfile -> Array -> JTable Allgemeine Java-Themen 9
S JTable Aktuelisieren ber Wie ? Allgemeine Java-Themen 4
MQue JComboBox in JTable Allgemeine Java-Themen 4
J Ergebnismenge eines SQL-Queries in JTable anzeigen Allgemeine Java-Themen 3
MQue JTable alles rechts Allgemeine Java-Themen 8
G Checkboxen abfragen,Auswahl sichern, JTable laden Allgemeine Java-Themen 2
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
R JTable und Cell Renderer Allgemeine Java-Themen 3
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
S Welche Speicherung von Daten bei Kalendarfunktion der jtable Allgemeine Java-Themen 7
J keylistener auf jtable Allgemeine Java-Themen 19
C JTable, Abstand zwischen Zellen Allgemeine Java-Themen 2
G Eindeutiges Identifizieren einer JTable/Component z.laufzeit Allgemeine Java-Themen 2
D JTable -> ArrayIndexOutOfBoundsException bei Mausklick Allgemeine Java-Themen 2
S JTable editieren + in JTextField schreiben Allgemeine Java-Themen 7
G Daten in / für JTable beim Scrollen nachladen? Allgemeine Java-Themen 5
M JTable verändert Position auf meinem JPanel Allgemeine Java-Themen 3
P JTable Allgemeine Java-Themen 2
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
P JTable setDataVector Allgemeine Java-Themen 2
D Scrollbalken in meiner JTable auf einmal weg. Allgemeine Java-Themen 2
P JTable Allgemeine Java-Themen 8
P JButtons mit JTable verknüpfen Allgemeine Java-Themen 16
G fehler bei JTable mit JDK1.6 Allgemeine Java-Themen 4
M CheckBox in JTable - ich verzweifle gleich Allgemeine Java-Themen 2
P JTable/Vector Allgemeine Java-Themen 5
P JTable Allgemeine Java-Themen 4
E JButton bleibt in der JTable Allgemeine Java-Themen 2
E JButton in einer Zelle von JTable Allgemeine Java-Themen 16
P JTable selektierte Zeile mitwandern Allgemeine Java-Themen 2
F Checkbox in JTable , eigener Cellrenderer -wie gehts weiter? Allgemeine Java-Themen 2
P JTable suchen in einer Spalte Allgemeine Java-Themen 24
G JTable wird nicht richtig aufgebaut Allgemeine Java-Themen 9
C Ausdrucken einer JTable in eine Datei mit Erhalt des Formats Allgemeine Java-Themen 3
W Columns austauschen/verschieben von jtable Allgemeine Java-Themen 3
P 3rd party JTable libraries (freeware/opensource) Allgemeine Java-Themen 19
D JTable aus Eclipse Ok, kompeliert aber nicht Allgemeine Java-Themen 6
G mySQL und JTable Allgemeine Java-Themen 7
D JTable und Buttons Allgemeine Java-Themen 16
B JScrollPane in einer JTable aktualisieren? Allgemeine Java-Themen 9
G CheckBox in JTable Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben