bonjour je n'arive pas a gérer une impression d'une JTable si quelqu'un peut m'aider voila 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
 
package inter;
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;
 
import inter.ShipTableAlim.ShipTableAlimModel;
 
public class ImpressionTable extends JPanel implements Printable {
/**
         * 
         */
	private static final long serialVersionUID = 1L;
JTable tableView;
public ImpressionTable() 
{
	this.setLayout(new BorderLayout());
 
 
 
 
 
 
	TableModel model = new ShipTableAlimModel();
	JTable table = new JTable(model);
 
	((ShipTableAlimModel) model).setDataAlim();
 
	table.setPreferredScrollableViewportSize(new Dimension(780, 400)); 
	JScrollPane scrollPane = new JScrollPane(tableView);
	scrollPane.setPreferredSize(new Dimension(550, 80));
	this.add(BorderLayout.CENTER, scrollPane); 
 
	JButton printButton = new JButton();
	printButton.setText("Imprimez moi !");
	this.add(BorderLayout.SOUTH, printButton);
	PrinterJob pj = PrinterJob.getPrinterJob(); 
	pj.setPrintable(ImpressionTable.this); 
	pj.printDialog(); 
	try 
	{
	pj.print(); 
	} 
	catch (Exception PrintException) 
	{ 
		System.out.println("ca marche pas");
	} 
	}
 
 
 
public int print(Graphics g, PageFormat pageFormat, int pageIndex)throws PrinterException 
{
Graphics2D g2 = (Graphics2D)g;
g2.setColor(Color.black);
int fontHeight = g2.getFontMetrics().getHeight();
int fontDescent = g2.getFontMetrics().getDescent();
 
// laisser de l'espace pour le numero de page
double pageHeight = pageFormat.getImageableHeight() - fontHeight; 
double pageWidth = pageFormat.getImageableWidth();
double tableWidth = (double)tableView.getColumnModel().getTotalColumnWidth();
double scale = 1;
if (tableWidth >= pageWidth) 
{ 
scale = pageWidth / tableWidth;
}
double headerHeightOnPage = tableView.getTableHeader().getHeight()*scale;
double tableWidthOnPage = tableWidth * scale;
double oneRowHeight = (tableView.getRowHeight() + tableView.getRowMargin())*scale;
int numRowsOnAPage = (int)((pageHeight-headerHeightOnPage) / oneRowHeight);
double pageHeightForTable = oneRowHeight * numRowsOnAPage;
int totalNumPages = (int)Math.ceil(((double)tableView.getRowCount()) / numRowsOnAPage);
if (pageIndex >= totalNumPages) 
return NO_SUCH_PAGE;
 
g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
// en bas au centre
g2.drawString("Page: " + (pageIndex +1),(int)pageWidth/2 - 35, (int)(pageHeight + fontHeight - fontDescent));
g2.translate(0f, headerHeightOnPage);
g2.translate(0f, -pageIndex*pageHeightForTable);
// si cette partie de la page est plus petite
// que la taille disponible, alors découper les contours appropriés
if (pageIndex + 1 == totalNumPages) 
{ 
int lastRowPrinted = numRowsOnAPage * pageIndex; 
int numRowsLeft = tableView.getRowCount() - lastRowPrinted; 
g2.setClip(0, (int)(pageHeightForTable * pageIndex),(int)Math.ceil(tableWidthOnPage),(int)Math.ceil(oneRowHeight * numRowsLeft));
}
// sinon découper la zone disponible toute entière
else 
{
g2.setClip(0, (int)(pageHeightForTable * pageIndex),(int)Math.ceil(tableWidthOnPage),(int)Math.ceil(pageHeightForTable));
}
g2.scale(scale, scale);
tableView.paint(g2);
// dessiner les entêtes en haut
g2.scale(1/scale, 1/scale);
g2.translate(0f, pageIndex*pageHeightForTable);
g2.translate(0f, -headerHeightOnPage);
g2.setClip(0, 0,(int)Math.ceil(tableWidthOnPage),(int)Math.ceil(headerHeightOnPage));
g2.scale(scale, scale);
tableView.getTableHeader().paint(g2);
return Printable.PAGE_EXISTS;
}
 
public static void main(String[] argv)
{
 
	ImpressionTable ps = new ImpressionTable();
 
 
 
}
}
le problème c'est que tout à l'air de bien fonctionner la fenetre d'impression apparait mais j'ai toujours le message que j'ai mi dans la clause catch donc je ne sais plus quoi faire.

Je vous remercie d'avance de votre réponse