Jpanel mit Komponenten drucken

Popon

Mitglied
Hallo zusammen,
ich habe da ein Problem....
Und zwar habe ich ein Splitpane und möchte nur die rechte Seite davon drucken...
Auf der linken Seite habe ich einen JTable der sich je nach Selektierung dynamisch ändert.
Wenn ich dann auf einen der Ergebnisse klicke zeigt es mir auf der rechten Seite den Namen, das Bild und die Beschreibung an. Diese drei Elemente möchte ich nun drucken...

Ich zeig euch mal meine Code Abschnitte

Das rechte Pane

Java:
        //--------------------Panel Right------------------------
		
		
			//cocktailnamelabel hinzufuegen
		this.cocktailName.setFont(new Font("SansSerif", Font.BOLD | Font.ITALIC, 25));
		r.gridx = 0;
		r.gridy = 0;
		p_right.add(cocktailName, r);
		
		//bild hinzufuegen
		r.gridx = 0;
		r.gridy = 1;
		p_right.add(imageLabel, r);
		
		r.gridx = 0;
		r.gridy = 3;
		recipeTextArea.setBackground(this.cocktailName.getBackground());		
		recipeTextArea.setBounds(400, 275, 550, 600);
		
		// texteArea.setBounds(x, y, width, height)
		recipeTextArea.setLineWrap(true); 		// automatischer Textumbruch am Ende der TextArea
		recipeTextArea.setWrapStyleWord(true); 	// bricht den TExt immer nach einem ganzen Wort um
		p_right.add(recipeTextArea, r);

Hier ist der Listener zum Drucken

Java:
AbstractAction printAction = new AbstractAction("Drucken", null)
	{
		private static final long serialVersionUID = 1L;

		@Override
		public void actionPerformed(ActionEvent arg0)
		{
			Print print = new Print();
			
			print.print(cocktailName,cocktailImage,recipeTextArea);
		}
		
	};

Und hier die Print Klasse.

Java:
package Projekt;

import java.awt.*;
import java.awt.image.ImageObserver;
import java.awt.print.*;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTextArea;

public class Print implements Printable
{
	private String name ="";
	private Image image;
	private String desc = "";
	
	public void print(JLabel cocktailName, ImageIcon cocktailImage,
			JTextArea textArea)
	{
		this.name = cocktailName.getText();
		
		this.image = cocktailImage.getImage();
		
		this.desc = textArea.getText();
		PrinterJob printerJob = PrinterJob.getPrinterJob();
		printerJob.setPrintable(this);
		
		printerJob.printDialog();
		printerJob.pageDialog(new PageFormat());
		try 
		{
			printerJob.print();
		}
		catch (PrinterException pe) 
		{
		}
	}

	public int print(Graphics g, PageFormat pf, int pageNr)
	{
		if (pageNr == 1 ) return NO_SUCH_PAGE;
		g.setColor(Color.black);
		
		g.setFont(new Font("Times", Font.PLAIN, 12));
		g.drawString(this.name+"\n", 100, 120);
		
		g.drawString("\n"+this.desc, 100, 220);
		return PAGE_EXISTS;
	}

	
}


Vielen Dank schonmal im Voraus...


Gruß Popon
 
Mein Problem ist, das ich es nicht schaffe, die drei Komponenten im rightPane auszudrucken...

Der Drucken-Dialog öffnet sich und ich kann mir die Drucker aussuchen, aber ab da geht es nicht weiter...
Ich schaffe es nicht zu drucken und weiß auch nicht wo ich hänge...
 
Nun habe ich es selber geschafft zu lösen...

Jetzt habe ich aber ein anderes Problem...

Ich habe drei Komponenten...

Einen JLabel mit dem Namen..

Ein Image mit dem Bild...

Und eine JTextArea mit der Beschreibung,....
Die TextArea die ich übergebe, macht keine Zeilenumbrüche...
Im Programm schon, da funktioniert es einwandfrei auch mit den Zeilenumbrüchen...

Wenn ich drucke oder auch nur eine PDF erstelle im Druckendialog schreibt er alles in eine Zeile...


Unten mein Code für die PrintKlasse...
Das Image habe ich mal auskommentiert...

Java:
package Projekt;

import java.awt.*;
import java.awt.print.*;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTextArea;

public class Print implements Printable
{
	private String name ="";
//	private Image image;
	private String desc = "";
	
	Print()
	{
		
	}
	
	public void print(JLabel cocktailName, ImageIcon cocktailImage,
			JTextArea textArea)
	{
		this.name = cocktailName.getText();
		
//		this.image = cocktailImage.getImage();
		
		this.desc = textArea.getText();
		PrinterJob printerJob = PrinterJob.getPrinterJob();
		printerJob.setPrintable(this);
		
		printerJob.printDialog();
		printerJob.pageDialog(new PageFormat());
		try 
		{
			printerJob.print();
		}
		catch (PrinterException pe) 
		{
		}
	}

	public int print(Graphics g, PageFormat pf, int pageNr)
	{
		if (pageNr == 1 ) return NO_SUCH_PAGE;
		g.setColor(Color.black);
		
		g.setFont(new Font("Times", Font.PLAIN, 12));
		g.drawString(this.name+"\n", 100, 120);
		
		g.drawString("\n"+this.desc, 100, 220);
		return PAGE_EXISTS;
	}	
}
 

Zurück
Oben