JTable im Hoch- und Querformat angepasst drucken

snueffel

Mitglied
Hallo zusammen!

Ich versuch derzeit ein JTable zu drucken - so weit so gut. Bevor jetzt allerdings die Links zum HowTo kommen:

Ich hab eine JPanel-Klasse, die jeweils ein JTable enthält und entsprechend der Anforderungen gefüllt wird (die Klasse wird mehrfach instanziiert, jedoch mit unterschiedlichen Daten), d.h. unterschiedliche Spalten- und Zeilenzahl, etc... Zum Druck muss die Tabelle kopiert werden, damit die Original-Tabelle nicht verändert wird (RowSorter, Spaltenbreite,...) und dennoch die Standard-Ansicht gedruckt wird (hier gibt es eine Methode, die die Standard-Ansicht für das clonedTable setzt). Für die Breite der einzelnen Spalten nutze ich ein int[] mit einem "Gewicht".

Ich habe es derzeit so realisiert, dass ich über MediaSize.ISO.A4 die Größe der Seite erhalte und dementsprechend die Spalten über setSize() anpasse (hat ja nach dem Kopieren die Größe 0,0), was auch wunderbar funktioniert. Schalte ich jedoch im Printdialog auf Querformat um, bleibt natürlich die Tabelle von der Breite her wie es im Hochformat nötig wäre. Da ich bereits mit JTable.PrintMode.FIT_WIDTH arbeite, ist das auch keine Lösung... Hat jemand eine Idee wie man das möglichst elegant lösen könnte? :bahnhof:
 
Ich habe mich inzwischen durch hunderte Webseiten gekämpft, leider noch mit begrenztem Erfolg... (Kann es sein, dass es zig verschiedene Möglichkeiten gibt etwas zu drucken, aber keine wirklich ausgereift ist? ^^)

Ich habe jetzt den PrinterJob und den Dialog "ausgegliedert", dadurch wollte ich die Seiteneigenschaften beeinflussen:
Java:
    public void print(String title)
    {
	PrinterJob pj = PrinterJob.getPrinterJob();
	pj.setJobName(title);
	PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();

	aset.add(DialogTypeSelection.COMMON);
	boolean druck = pj.printDialog(aset);

	if (druck)
	{
	    PageFormat pf = pj.getPageFormat(aset);
	    int hoehe = (int) pf.getImageableHeight();
	    int breite = (int) pf.getImageableWidth();

	    JTable clonedTable = cloneTableStdized();
	    int sumFactors = 0;
	    for (int idx = 0; idx < gewBreite.length; idx++)
		sumFactors += gewBreite[idx];
	    int factor = (int) (breite / sumFactors * LayoutClass.PRINTFACTOR);
	    setStdizedWidth(clonedTable, factor);
	    clonedTable.setSize(breite, hoehe);

	    Printable print = table.getPrintable(JTable.PrintMode.FIT_WIDTH, new MessageFormat(title), new MessageFormat("Seite - {0}"));
	    pj.setPrintable(print, pf);
	    try
	    {
		pj.print();
	    } catch (PrinterException e)
	    {}
	}
    }

Das Problem hierbei ist noch, dass hoehe und breite immer gleich sind, auch, wenn ich z.B. die Seitenränder verändere... Hat evtl. mit dem Code eine Idee?

Edit: Ich habe es eben zufällig nochmals im Querformat versucht, die Breite wird doch angepasst :applaus: Eine Frage bleibt aber dennoch: Warum wirkt sich ein Verstellen der Seitenränder nicht aus?
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben