IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[Impression] Imprimer un JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Par défaut [Impression] Imprimer un JTable
    Bonjour à tous,

    Je suis en plein projet de fin d' année, et j' ai un probleme pour imprimer un JTable, j' ai bien essayer avec Printable, mais je ne sais pas comment faire exactement, j' ai bien reussit à imprimer du text, mais comment imprimer un JTable issu d' un TableModel ??

  2. #2
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    Salut,

    Pour imprimer t'as pas le choix, il faut que tu construise un graphics, et ce sera lui qui sera imprimé.
    Donc comme t'as du le faire pour ton texte, il faut que tu transformes ta table en un objet graphique
    Tu peux tjs aller voir ce topic sur l'impression ici, il ne parle quasiment que de texte mais il est pas mal développé.
    Bon courage

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Par défaut
    Merci beaucoup, je vais y travailer, je poste ma soluce si je trouve

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Par défaut
    Et bien voilà, ca m' a bien aider de savoir ca (tranformer en Graphics)

    Voici le code qui fonctionne, je place mon JTable dans un panel, avec en SOUTH un boutton pour imprimer le panel courant (donc le JTable).

    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
    import javax.swing.*;
    import javax.swing.table.*;
    import java.awt.print.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.awt.Dimension;
    import java.sql.*;
     
    public class ImpressionTable extends JPanel implements Printable {
    	JTable tableView;
    	public ImpressionTable() 
            {
                this.setLayout(new BorderLayout());
                JLabel labelTitre = new JLabel("<html><font color=ffffff size=3 face=Verdana>- Listings des Professeurs -</font></html>");
                labelTitre.setBounds(295,5,300,20);
                this.add(labelTitre);
                try
                {
                    MyTableModel modelProf = AccesGen.creerTableModel(FenetrePrincipale.connexion,"SELECT * from Professeur order by Nom");   
                    tableView = new JTable(modelProf);  
                    tableView.setPreferredScrollableViewportSize(new Dimension(780, 400));  
                    JScrollPane scrollPane = new JScrollPane(tableView);
                    scrollPane.setPreferredSize(new Dimension(550, 80));
                    this.add(BorderLayout.CENTER, scrollPane);  
                }     
                catch(SQLException err)      
                {      
                }
                JButton printButton = new JButton();
                printButton.setText("Imprimez moi !");
                this.add(BorderLayout.SOUTH, printButton);
                printButton.addActionListener( new ActionListener() 
                {
                    public void actionPerformed(ActionEvent evt) 
                    {
                        PrinterJob pj = PrinterJob.getPrinterJob();	
                        pj.setPrintable(ImpressionTable.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)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;
            }
    }

  5. #5
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    Tout simplement, bien joué.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impression d'une JTable
    Par tsigalko002 dans le forum Composants
    Réponses: 2
    Dernier message: 15/02/2006, 20h29
  2. [Impression]imprimer différents format
    Par sebus dans le forum Général Java
    Réponses: 21
    Dernier message: 26/12/2005, 17h14
  3. [impression] imprimer le contenu d'une url
    Par FFF dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 30/11/2005, 15h07
  4. [Impression] Imprimer avec jbuilder
    Par joker34 dans le forum JBuilder
    Réponses: 3
    Dernier message: 15/11/2005, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo