Bonjour,

Pour que tout soit claire, voilà ce que je souhaite faire.

Juste imprimer une de panel après avoir déterminer par calcdul le nombre de page qu'il me faut, j'ai imprimer l'en-tête ça a marché. maintenant, je souhaite imprimer une série de panel par page.

Pour simplifier les choses, je voulait avoir recour a un panel jamais ajouter a ma fenêtre est qui ne sert que pour la mise en forme de l'impression.

Voiolà mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
public class PrintManager implements Printable {
 
	private JPanel[] tabComponnent;
	private int NbPage;
	private static FrmLieuAAdditionner frmLieu;
 
 
	public int print(Graphics g, PageFormat pageFormat, int index)
			throws PrinterException {
 
		if (index <= NbPage) {
		// Déssiner l'en tête
		Graphics2D g2 = (Graphics2D) g;
		Point p = new Point();
		p.setLocation(pageFormat.getWidth() - pageFormat.getImageableWidth(),
					pageFormat.getHeight() -  pageFormat.getImageableHeight());
		final int initX = p.x;
		JPanel panel = new JPanel();
		BoxLayout box = new BoxLayout(panel, BoxLayout.Y_AXIS);
		panel.setLayout(box);
		String date = "Daate de livraison";
		FontRenderContext frc = g2.getFontRenderContext();
		TextLayout text = new TextLayout(date,g2.getFont(),frc);
		p.translate((int) (text.getBounds().getWidth() + 10.), 0);
		g2.drawString(frmLieu.getToolBarr().getDate().getText(), p.x, p.y);
		String pagXSury = "page "+index +1+" sur "+NbPage;
		text = new TextLayout(pagXSury,g2.getFont(),frc);
		p.setLocation((int) (pageFormat.getImageableWidth() -text.getBounds().getWidth() - 10.), p.y);
		g2.drawString(pagXSury , p.x, p.y);
		p.setLocation(initX,p.y);
		System.out.println("Hauteur de du texte :"+text.getBounds().getHeight());
 
 
		for (int i = 0; i < tabComponnent.length; i++) {
		panel.add(tabComponnent[i]);
		}
		panel.paint(g2);
		return Printable.PAGE_EXISTS;
		}
		else
			return NO_SUCH_PAGE;
		}
 
	public PrintManager (FrmLieuAAdditionner frmLieu, int nbOfPage, JPanel[] panel) {
		this.frmLieu = frmLieu;
		this.NbPage = nbOfPage;
		this.tabComponnent = panel;
		}
prépareprint
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
private void preparePrint() {
		// TODO Auto-generated method stub
 
 
				//new PreviewHandler(this);
				//On crée l'objet PrinterJob qui coordonne tout
				PrinterJob job = PrinterJob.getPrinterJob();
 
				//Format de page par défaut que l'utilisateur peut personnaliser
				 PageFormat format = job.defaultPage();	
				format.setPaper(Centrale.A4);
				Book book = new Book();
				if(job.printDialog(Centrale.attribut)) {
 
 
 
				int NBOfPage = (int) Math.round( (supportLieu.getHeight() + TotalALivrer.getHeight()) / format.getImageableHeight());
				if 	((int) Math.round(supportLieu.getHeight() + TotalALivrer.getHeight()) % format.getImageableHeight() > 0)
					NBOfPage++;
				int nbPannelPerPage = (int) (format.getImageableHeight() / supportLieu.getComponent(0).getHeight() + 1);
 
					JPanel[] tabpanel = new JPanel[nbPannelPerPage];
				int numPanel = 0;
				for (int i = 0; i < NBOfPage; i++) {
					for (int j = 0; j < nbPannelPerPage; j++) {
						tabpanel[j] = (JPanel) supportLieu.getComponent(numPanel);
 
						book.append(new PrintManager(this,NBOfPage,tabpanel),format);
						if (i < nbPannelPerPage)
							tabpanel[j] = TotalALivrer;
						else {
							JPanel[] panel = new JPanel[1];
							panel[0] = TotalALivrer;
							book.append(new PrintManager(this,NBOfPage,panel), format);
							}
					}
				}
 
				//On crée l'objet PageableText, et on l'indique au printerJob
				job.setPageable(book);
				//Demande à l'utilisateur de sélectionner une imprimante, etc...
				//et s'il n'annule pas, on imprime!
 
 
                try{
					job.print();
				}
			    catch(PrinterException pe){
			    	JOptionPane.showMessageDialog(this, "L'impression a été annulée.","impression annulée",JOptionPane.INFORMATION_MESSAGE);
			    	System.err.println("problème d'impression : "+pe.getMessage());
			    	pe.printStackTrace();
 
			    }
]
Ma question :

Ne puis-je vraiment pas utiliser de composant comme les JPannel avec un boxLayout pour faciliter la disposition des composant à imprimer ?

Pour le moment rien ne s'imprime à part l'en-tête. avec la date et page x sur y

Merci pour votre aide.

Salutations