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 134 135 136 137 138
| public class ParseurFichier2 implements Printable
{
public JTable table;
public ParseurFichier2(JDesktopPane framee)
{
this.framee = framee;
}
public ParseurFichier2(String pathName, JDesktopPane framee)
{
this.framee = framee;
repertoire = new File(pathName); //identifie l'adresse du fichier à analyser
}
public void constrTableaux(ArrayList liste1, ArrayList liste2)
{
JInternalFrame fr = new JInternalFrame();// création de la sous fenetre qui contiendra l'afichage du tableau.
framee.add(fr);
framee.repaint();
fr.setIconifiable(true);
fr.setSize(700, 500);// dimension
fr.setResizable(true);// nom redimensionnable
fr.setClosable(true);
WindowListener lo = new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
};
Vector lignes = new Vector(); // initialisation du vecteur contenant toutes les lignes du tableau que l'on veu crée
/*pour tous les éléments de la liste liste2*/
for(int i = 0 ; i < liste2.size(); i++)
{
Elements elem = (Elements)liste2.get(i);// on recupere le ième element
Vector vec = new Vector();// on initialise un vector
vec.setSize(liste1.size());// on donne pour taille à ce vector la taille du vector liste1
vec.add(0,elem.nom);//ajoute le nom de l'élément en premiere place
vec = remplirLigne(vec, elem, liste1);// on appelle la fonction remplirLigne pour remplir les cases de la ligne construite.
lignes.add(vec);// on ajoute ce vector à l'ensemble des lignes.
}
Vector colonne = new Vector(); // initialisation du vector contenant les colonnes.
/*pour tous elements de la liste liste1*/
for(int i = 0 ; i < liste1.size() ; i++)
{
Elements elem = (Elements)liste1.get(i);// on recupere le ième element de la liste liste1
colonne.add(elem.nom); // on ajoute sont nom dans le vector colonne.
}
colonne.add(0,null);// on laisse la premiere case du vector null.
table = new JTable(lignes,colonne);// initialisation de la JTable en fonction des vector ligne et colonne.
centrerTable(table);// on centre tous les string contenu dans les cellules du Jtable.
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);// on empeche la redimension des cellules
JScrollPane scroll = new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,// on crée un scroll.
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
fr.getContentPane().add(scroll);
fr.setVisible(true);
}
public void imprimer(JInternalFrame frame,JTable table)
{
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(ParseurFichier2.this);
pj.printDialog();
try
{
pj.print();
}
catch (Exception PrintException)
{
}
}
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)table.getColumnModel().getTotalColumnWidth();
double scale = 1;
if (tableWidth >= pageWidth)
{
scale = pageWidth / tableWidth;
}
double headerHeightOnPage = table.getTableHeader().getHeight()*scale;
double tableWidthOnPage = tableWidth * scale;
double oneRowHeight = (table.getRowHeight() + table.getRowMargin())*scale;
int numRowsOnAPage = (int)((pageHeight-headerHeightOnPage) / oneRowHeight);
double pageHeightForTable = oneRowHeight * numRowsOnAPage;
int totalNumPages = (int)Math.ceil(((double)table.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 = table.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);
table.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);
table.getTableHeader().paint(g2);
return Printable.PAGE_EXISTS;
} |