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 :

Comment imprimer une JTable


Sujet :

Composants Java

  1. #1
    Membre actif Avatar de L4BiN
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2006
    Messages : 432
    Points : 209
    Points
    209
    Par défaut Comment imprimer une JTable
    Voila j'ai fais plein de recherche mais toutes les solutions que j'ai vu sont fort compliqué et je ne les ai pas comprise.

    Est ce que quelqun sais comment faire pour imprimer une JTable?
    Et aussi est ce que quelqun sais comment convertir une JTable en Excel (si c'est possible sans l'api jxl),
    ou sinon est ce que quelqun sais comment transformer une JTable (ou du moin la frame qui le contient ) en PDF???

    merci d'avance...

  2. #2
    Membre actif Avatar de L4BiN
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2006
    Messages : 432
    Points : 209
    Points
    209
    Par défaut
    puor imprimer une JTable il faut utiliser print();

    mais print() prend en argument Graphics g.

    g représente koi? on doit convertir la JTable en Graphics? comment est ce que l'on fait cela si oui??

  3. #3
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    Est ce que quelqun sais comment faire pour imprimer une JTable?
    perso, impression direct, je sais pas faire

    Et aussi est ce que quelqun sais comment convertir une JTable en Excel (si c'est possible sans l'api jxl)
    tu as poi qui semble assez bien fonctionner

    ou sinon est ce que quelqun sais comment transformer une JTable (ou du moin la frame qui le contient ) en PDF???
    iText, lgpl je crois, assez simple à utiliser ( ca sera pas vraiment de la transformation mais cet api est plutot sympa )

  4. #4
    Membre actif Avatar de L4BiN
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2006
    Messages : 432
    Points : 209
    Points
    209
    Par défaut
    perso, impression direct, je sais pas faire
    ca tombe bien moi non plus!!!


    tu as poi qui semble assez bien fonctionner
    Rien du tout sinon je l'utiliserai


    iText, gpl je crois, assez simple à utiliser
    et tu peux donner un peut plus de détail??? merci!!

  5. #5
    Membre actif Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Points : 291
    Points
    291
    Par défaut
    mais print() prend en argument Graphics g.
    g représente koi? on doit convertir la JTable en Graphics? comment est ce que l'on fait cela si oui??
    g ( de type Grahics comme tu as pu le remarquer) te permet de dessiner ta JTable. c'est tout simplement ton objet graphique qui peut etre represente comme une feuille blanche.
    Normalement pour obtenir le Graphics d'un composant (JTable matable par exemple) il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Graphics g = matable.getGraphics();

  6. #6
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    et tu peux donner un peut plus de détail??? merci!!
    http://www.lowagie.com/iText/

  7. #7
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    Salut,

    Il me semble qu'avec la JVM 1.5 tu peux faire table.print();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    prinBouton.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            try
            {
               table.print();
            }
            catch(java.awt.print.PrinterException e){e.printStrackTrace();}
        }
    });
    Si tu ne l'a pas il y a un code sur le forum très bien. Je n'ai pas conservé l'adresse mais le code s'intitule ImpressionTable.

    Bonne chance

  8. #8
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    Citation:
    tu as poi qui semble assez bien fonctionner

    Rien du tout sinon je l'utiliserai
    je voulais dire :

    tu as POI qui semble assez bien fonctionner !!!!!

    jakarta.apache.org/poi/

  9. #9
    Membre actif Avatar de L4BiN
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2006
    Messages : 432
    Points : 209
    Points
    209
    Par défaut
    J'ai utilisé le code de cette adresse http://www.developpez.net/forums/arc...p/t-10863.html

    le programme appelle bien l'imprimente, mais n'imprime rien a par le numero de page!

    quelqun sait comment corriger cela?

  10. #10
    Membre actif Avatar de L4BiN
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2006
    Messages : 432
    Points : 209
    Points
    209
    Par défaut
    mon code (sauf pour la methode print() que j'ai pompé) enfin pas tous y en a bcp trop mais voivi ce qui concerne mon bleme :

    pour moi l'erreur vient de l'instruction que j'ai mise en gras.
    En effet ma class (a la différence de l'exemple que j'ai pompé) n'étend pas JPanel. De plus je veux imprimer une JInternalFrame.
    Donc je doit surement changer l'instruction en gras mais je ne sais pas du tout quoi mettre a la place

    merci


    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
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    public class ParseurFichier2 implements Printable
    {
    	public JTable table;
    public ParseurFichier2(JDesktopPane framee)
    	{
    		this.framee = framee;
    	}
    	public ParseurFichier2(String pathName, JDesktopPane framee)
    	{
    		this.framee = framee;
    		repertoire = new File(pathName); //identifie l'adresse du fichier à analyser
    	}
    
    public void constrTableaux(ArrayList liste1, ArrayList liste2)
    	{
    		JInternalFrame fr = new JInternalFrame();// création de la sous fenetre qui contiendra l'afichage du tableau.
    		framee.add(fr);
    		framee.repaint();
    		fr.setIconifiable(true);
    		fr.setSize(700, 500);// dimension
    		fr.setResizable(true);// nom redimensionnable
    		fr.setClosable(true);
    		WindowListener lo = new WindowAdapter() {
    	         public void windowClosing(WindowEvent e){
    	            System.exit(0);
    	         }
    		};
    		
    		
    		
    		Vector lignes = new Vector(); // initialisation du vecteur contenant toutes les lignes du tableau que l'on veu crée
    		/*pour tous les éléments de la liste liste2*/
    		for(int i = 0 ; i < liste2.size(); i++)
    		{
    			Elements elem = (Elements)liste2.get(i);// on recupere le ième element
    			Vector vec = new Vector();// on initialise un vector
    			vec.setSize(liste1.size());// on donne pour taille à ce vector la taille du vector liste1
    			vec.add(0,elem.nom);//ajoute le nom de l'élément en premiere place
    			vec = remplirLigne(vec, elem, liste1);// on appelle la fonction remplirLigne pour remplir les cases de la ligne construite.
    			lignes.add(vec);// on ajoute ce vector à l'ensemble des lignes.
    			
    		}
    		
    		Vector colonne = new Vector(); // initialisation du vector contenant les colonnes.
    		/*pour tous elements de la liste liste1*/
    		for(int i = 0 ; i < liste1.size() ; i++)
    		{
    			Elements elem = (Elements)liste1.get(i);// on recupere le ième element de la liste liste1
    			colonne.add(elem.nom); // on ajoute sont nom dans le vector colonne.
    		}
    		colonne.add(0,null);// on laisse la premiere case du vector null.
    		
    		
    		
    		table = new JTable(lignes,colonne);// initialisation de la JTable en fonction des vector ligne et colonne.
    		centrerTable(table);// on centre tous les string contenu dans les cellules du Jtable.
    		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);// on empeche la redimension des cellules
    		JScrollPane scroll = new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,// on crée un scroll.
    			    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    
    		fr.getContentPane().add(scroll);
    		fr.setVisible(true);
    	}
    
    public void imprimer(JInternalFrame frame,JTable table)
    	{
    		
    		PrinterJob pj = PrinterJob.getPrinterJob(); 
    		pj.setPrintable(ParseurFichier2.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)table.getColumnModel().getTotalColumnWidth();
    	double scale = 1;
    	if (tableWidth >= pageWidth) 
    	{ 
    	scale = pageWidth / tableWidth;
    	}
    	double headerHeightOnPage = table.getTableHeader().getHeight()*scale;
    	double tableWidthOnPage = tableWidth * scale;
    	double oneRowHeight = (table.getRowHeight() + table.getRowMargin())*scale;
    	int numRowsOnAPage = (int)((pageHeight-headerHeightOnPage) / oneRowHeight);
    	double pageHeightForTable = oneRowHeight * numRowsOnAPage;
    	int totalNumPages = (int)Math.ceil(((double)table.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 = table.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);
    	table.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);
    	table.getTableHeader().paint(g2);
    	return Printable.PAGE_EXISTS;
    	}

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

Discussions similaires

  1. [VB.NET]Comment Imprimer une form
    Par bernard06 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/10/2011, 17h43
  2. Comment imprimer une BDD comme le fait Access
    Par Hamza dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/05/2006, 13h15
  3. [Débutante] Comment fonctionne une JTable?
    Par delph1983 dans le forum Composants
    Réponses: 38
    Dernier message: 14/03/2006, 16h49
  4. Comment imprimer une zone de liste?
    Par Dnx dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/01/2006, 13h24
  5. Comment rafraichir une JTable
    Par critok dans le forum Composants
    Réponses: 3
    Dernier message: 06/12/2005, 13h48

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