asetti
Messages postés61Date d'inscriptionjeudi 22 juillet 2004StatutMembreDernière intervention15 mai 2010
-
5 août 2004 à 12:42
libeur
Messages postés36Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention24 décembre 2004
-
10 août 2004 à 11:41
slt,
je viens de terminer mon programme et le gars qui l'utilise me demande de rajouter un bouton pour imprimer une jTable de l'une des fen^tre.
le problème est que le petit stagiaire que je suis n'a jamais appris à imprimer.
alors si quelqu'un peut me dire comment rendre imprimable une jTable ce serai sympa (je pense qu'il faut la déclaré imprimable quelque part comme on rend sérialisable pour sérialiser)
je pense aussi (d'après les infos que j'ai trouvé ou plutôt que l'on m'a donné sur ce site) qu'il faut utilisé le code suivant pour lancerr l'impression mais je sais pas si c'est bon :
asetti
Messages postés61Date d'inscriptionjeudi 22 juillet 2004StatutMembreDernière intervention15 mai 2010 5 août 2004 à 14:29
Je viens d'arriver à imprimer une partie mais elle il m'en manque car je n'arrive pas a mettre en page
ça fait depuis ce matin 10h que je cherche à imprimer alors je suis déjà content que ça imprime une partie
Ce que je ne comprende pas c'est pourquoi on imprime les composant.
Comment faire pour imprimer juste la table MAIS en lui donnant un titre.
Je sais que je parrait chiant avec mes questions mais j'en ai plein le (|) de chercher sur le net
Merci
asetti
Messages postés61Date d'inscriptionjeudi 22 juillet 2004StatutMembreDernière intervention15 mai 2010 6 août 2004 à 09:50
Oui mais ma table contient 150 lignes.
Si j'imprime une autre panel je risque de n'imprime que la partie de ma table qui SERAIT visible si Visible était à 1. (enfin je crois)
libeur
Messages postés36Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention24 décembre 20042 10 août 2004 à 11:41
Un boutde l'appli de mon stage. Ca imprime la JTable, en numérotant les pages, avec le nombre total de page, avec un titre, ça fait juste pas le café.
La partie de l'export sous excel, je l'envoie pas, c'est pas un vrai fichier excel, mais un txt avec les séparateurs qui vont bien.
Le ContenuGenerique est une implémentation d'AbstractTableModel.
SourceDonneesStockInfo c'est ma base de données.
/*
* Cette fenetre permet d'afficher le résultat d'une requete quelconque, de manière
* à pouvoir retourner toutes les interrogation SQL demandée par l'utilisateur
*/
public FenetreRequeteGenerique(SourceDonneesStockInfo source,String titre, String requete)
{
super(titre);
nomRequete = new String(titre);
setSize(500,200);
setResizable(true);
Container ppal = getContentPane();
ppal.setLayout(new BorderLayout());
dataSource = source;
resultat = dataSource.requeteSelectParametre(requete, "Erreur dans la requete");
table = new JTable(resultat);
int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER;
ascenceur = new JScrollPane(table, v,h);
fermer = new JButton("Fermer");
fermer.addActionListener(this);
imprimer = new JButton("Imprimer");
imprimer.addActionListener(this);
exporter = new JButton("Exporter");
exporter.addActionListener(this);
Container cBoutons = new Container();
cBoutons.setLayout(new FlowLayout());
cBoutons.add(imprimer);
cBoutons.add(exporter);
cBoutons.add(fermer);
// fonction permettant d'impirmer le réseultat de la requete sur papier.
public int print(Graphics g, PageFormat pageFormat, int pageIndex)
throws PrinterException {
Graphics2D g2 = (Graphics2D)g;
Font defaultFont = g2.getFont();
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;
// en bas au centre
g2.drawString("Page: " + (pageIndex +1)+"/"+totalNumPages,
(int)pageWidth/2 - 35, (int)(pageHeight + fontHeight - fontDescent)-20);
// 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,-22,
(int)Math.ceil(tableWidthOnPage),
(int)Math.ceil(headerHeightOnPage)+22);
g2.scale(scale, scale);
table.getTableHeader().paint(g2);