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

AWT/Swing Java Discussion :

Impression de plusieurs composants graphiques contenus dans un JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 110
    Par défaut Impression de plusieurs composants graphiques contenus dans un JPanel
    Bonsoir à tous
    je suis entrain d'améliorer mon application de gestion pour une librairie et je suis entrain de développer la partie d'impression
    je veux imprimer un jPanel qui lui même contenu dans une jFrame, contient des jLabel et une jTable
    j'ai reussi après une recherche sur google à imprimer le contenu du jPanel mais le resultat pour la jTable est seulement la partie affichée à l'écran
    voici le 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
     
        private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
          Properties props = new Properties();
     
    	props.setProperty("awt.print.paperSize", "a4");
    	props.setProperty("awt.print.destination", "printer");
     
    	PrintJob demandeDImpression = getToolkit().getPrintJob(this, "Impression", props);
    	if (demandeDImpression != null) {
    	    Graphics gImpr = demandeDImpression.getGraphics();
    	     jPanel5.printAll(gImpr);
    	    gImpr.dispose();
    	    demandeDImpression.end();
     
    	}
        }
    et j'ai trouvée une soution pour la jTable mais elle s'imprime sans les jLabels
    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
     
    private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
     
                        PrinterJob pj = PrinterJob.getPrinterJob();	
                        pj.setPrintable(GererClientsCreditsVentes.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)jTableListeProduits.getColumnModel().getTotalColumnWidth();
                double scale = 1;
                if (tableWidth >= pageWidth) 
                {	
                    scale = pageWidth / tableWidth;
                }
                double headerHeightOnPage = jTableListeProduits.getTableHeader().getHeight()*scale;
                double tableWidthOnPage = tableWidth * scale;
                double oneRowHeight = (jTableListeProduits.getRowHeight() + jTableListeProduits.getRowMargin())*scale;
                int numRowsOnAPage = (int)((pageHeight-headerHeightOnPage) / oneRowHeight);
                double pageHeightForTable = oneRowHeight * numRowsOnAPage;
                int totalNumPages = (int)Math.ceil(((double)jTableListeProduits.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 = jTableListeProduits.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));
                }
     
                jLabelSousTitre43.paint(g2);
                jLabelClientSelectionne1.paint(g2);
                jLabelSousTitre45.paint(g2);
                g2.scale(scale, scale);
                jTableListeProduits.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);
                jTableListeProduits.getTableHeader().paint(g2);
                return Printable.PAGE_EXISTS;
            }
    je veux savoir comment faire pour mélanger ces deux solutions en imprimant tout le contenu du jTable avec les jLabels

    merci beaucoup de me fournir de l'aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Première S
    Inscrit en
    Juillet 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Première S

    Informations forums :
    Inscription : Juillet 2010
    Messages : 266
    Par défaut
    as-tu lu ce tutoriel ?
    http://bruno-richeton.developpez.com...pression-java/

    c'est très complet ...
    Un petit truc, pour l'impression d'une JTable, sun a développé une fonction print ..
    donc ta_table.print(params_optionels);
    je viens juste de le voir alors que je m'apprêtais à tout faire moi-même !

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 110
    Par défaut
    Merci beaucoup Dominique49
    je vais essayer ensuite je posterai la solution

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 110
    Par défaut
    Bonjour
    ma solution est que j'ai utilisé la méthode print mais en ajoutant des translate aprés chaque méthode, c'est une méthode manuelle, c'est ma première idée, elle marche et certainement il y en a des solutions meilleurs

    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
     
      private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
          Properties props = new Properties();
     
    	props.setProperty("awt.print.paperSize", "a4");
    	props.setProperty("awt.print.destination", "printer");
     
    	PrintJob demandeDImpression = getToolkit().getPrintJob(this, "Impression", props);
    	if (demandeDImpression != null) {
    	    Graphics gImpr = demandeDImpression.getGraphics();
                gImpr.translate(20, 0);
    	    jLabelSousTitre37.print(gImpr);
                gImpr.translate(jLabelSousTitre37.getWidth() + 20, 0);
                jLabelClientSelectionne.print(gImpr);
               gImpr.translate(-jLabelSousTitre37.getWidth(), jLabelClientSelectionne.getHeight() * 2);
                jLabelSousTitre36.print(gImpr);
                gImpr.translate(0, jLabelSousTitre36.getHeight() * 2);
                jTableCredit.getTableHeader().print(gImpr);
                gImpr.translate(0, jTableCredit.getTableHeader().getHeight());
                jTableCredit.print(gImpr);
                gImpr.translate(50, jTableCredit.getHeight() + jTableCredit.getTableHeader().getHeight() + 10);
                jLabelSousTitre41.print(gImpr);
                gImpr.translate(jLabelSousTitre41.getWidth() + 10, 0);
                jLabelTotalSolde.print(gImpr);
    	    gImpr.dispose();
    	    demandeDImpression.end();
     
    	}
        }

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/08/2017, 16h55
  2. plusieurs composants graphiques ayant meme comportement
    Par yassine.s dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 31/05/2011, 16h26
  3. Réponses: 1
    Dernier message: 11/02/2011, 14h14
  4. Réponses: 9
    Dernier message: 30/08/2008, 13h33
  5. [Print] Impression de plusieurs composants graphiques....
    Par lilou77 dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 02/01/2006, 10h01

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