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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

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

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

    Nom : Probleme impression JTable.jpg
Affichages : 191
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 ?

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

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

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

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    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 Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    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 : 166
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...

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

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    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...

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

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    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;
    	}
    }

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