drucken von JTable

peshay

Mitglied
hi, ich benötige etwas hilfe beim drucken von einem JTable, bis jetzt hab ich folgendes (hauptsächlich aus einem buch abgetippt und abgeändert):

die funktion zum drucken:
Code:
	public void drucken()
	{
		PrinterJob druckJob = PrinterJob.getPrinterJob();
		druckJob.setPrintable(table);
		PageFormat seitenFormat = druckJob.pageDialog(druckJob.defaultPage());
		if(druckJob.printDialog())
		{
			try
			{
				druckJob.print();
			}
			catch(Exception e)
			{
				JOptionPane.showMessageDialog(null, "Fehler beim drucken.");
			}
		}
	}

ein veränderter JTable der das drucken ermöglicht:
Code:
class printtable extends JTable implements Printable
{
	public int print(Graphics g, PageFormat pf, int pi) throws PrinterException 
	{
		if(pi >=1)
			return Printable.NO_SUCH_PAGE;
			
		Graphics2D g2d = (Graphics2D) g;
		g2d.translate(pf.getImageableX(), pf.getImageableY());
		paint(g2d);
		
		return Printable.PAGE_EXISTS;
	}
}

der druckt sogar mein JTable, nur hab ich das problem, dass wenn ich nicht sage das er von Seite 1 bis 1 drucken soll das er dann 9999 Seiten druckt..
außerdem ist der table nicht ganz auf dem blatt drauf, lässt sich des irgendwie skalieren? ich hab schon versucht querformat zu drucken, aber das hat er nicht gemacht...
Ansonsten hätte ich noch gern die tableheads drüber stehen und (wenns nich zuviel umstand macht) ein label in dem gesamtstunden vom table drinstehn mit drauf.. was aber fürs erste nich so wichtig ist...

vielen dank schonmal für eure antworten
 
Hallo!

Versuch mal folgendes:

Baue eine Subklasse von der Komponente die du drucken willst und implementiere einfach das Interface Pageable. Dort implementierst du dann einach die Methode getNumberOfPages() ...

Dann kannst du selbstbestimmen, wieviele Seiten er drucken soll.

Gruß Tom
 
hat vieleicht noch einer ne idee wie ich des angehen soll das der table mal gscheit drauf is? zusammen mit den heads? muss ich da eher mit den print und pageable arbeiten oder schon vorher mit Graphics2d irgendwie umskalieren oda so...
 
Original geschrieben von peshay
hat vieleicht noch einer ne idee wie ich des angehen soll das der table mal gscheit drauf is? zusammen mit den heads? muss ich da eher mit den print und pageable arbeiten oder schon vorher mit Graphics2d irgendwie umskalieren oda so...

Also ich weiss nur, dass dieses 9999-Seiten-drucken-Problem nicht nur Dich erwischt hat. Wir haben hier auch ne ganze Menge herumgewuselt und auch explizit berechnet, wie viele Spalten und Zeilen auf eine Seite passen, den Header explizit gezeichnet usw. Das jetzt aber alles auseinanderzufrickeln und hier auch noch zu erklären, das würde leider zu weit führen.
 
naja.. des mit dem beispiel war wohl nix.. :(

Not Found
The requested object does not exist on this server. The link you followed is either outdated, inaccurate, or the server has been instructed not to let you have it. Please inform the site administrator of the referring page.

aber trotzdem danke, werd scho irgendwie rausfinden wie ich des gscheit hinbekomm..
 
Original geschrieben von peshay
naja.. des mit dem beispiel war wohl nix.. :(

aber trotzdem danke, werd scho irgendwie rausfinden wie ich des gscheit hinbekomm..

Soweit ich das sehe, ist Deine Implementierung korrekt, sieht bei uns nicht anders aus mit dem

Code:
public int print(Graphics g, PageFormat pf, int pi) throws PrinterException 
{
if(pi >=1)
return Printable.NO_SUCH_PAGE;

Graphics2D g2d = (Graphics2D) g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
paint(g2d);

return Printable.PAGE_EXISTS;
}

Ich würde vermuten, dass der Fehler woanders liegt.
 
naja, bei meinem ausdruck ist auf jeder seite n wahnsinnig breiter rand, wo ich schon versucht hab manuell zu ändern was nix gebracht hat, wenigsten kann man die 9999 Seiten manuell ändern, wär ja schlimm bei jedem test-ausdruck.. und da der table irgendwie zu breit ist sind 2 spalten nicht mehr drauf..
ich denke mal das sind probleme die ich mit pageable lösen könnte

das mir die heads und n feld mit gesamtzeit noch fehlen, würde sich wohl mit dem jfreereport lösen lassen..

naja mal sehen.. werd die nächste zeit nich viel zeit haben des umzusetzen, aber ich wenns ich hab könnt ichs ja hier posten (oder eventuell in ein tutorial umsetzen.. wer weiss..)
 
Zuletzt bearbeitet:
Hallo!

Anscheinend hats den Link in meinem letzten Posting zerissen... der obendrüber funktioniert allerdings und beherbergt ein gutes Beispiel.

Gruß Tom
 

Neue Beiträge

Zurück