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 icones en JTable


Sujet :

Composants Java

  1. #1
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut Impression icones en JTable
    Bonjour,

    je suis confronté à un problème d'impression de JTable.

    Nom : Probleme impression JTable.jpg
Affichages : 162
Taille : 111,9 Ko

    Dans une des colonnes sont affichées des icônes.
    Celles-ci apparaissent correctement à l'écran.
    Lorsque j'imprime la JTable, les icônes:
    - n'apparaissent pas correctement, voir pas du tout sur mon imprimante (impression physique)
    - ont la même maladie lors de l'impression vers un fichier type XPS
    - apparaissent correctement lors de l'impression vers un fichier de type PDF

    En déboguant le programme, je constate que les lignes sont correctement renseignées par la fonction surchargée getValue().

    Je ne sais plus quoi faire.
    Quelqu'un a-t-il déjà été confronté à ce problème ?
    @ bientôt...

    Salut & @+ sur 3W!

  2. #2
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Petite précision supplémentaire... cela fonctionne parfaitement sur MAC.
    Le dysfonctionnement est constaté sur WIN10, avec JAVA 64bits à jour.
    @ bientôt...

    Salut & @+ sur 3W!

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    L'icone est ajoutée comment? Quel layout? Si tu met une icone plus petite, ça passe? Aussi, elle est chargée comment? Si elle se se charge en asynchrone, il est possible qu'elle ne soit pas encore en mémoire lors du passage sur la ligne. Et sur un spool imprimante, contrairement à un écran, on ne peux pas repasser dessiner quand le chargement est fini. Ca expliquerait les données random dans la zone de l'icone.
    Est-ce que tu as une redéfinition des méthodes print sur des composants?
    L'impression se fait comment?

  4. #4
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour tchize_,

    l'icône est tout simplement affichée à travers un DefaultTableCellRenderer, dont voici le code de la fonction surchargée:
    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
    @Override
    public Component getTableCellRendererComponent( JTable jTbl, Object oVal, boolean yaselection, boolean yafocus, int l, int c ) {
    	super.getTableCellRendererComponent( jTbl, oVal, yaselection, yafocus, l, c );
     
    	setIcon( null );
     
    	if( l > 0 ) // Ligne des adhérents
    	{
    		if( oVal.equals( (byte)1 ))
    			setIcon( icnAttentionO );
    		else if( oVal.equals( (byte)2 ))
    			setIcon( icnAttentionR );
     
     
    //					setText(""); // FIXME
            }
            else // Ligne des statistiques
    	{
    		setFont(( c != 1 ? C_Gemo.policeReduite : C_Gemo.policeGrasse ));
    		setForeground(( btnValide.isEnabled() ? Color.LIGHT_GRAY : Color.BLACK ));
    		setBackground( Color.CYAN );
    	}
     
    	return this;
    }
    Nom : Probleme impression JTable 2.jpg
Affichages : 140
Taille : 42,7 Ko

    Pour vérifier que ce n'est pas la taille de l'icône qui gêne, j'ai augmenté la hauteur de ligne.
    On voit le résultat dans l'image ci-dessus.
    #1 le 1er volet représente une impression vers un fichier PDF.
    #2 le 2ème et 3ème volet représentent une impression vers un fichier XPS qui est exactement la même chose que sur l'imprimante.
    Dans le 3ème volet, j'ai laissé le texte de la cellule s'afficher; on voit que le texte s'y inscrit correctement. C'est donc bien un problème de gestion d'ImageIcon.

    Je crains que le problème ne provienne de Win10, car il me semble que sur Win7, ce type d'impression ne me posait pas de problème.
    Je continue d'enquêter...
    @ bientôt...

    Salut & @+ sur 3W!

  5. #5
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    j'ai peut être trouvé un début de solution: cela consiste à exécuter l'instruction JTable.print dans un autre Thread.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try
                {
                    tblPointageImprimable.print( JTable.PrintMode.FIT_WIDTH, sEnTete, sPiedPage, true, attributImpression, true, null );
                }
                catch( HeadlessException | PrinterException tblE )
                {
                    /.../
                }
            }
        });
    Un nouveau problème apparaît maintenant, les paramètres que je sois passer à l'instruction print doivent être de type final.
    De plus, j'ai besoin d'ajouter quelques lignes vides avant l'impression, puis je dois les retirer après l'impression.
    Or si l'impression se fait dans un autre Thread, cela va être coton de détecter à quel moment je peux retirer les lignes supplémentaires.
    D'autant que dans la JavaDoc, il est spécifié qu'il ne faut pas modifier les données d'une JTable pensant le processus d'impression, car le résultat est alors imprévisible...
    @ bientôt...

    Salut & @+ sur 3W!

  6. #6
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    je reviens sur ce sujet toujours non-résolu.
    J'ai trouvé dans un tutoriel Oracle, cet exemple:
    https://docs.oracle.com/javase/tutor...rintDemo1.java
    Cet exemple fonctionne correctement à l'impression.

    Dans cet exemple est implémenté une classe GradesModel qui implémente TableModel.

    En ce qui me concerne, la JTable que je cherche à imprimer, reçoit pour gérer ses données, une classe étendant AbstractTableModel.
    Est-ce que le défaut d'impression serait dû à cette différence ?

    J'ai simplifié au maximum le Renderer de la colonne des icônes, et cela ne fonctionne toujours pas mieux.
    Je ne vois plus quoi essayer d'autre
    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
    private class CRenduIcones extends DefaultTableCellRenderer
    {
    	private static final long serialVersionUID = 1L;
     
    	public CRenduIcones( int alignement ) {
    	    super();
    	    setHorizontalAlignment( alignement );
    	    setVerticalAlignment( SwingConstants.TOP );
    	}
     
    	@Override
    	public Component getTableCellRendererComponent( JTable jTbl, Object oVal, boolean yaselection, boolean yafocus, int l, int c ) {
    		super.getTableCellRendererComponent( jTbl, oVal, yaselection, yafocus, l, c );
     
    		setIcon( null );
    		setText( "" );
     
    		if(( l & 1 ) == 1 )
    			setIcon( icnAttentionR );
    		else
    			setIcon( icnAttentionO );
     
    		return this;
    	}
    }
    @ bientôt...

    Salut & @+ sur 3W!

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu n'as toujours pas montré comment tes icones sont chargées. Par curiosité, tu peux montrer le code qui crée icnAttentionR et icnAttentionR et comment / quand ce code est appelé?

  8. #8
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour tchize_

    voici une partie du 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
    public class C_Pointage extends JPanel implements ActionListener, KeyListener
    {
      /.../
      private final ImageIcon icnAttentionO, icnAttentionR;
      /.../
     
     
      // Constructeur:
      public C_Pointage( C_GestionDonnees pGestionDonnees ) {
        super();
     
        /.../
        private final C_DataPointage cDataPointage; // Classe de gestion des données de tblPointageImprimable;
        private final C_JTableImprimable tblPointageImprimable; // JTable augmentée, pour gérer l'impression
     
        /.../
     
        // Chargement des ressources graphiques:
        icnAttentionO = new ImageIcon( getClass().getResource( "/ICN_AttentionO.png" ));
        icnAttentionR = new ImageIcon( getClass().getResource( "/ICN_AttentionR.png" ));
     
        /.../
     
        // CREATION DU TABLEAU DE POINTAGE AU CENTRE:
        cDataPointage = new C_DataPointage();
        tblPointageImprimable = new C_JTableImprimable( cDataPointage );
        tblPointageImprimable.addKeyListener( this );
        tblPointageImprimable.addMouseListener( cClicListe );
        /.../
        this.add( new JScrollPane( tblPointageImprimable, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ));
     
     
        // Réglages des colonnes de C_JTableImprimable
        TableColumn colonneTable = tblPointageImprimable.getColumnModel().getColumn( 0 ); // N° de ligne
        /.../
     
        colonneTable = tblPointageImprimable.getColumnModel().getColumn( 4 ); // A payer
        colonneTable.setMinWidth( 37 );
        colonneTable.setMaxWidth( 37 );
        colonneTable.setCellRenderer( new CRenduIcones( SwingConstants.RIGHT ));
        colonneTable.setHeaderRenderer( cRenduEntete );
     
        /.../
      }
     
      /.../
     
    }
    La classe du rendu de la colonne des icônes a été simplifiée au maximum suite au problème, afin d'étudier d'où vient l'anomalie.
    Je ne peux pas faire plus simple: quand la ligne est impaire, j'affiche l'icône orange, sinon l'icône rouge.
    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
    private class CRenduIcones extends DefaultTableCellRenderer
    {
      private static final long serialVersionUID = 1L;
     
      public CRenduIcones ( int alignement ) {
        super();
        setHorizontalAlignment( alignement );
        setVerticalAlignment( SwingConstants.TOP );
      }
     
      @Override
      public Component getTableCellRendererComponent( JTable jTbl, Object oVal, boolean yaselection, boolean yafocus, int l, int c ) {
        super.getTableCellRendererComponent( jTbl, oVal, yaselection, yafocus, l, c );
     
        setText( "" );
     
        if(( l & 1 ) == 1 )
          setIcon( icnAttentionR );
        else
          setIcon( icnAttentionO );
     
        return this;
      }
    }
    Enfin la classe de gestion des données est de facture classique:
    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
    private class C_DataPointage extends AbstractTableModel
    {
      private static final long serialVersionUID = 1L;
     
      public C_DataPointage{
        /.../
      }
     
      @Override
      public Class<?> getColumnClass( int colonne ) { /.../ }
     
      @Override
      public int getRowCount() { /.../ }
     
      @Override
      public Object getValueAt( int ligne, int colonne ) { /.../ }
     
      @Override
      public boolean isCellEditable( int ligne, int colonne ) { /.../ }
    }
    Quant à la classe C_JTableImprimable, c'est exactement le code qui est fournit dans le tuto sur ce site, concernant l'impression d'une JTable.

    Encore une fois, je le répète:
    - l'affichage des icônes à l'écran est correct
    - l'impression physique sur une imprimante ou dans un fichier XPS est 'aléatoire'
    - l'impression dans un fichier PDF fonctionne
    - Cela fonctionne parfaitement sur un MAC (je n'ai pas essayé sur Linux)
    @ bientôt...

    Salut & @+ sur 3W!

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Les icnAttentionO, icnAttentionR utilisés à l'impression sont les mêmes instances qui ont déjà servis à dessiner à l'écran, ou tu utilise une nouvelle instance de table / C_pointage lors de l'impression?
    Dans ton renderer, tu pourrais afficher la valeur de icnAttentionO.getImageLoadStatus() à chaque passage?

  10. #10
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour tchize_,

    les icônes servent pour l'affichage à l'écran et l'impression.
    C'est la même instance, car en fait, l'impression de la JTable utilise CRenduIcones pour ses besoins.
    J'ai mis un traceur System.out.println associée aux lignes setIcon().
    L'impression de la table passe exactement par les mêmes lignes du renderer que lorsque la JTable s'affiche à l'écran.
    Le statut des icônes est MediaTracker.COMPLETE à chaque passage.

    Je me demande si je ne devrais pas signaler cela à Oracle.
    On dirait que lors de l'impression "physique" ou vers un fichier XPS, JAVA 'oublie' certaines icônes.
    Si vous regardez les saisies écrans du 1er post, on voit qu'il existe un décalage entre l'affichage écran, et l'impression.

    Pour finir, ce qui m'inquiète le plus, c'est que l'impression vers un fichier PDF fonctionne.
    J'ai tenté de forcer une commande paint() dans le renderer, mais cela n'influence rien...

    Merci pour le soutien...
    @ bientôt...

    Salut & @+ sur 3W!

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je suis à cours d'idées, désolé

  12. #12
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Pas grave, merci beaucoup.
    Si je trouve une solution, je la posterais...
    @ bientôt...

    Salut & @+ sur 3W!

  13. #13
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour, je reviens sur le sujet car j'ai trouvé se situe le problème... le problème est que je ne sais pas comment le résoudre

    Pour imprimer la JTable, j'utilise une classe me permettant d'ajouter des logos et quelques autres fioritures.
    Cette classe est basée sur l'exemple fourni par Oracle: https://docs.oracle.com/javase/tutor...rintDemo3.java

    Voici mon code 'francisé':
    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
    private class C_ImpressionDecoree implements Printable
    {
      private final PageFormat fmtZoneTablo;
      private final Printable prtDelegataire;
      final int l_logo_site, h_logo_site, l_logo_gemo, h_logo_gemo;
     
      //CcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccC
      public C_ImpressionDecoree( Printable prtDelegueTransmis ) {
        prtDelegataire = prtDelegueTransmis;
     
        l_logo_site = imgLogoSite.getWidth() * 72 / 600; // Adaptation 600DPI...
        h_logo_site = imgLogoSite.getHeight() * 72 / 600; // ... en contexte 72DPI
        l_logo_gemo = imgGemoConcept.getWidth() * 72 / 600;
        h_logo_gemo = imgGemoConcept.getHeight() * 72 / 600;
     
        fmtZoneTablo = new PageFormat();
      }
      //CcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccC
     
     
      @Override
      public int print( Graphics gContexte, PageFormat fmtPage, int index_page ) throws PrinterException {
        Graphics2D g2D;
        Paper infoPage;
        int val_retour;
        int x_pos, y_pos, h_texte;
     
        // Détermination de la zone destinée à la table, compte tenu des logos situés en haut de page:
        infoPage = new Paper();
     
        if( fmtPage.getOrientation() == PageFormat.PORTRAIT )
        {
          infoPage.setSize( fmtPage.getWidth(), fmtPage.getHeight());
          infoPage.setImageableArea( fmtPage.getImageableX(), fmtPage.getImageableY() + h_logo_site, fmtPage.getImageableWidth(), fmtPage.getImageableHeight() - h_logo_site );
        }
        else // Inversion des coordonnées
        {
          infoPage.setSize( fmtPage.getHeight(), fmtPage.getWidth());
          infoPage.setImageableArea( fmtPage.getImageableY() + h_logo_site, fmtPage.getImageableX(), fmtPage.getImageableHeight() - h_logo_site, fmtPage.getImageableWidth());
        }
     
        fmtZoneTablo.setPaper( infoPage );
        fmtZoneTablo.setOrientation( fmtPage.getOrientation());
     
        g2D = (Graphics2D)gContexte.create();
        val_retour = prtDelegataire.print( g2D, fmtZoneTablo, index_page ); // !! LE PROBLEME EST ICI !!
    //    val_retour = prtDelegataire.print( g2D, fmtPage, index_page ); // !! LE PROBLEME N'EXISTE PAS ICI !!
     
        if( val_retour == NO_SUCH_PAGE )
        {
          g2D.dispose();
          return val_retour; // Plus rien à imprimer
        }
     
        // Arrivé ici signifie que la table est imprimée, on rajoute la décoration:
        g2D.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
        g2D.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON );
        g2D.setRenderingHint( RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
        g2D.setRenderingHint( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC );
     
        // Logo du club, en haut à gauche:
        x_pos = 1 + (int)fmtPage.getImageableX(); // Tient compte de l'orientation
        y_pos = 1 + (int)fmtPage.getImageableY();
        g2D.drawImage( imgLogoSite, x_pos, y_pos, l_logo_site, h_logo_site, null );
     
     
        // Lignes éventuelles dans l'en-tête
        g2D.setFont( policeNormale );
        h_texte = (int)g2D.getFontMetrics().getStringBounds( "H", g2D ).getHeight(); // Pour connaître la hauteur d'une ligne
     
        if( sLigne1 != null )
          g2D.drawString( sLigne1, x_pos + l_logo_site + 10, y_pos + h_texte );
     
        if( sLigne2 != null )
          g2D.drawString( sLigne2, x_pos + l_logo_site + 10, y_pos + h_texte + h_texte + 1 );
     
        if( sLigne3 != null )
          g2D.drawString( sLigne3,  x_pos + l_logo_site + 10, y_pos + h_texte + h_texte + h_texte + 2 );
     
     
        // Logo GémoConcept, en haut à droite:
        x_pos = 1 + (int)( fmtPage.getImageableX() + fmtPage.getImageableWidth() - l_logo_gemo );
        y_pos = 1 + (int)( fmtPage.getImageableY());
        g2D.drawImage( imgGemoConcept, x_pos, y_pos, l_logo_gemo, h_logo_gemo, null );
     
        // Rectangle de signature
        if( signature )
        {
          g2D.drawRect( x_pos - 160, y_pos, 150, h_logo_site );
          g2D.setFont( policeLabel );
          h_texte = (int)g2D.getFontMetrics().getStringBounds( "H", g2D ).getHeight(); // Pour connaître la hauteur d'une ligne
          g2D.drawString( "Signature:", x_pos - 155, y_pos + h_texte + 1 );
        }
     
        g2D.dispose();
        return PAGE_EXISTS;
      }
    }
    Le problème se situe lorsque l'on calcule une aire visant à réduire l'espace d'impression de la JTable, afin de permettre l'impression de décoration graphique:

    Ici, je transmets simplement le PageFormat transmis à la fonction print:Nom : Probleme impression JTable1.jpg
Affichages : 132
Taille : 89,8 Ko

    Ici, j'utilise un PageFormat redéfini:Nom : Probleme impression JTable2.jpg
Affichages : 111
Taille : 90,8 Ko

    Dans le 1er cas, la JTable est superposée à la décoration, mais les icônes du tableau sont correctement dessinées.
    Dans le second cas, l'espace de la JTable est réduit... les icônes sont altérées.
    Il y a un phénomène notable: si l'on superpose les 2 captures écran, on s'aperçoit que l'icône rouge est exactement au même endroit dans la feuille. On dirait que la JTable dessine ses icônes sans tenir compte de l'espace qui lui est alloué. Bizarre non ?
    @ bientôt...

    Salut & @+ sur 3W!

  14. #14
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    encore une découverte sur le sujet:
    si l'impression est faite en mode 'PORTRAIT', les icônes sont correctement dessinées...
    je n'y comprends plus rien
    @ bientôt...

    Salut & @+ sur 3W!

Discussions similaires

  1. Aperçu avant impression d'une JTable
    Par Polux000 dans le forum Composants
    Réponses: 4
    Dernier message: 03/10/2012, 15h32
  2. Impression JPanel contenant JTable
    Par Airdine dans le forum Composants
    Réponses: 0
    Dernier message: 30/07/2009, 19h30
  3. Impression d'une Jtable
    Par pierlo dans le forum Composants
    Réponses: 4
    Dernier message: 04/05/2009, 17h11
  4. Impression d'une JTable
    Par tsigalko002 dans le forum Composants
    Réponses: 2
    Dernier message: 15/02/2006, 20h29
  5. [Impression] Imprimer un JTable
    Par VincenzoR dans le forum Composants
    Réponses: 4
    Dernier message: 04/05/2004, 18h41

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