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 :

imprimer une JTable


Sujet :

Composants Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut imprimer une JTable
    Bonjour a tous,

    J'essaie d'imprimer une JTable qui ne contient que des objets de type String.
    Le problème, c'est que quand la feuille sort de l'imprimante, seul les bords de la JTable sont imprimés !

    Voici le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
         try{
    	  boolean status=table.print(JTable.PrintMode.FIT_WIDTH,null,null);
    	  if (status){
    		System.out.println("Impression terminée");
    	  }
    	  else{
    		System.out.println("Impression annulée");
    	  }
         }
         catch (PrinterException p){
    			System.out.println("Erreur d'impression");
         }
    Je n'ai malheureusement rien trouvé qui me convienne dans les autres discussions, donc si quelqu'un sait de quoi il s'agit, ou comment il faut faire, ce serait génial ! Merci d'avance !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Points : 69
    Points
    69
    Par défaut
    essai ce lien J'ai pas tout lus mais sa semble être ce que tu cherches.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ben, en fait c'est pas exactement ce que je cherche : cette solution est plutot longue. Je voudrais vraiment utiliser la methode de la classe JTable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print( JTable.PrintMode mode, MessageFormat head, MessageFormat foot );
    Cette methode a l'air beaucoup plus simple, mais quand je l'utilise, seuls les bords de la table sont imprimés. A mon avis, il y a quelque chose qui manque dans mon code, mais je n'arrive pas a trouver quoi. Donc si quelqu'un a déja utiliser cette methode avec succès, je lui en serais reconnaissant de m'expliquer comment ca marche ! Merci

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Points : 288
    Points
    288
    Par défaut
    salut c'est peut etre bete ce que je vais dire et peut etre pas necessaire car par défaut le composant a un setVisible(true), mais ta jTable est elle visible ? car je crois qu'il faut qu'elle le soit pour être imprimée ...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Points : 69
    Points
    69
    Par défaut
    Si tu veux imprimer ta JTable je crois que tu es obligé de redefinir la methode print...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Points : 288
    Points
    288
    Par défaut
    non je ne crois pas... surtout qu'avec java 1.5, ils ont rajouté des méthodes pour l'impression des jtable, je ne les ai jamais utilisé.
    moi quand j'imprimais une table je faisait comme ca :
    la c'est ma classe d'impression de table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public inr print(Graphics g, PageFormat pf, int pageIndex) {
    ....
    Graphics2D g2 = (Graphics2D) g;
    table.getTableHeader().paint(g2);//Impression de l'entete du tableau
    // Decale l'origine du repere en dessous de l'entete de la JTable
    g2.translate(0,table.getTableHeader().getHeight()+2);
    // Impression de la JTable
    table.setVisibe(true);
    table.print(g2);
    return NO_SUCH_PAGE;
    }
    donc voila rien de compliqué, toi tu n'utilise pas la meme méthode paint, mais ce qui m'éttone c'est comment ta JTable connait le graphics2D ? vu qu'il ne le prend pas en parametre... peut etre que le probleme vient de là ?

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    A mon avis, j'ai pas besoin de connaitre de Graphics, car c'est justement ces méthodes d'impression de java 1.5 dont tu parles, que je veux utiliser !

    Leur avantage, c'est que lorsque la table est plus large que la feuille, il y a un parametre (JTable.PrintMode.FIT_WIDTH) qui permet de redimensionner la table, de maniere a ce qu'elle rentre sur la feuille en entier.

    Mais, je vais tout de meme essayer ta methode, mais il y a des points qui sont pas clairs concernant ta classe pour imprimer:

    • Est-ce qu'une grande table est imprimee en entier sur une feuille

    • Qu'est-ce que tu fais avec le pageFormat et le pageIndex ?

    • Pourquoi tu fais d'abord un paint(g2), puis un print(g2) ? faute de frappe ?

    • A quoi servent precisement ces 2 methodes ?



    PS : desole iutcien, mais ce lien ne convient toujours pas a mes attentes : la methode print() de JTable n'a pas besoin d'etre redefinie ! merci quand meme.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 105
    Points : 41
    Points
    41
    Par défaut
    Dans mon cas, je suis confronté au cas, où à chaque fois que je veux imprimer une table avec plusieurs colonnes, mon code essaie à chaque fois de réduire la table pourqu'elle se case dans la page. Vous ne connaissez pas un moyen qui permet plutot de jouer sur la taille des polices pour imprimer en plus grand.
    Merci.

    Le code que j'utilise est :
    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
     
    public int print(java.awt.Graphics g, PageFormat pageFormat, int pageIndex)
    			throws PrinterException {
    		// Whole bunch of measuring stuff to see what will fit on the given
    		// page number
    		java.awt.Graphics2D g2 = (java.awt.Graphics2D) g;
    		g2.setColor(Color.black);
    		int fontHeight = g2.getFontMetrics().getHeight();
    		int fontDesent = g2.getFontMetrics().getDescent();
     
    		// hauteur disponible pour le tableau ?
     
    		double tailleEmpied = fontHeight;
    		double tailleEntete = fontHeight;
    		double pageHeight = pageFormat.getImageableHeight() - tailleEmpied
    				- tailleEntete;
     
    		// See how much we need to scale the image to fit in the page's width
     
    		double pageWidth = pageFormat.getImageableWidth();
     
    		double tableWidth = (double) this.getColumnModel()
    				.getTotalColumnWidth();
     
    		double scale = 1;
     
    		if (tableWidth >= pageWidth) {
     
    			scale = pageWidth / tableWidth;
     
    		}
     
    		// Calculate how many pages there will be with this table
     
    		double headerHeightOnPage = this.getTableHeader().getHeight() * scale;
    		double tableWidthOnPage = tableWidth * scale;
    		double oneRowHeight = (this.getRowHeight() + this.getRowMargin())
    				* scale;
     
    		int numRowsOnAPage = (int) ((pageHeight - headerHeightOnPage) / oneRowHeight);
     
    		double pageHeightForTable = oneRowHeight * numRowsOnAPage;
    		int totalNumPages = (int) Math.ceil(((double) this.getRowCount())
    				/ numRowsOnAPage);
     
    		if (pageIndex >= totalNumPages) {
     
    			return NO_SUCH_PAGE;
     
    		}
     
    		g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
     
    		int yEmpied = (int) (pageHeight + fontHeight - fontDesent);
     
    		g2.drawString(_nomTable, 0, yEmpied);
     
    		g2.drawString("Page: " + (pageIndex + 1) + "/" + totalNumPages,
    				(int) pageWidth - 80, yEmpied);
     
    		g2.translate(0f, headerHeightOnPage);
    		g2.translate(0f, -pageIndex * pageHeightForTable);
     
    		// This next line treats the last page as a full page
     
    		g2.setClip(0, (int) (pageHeightForTable * pageIndex), (int) Math
    				.ceil(tableWidthOnPage), (int) Math.ceil(pageHeightForTable));
     
    		// Draw the particular page
     
    		g2.scale(scale, scale);
    		this.paint(g2);
    		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);
    		this.getTableHeader().paint(g2); // paint header at top
    		return Printable.PAGE_EXISTS;
     
    	}

Discussions similaires

  1. Imprimer le contenu d'une JTable?
    Par Sancho_54 dans le forum Composants
    Réponses: 5
    Dernier message: 10/12/2019, 21h22
  2. [VB.NET]Comment Imprimer une form
    Par bernard06 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/10/2011, 17h43
  3. focus dans une cellule d'une JTable
    Par coil dans le forum Composants
    Réponses: 5
    Dernier message: 07/07/2010, 17h15
  4. Imprimer une JTable
    Par yashiro dans le forum Composants
    Réponses: 1
    Dernier message: 26/10/2007, 13h44
  5. Comment imprimer une JTable
    Par L4BiN dans le forum Composants
    Réponses: 9
    Dernier message: 03/08/2006, 15h09

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