Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

IMPRESSION D'UN JPANEL (SANS COUPURE DES COMPOSANTS EN BAS DE PAGE)


Information sur la source

Catégorie :Swing Classé sous : impression, jpanel, 2d, swing, printerjob Niveau : Débutant Date de création : 31/05/2005 Date de mise à jour : 10/06/2005 11:03:22 Vu / téléchargé: 15 217 / 3 340

Note :
8,2 / 10 - par 10 personnes
8,20 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (29)
Ajouter un commentaire et/ou une note

Description

Voila, cette semaine j'ai aidé plusieurs personnes a régler des problemes d'impression. C'est pourquoi j'ai réalisé cette petite classe afin de nous simplifier la vie avec les impressions. La classe permet d'imprimer le contenu graphique d'un panel en multi-pages. Plusieurs options sont disponibles.
FitIntoPage => permet de redimentionner automatiquement le contenu du JPanel pour qu'il rentre dans une seul et unique page.
WrapComponent => permet un impression sans couper les composants en bas de page. En effet les methodes d'impression de Java coupe les composants en fin de page. Par exemple un text area faisant la moitié de la page mais commençant en bas de celle ci aura ca premiere moitié en bas de la page et la deuxieme sur la deuxime page. Ma class calcul avant l'impression la repartition optimale des composants afin d'éviter le probleme, ainsi si le composant ne rentre pas il sera automatiquement décalé sur la page suivante. Si un composant est plus grand qu'une page il sera coupé ou reduit selon les options choisi avant l'impression.
J'ai tester cette class avec un JPanel avec un GridBaglayout et pas mal de composant (meme des composants imbriqués) et ca marche pas mal, donc je vous en fait profiter.
En amélioration on peut envisager l'impression en bas de page du numero de page, et surement d'autre chose auquelles je n'est pas pensé :D.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

10 juin 2005 11:03:22 :
Mise a jour contenant des fonctions pour définir les marges et j'ai rajouter une impression du nom et du numero de page.

Commentaires et avis

signaler à un administrateur
Commentaire de bloofi le 31/05/2005 22:13:37

genial ^^
bien pratique, marche aussi avec mes panels et tout mon bousin.
merki bien !

signaler à un administrateur
Commentaire de indiana_jules le 01/06/2005 10:34:44

Ma foi, je trouve cette classe tès sympathique ;)
merci d'en faire profiter

signaler à un administrateur
Commentaire de olivierInfo le 06/06/2005 07:35:07

Beau travail.

signaler à un administrateur
Commentaire de muad-dib le 09/06/2005 18:47:54

Très sympa ta classe. Mais tu ne saurais pas s'il y aurait un moyen d'enelever les marges sur les bords lors de l'impression ? (environ 2 - 3 cm de marge chez moi)

signaler à un administrateur
Commentaire de mep le 10/06/2005 11:06:25

Voila j'ai fait une mise a jour pour regler le probleme des marges. Dans la fonction de setage de marge il fo donné la taille en pixel a rajouter sur les coté par rapport au document de base. Aussi on peut aussi imprimer le nom du document et le numero de page.

signaler à un administrateur
Commentaire de beny_59 le 19/07/2005 10:39:25

Bonjour, chez moi, le paint() pose un problème de superposition graphisme, étant donné que j'ai une architecture de composants assez complexe !
Je suggère donc de remplacer la ligne :
   panel.paint(g2d);
par la ligne :
   panel.printAll(g2d);
qui est plus adapté à l'impression.
Voilà. Sinon, cette classe est géniale. Merci.

signaler à un administrateur
Commentaire de SayenVegeta le 07/08/2005 22:56:55

Salut
ca marche bien comme class
mais moi j ai un souci
sur mon panel j ai des JLabel et des JTable
mon probleme c est que en largeur je suis trop grand par rapport a une feuille A4
j ai modifier les marges (merci aux methodes qui vont bien)
mais ca suffit pas du tout
je pense que la methode print(Graphics g, PageFormat pf, int pageIndex) recadre le tout
mais le probleme c est l argument Graphics, je sais pas koi mettre
la feuille que je veux imprimé, c est une JFrame qui continent un JPanel qui contient des JLabel, des JTables
je doit faire quoi? transformer le panel en element Graphics???
si quelqu un pouvai m eclairer se serai sympa
merci

signaler à un administrateur
Commentaire de empiret le 12/09/2005 09:11:00

Bonjour,

Moi aussi j'ai le meme besoin:
Mes jtables sont grands, et lors de l'impression, on ne voit pas la totalite.

signaler à un administrateur
Commentaire de kinnex91 le 21/09/2005 14:29:03

Hello,
- SAYENVEGETA, EMPIRET :
    Pour transformer votre JFrame en Graphics :
    Graphics g = nom__obj_JFrame.getGraphics();

- Sinon ta classe est génial, faut juste que je me penche sur le GridBagLayout.
- Seul pb rencontré, la boite de dialogue veux m'irmprimer 9999 pages : une idée ?

++ ALL

signaler à un administrateur
Commentaire de e_zidore le 08/01/2006 11:26:58

Merçi beaucoup pour cette classe qui m'a été bien pratique.

signaler à un administrateur
Commentaire de developabdel le 16/02/2006 16:54:51

bonjour je suis débutant en java, j'ai besoin d'utiliser cette classe alors je vous demande de me poster juste un exemple d'utilisation si possible .. car comme je vous ai dit je viens de commencer en java ! merçi

signaler à un administrateur
Commentaire de empiret le 08/03/2006 15:54:23

Je me permets de repondre a cette demande:
Tu as un jpanel: mypanel, que tu veux imprimer.
Ce que tu dois faire:

MPanelPrinter printP = new MPanelPrinter(mypanel);
printP.print();

Par contre, j'ai toujours le probleme d'un jpanel qui n'est pas imprime en entier. Il n'est pas reduit pour etre imprime sur toute la largeur d'une feuille A4.

signaler à un administrateur
Commentaire de platinum07 le 01/08/2006 17:21:24

bonjour,
j'aimerais utiliser cette source qui me simplifierait bien la vie, mais voilà, elle ne fonctionne pas chez moi. J'utilise un JPanel dans lequel il y a plusieurs jpanels disposés en grille.
A l'intérieur de chaque, il y a une ImageIcon et un JLabel.
Lorsque je lance l'impression, rien n'apparait sur ma feuille sauf le numéro de ma page et le titre, preuve que le jpanel en entrée n'est pas vide...
quelqu'un aurait-il une idée, je désespère !
d'avance merci.

signaler à un administrateur
Commentaire de rem02 le 07/01/2007 01:42:50

Bonjour,
Un grand merci, trés bonne classe à garder sous la main...
Je l'ai modifier afin d'imprimer un JEditorPane... ( simple sufffit de remplacer jPanel par JEditorPane ^^ ).

Sinon il y a juste un petit truc, il n'y a pas toute les ouvertures et fermetures des if et else (je trouve que ça nuis à la lisibilité du code) surtout quand tu est débutant.

signaler à un administrateur
Commentaire de atha2 le 16/08/2007 22:10:18

salut,
génial ton truque!!!
merci tu m'enlève une sacré épine du pied

signaler à un administrateur
Commentaire de Louch le 12/09/2007 11:22:19

Bonjour,

Excellente classe, très instinctive qui plus est!
A utiliser sans modération.

signaler à un administrateur
Commentaire de pokitos le 28/03/2008 16:42:11 8/10

Salut,
Tout d'abord très bon ce code, vraiment génial, merci beaucoup.
J'espère que quelqu'un lira ce message.

Pour ma part j'ai juste modifier en jTextpane le panel , ça marche pareil.

Donc pour ceux qui ont ce problème avec les tables trop grande, je voudrai savoir ce qu'il faut modifier pour réduire la taille de l'image qui sera imprimer et de ce fait avoir mon tableau en entier, sachant que j'imprime en mode paysage grâce au setorientation.
Merci.

signaler à un administrateur
Commentaire de tmNoooR le 06/08/2008 19:58:35

merci ta sauvé ma vie

signaler à un administrateur
Commentaire de nicomitmal le 17/08/2008 00:35:41

Pas moyen d'imprimer mes infos.
J'ai laissé le JPanel dans le paramètre et le mien est constitué de deux composants : un Jpanel avec des JLabel et un second avec un JTable.
Je n'ai pas d'imprimante sous la main, alors je lance mes impression via Microsoft XPS Document Writer.
Mon document s'imprime dans un fichier qui se créé bien mais il est vierge. Une page blanche pour résultat !
De plus quand je choisi l'option "Imprimer dans un fichier" dans tout les cas il y a un probleme qui s'affiche !
Quelqu'un sait il pourquoi ?? Quelqu'un peut il m'aider ??? merci

signaler à un administrateur
Commentaire de nicomitmal le 17/08/2008 01:55:14

Voila de quoi m'intriquer !!
Mes JPanels séparés sont imprimés mais pas quant à l'impression ils sont ensemble !
De plus ma JTable n'imprime qu'une partie, la partie visible, sur la page. Si le nombre de lignes dépasse dans l'affichage et qu'une Jscroll apparait et bien cette barre de défilement apparait aussi à l'impression !! Comment faire pour qu'au lieu de cela ma table apparaisse entière, quitte à prendre deux page s'il faut !
Merci pour votre attention et pour vos éventuels conseils

signaler à un administrateur
Commentaire de nicomitmal le 18/08/2008 17:45:33

Voila qui résout mon probleme !
Je viens de voir qu'il faut obligatoirement que mon panel soit introduit dans une JFrame pour être imprimé...Je me demande bien pourquoi mais bon voila !
Le fait est qu'avec cet option -fenetre.setVisible(false)- mon jpanel s'imprime bien !
++ et merci

signaler à un administrateur
Commentaire de beberto56 le 03/09/2008 15:11:54

bonjour, tous d'abord merci pour la classe elle marche super bien. J'ai juste un petit problème: je me sert de la méthode FitIntoPage qui recadre parfaitement mon panel mais le problème c'est que en bas de page (car il me reste un peu d'espace) je retrouve le haut de mon panel qui se réimprime à la suite. J'ai donc tous mon panel et une petite partie du meme panel qui s'imprime j'ai donc mon titre en haut et en bas^^.

Est ce que quelqu'un aurais une solution pour éviter cela.

Merci d'avance

Beberto56.

signaler à un administrateur
Commentaire de mep le 03/09/2008 16:11:44

hello,

3 ans après, pas facile de me remémorer comment j'ai fait ma classe :)

bon, toujours est il que ça fait pas mal de temps que je m'en sert et je n'ai jamais vu ce pb. Tu peux essayer de finter comme je le fait pour le warpComponent, a savoir dessiner un carré blanc pour masquer la partie qu'on ne veux pas afficher. Regarde ce bout de code :
#  if(wrapComponent)
# {
# double hauteurBlanc = ((Double)taillePages.get(pageIndex)).doubleValue();
# g2d.setColor(Color.WHITE);
# g2d.fillRect(0, (int)hauteurBlanc, (int)largeurPage, (int)hauteurBlanc + (int)hauteurPage);
# }

en gros tu fill un rectangle blanc qui commence sous la partie qui est affichée, donc sous la taille de ton panel + les marges. Normalement cette hauteur est calculé par la méthode calculatePages qui remplie l'arraylist avec les valeurs de la taille réelle de chaque page. Essai de bricoler ça sous l'appel du dessinage du Panel (panel.paint(g2d)).

J'ai pas testé parce que j'ai aps trop le temps, mais dans la théorie ca devrait marcher.

a+

signaler à un administrateur
Commentaire de beberto56 le 04/09/2008 09:01:25

Merci MEP c'est bon ta technique fonctionne et encore mici pour ta classe qui me sert énormement.

++ Beberto56.

signaler à un administrateur
Commentaire de beberto56 le 05/09/2008 15:34:38

Re mep and all gens,

est ce que tu pourrais m'expliquer la fonction de chacune des méthodes de ta fonction stp et si il y un ordre pour les utiliser stp??
En fait j'ai toujours le même problème c'est à dire quesur un des documents que j'imprime je retrouve mon titre au début de l'impression et je le retrouve à la fin également et la technique du regtangle blanc ne fonctionne pas...
La je n'ai pas trop de solution^^.

Merki d'avance

Beberto56.

signaler à un administrateur
Commentaire de chahrah le 08/04/2009 12:54:32

dsl mais je c pas comment utiliser cette classe
pour imprimer  mon propre pannel deja realiser
dsl si vous me donner les etapes pour l'excuter
y a un erreur qs j'excute la classe telle qu'elle est !!

printer started with null constructor

signaler à un administrateur
Commentaire de Knice le 04/05/2009 02:27:34

ENORMISSIME !
Merci beaucoup :)

signaler à un administrateur
Commentaire de lahoudieeric le 25/05/2009 16:10:46

java.awt.print.PrinterException: Printer is not accepting job.
        at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1295)
        at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1246)


D'autre ont eu cette erreur et si oui comment y remedier ? :o

signaler à un administrateur
Commentaire de zbidii le 08/07/2009 13:46:46

slt,
Moi j'ai un autre problème. Quand j'appui sur mon bouton imprimer une fenetre s'ouvre. Mais quand j'appui sur ok rien ne se passe !!!!

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Impression [ par manu33 ] Salut,Je voudrais transformer mon JPanel en une image pour pouvoir le redimensionner avant impression. La seule solution que j'ai trouvé est la copie Composants swing et fond transparent !!! [ par wt ] Salut tlm,Comment affecte-t-on une couleur transparente à un composants swing, un JPanel par exemple ?Je dispose d'1 couleur en gradient : son intensi impression avec swing [ par wilber ] Salut!COmment imprimer un fichier texte avec swing???Jsouhaiterais lance l'impression apres avoir fixe les differents parametres (avec la methode prin AU SECOURS: pb d'affichage swing [ par tlehoucq ] Bonjour, voila mon pb: comment faire pour afficher des composants swing au premier plan, je m'explique: je veux afficher un JLabel au des Afficher une image ... galère ... [ par Asrull ] Alors voilà j'ai un gros problème et je tourne en rond depuis deux plombes la dessus. Le but de maclasse c'est juste de créer un composant swing affic [Swing] impression [ par reebook1 ] Bonjour à tous.J'utilise un printDialog pour l'envoi d'impression. Cependant, je voudrais savoir lors de la validation de l'impression quel impri [Swing]JdesktopPane dans un JPanel [ par terminagroo ] Bonjour,Voilà je cherche à ajouter un JDesktopPane dans un JPanel. En fait ce que je veux c'est avoir un panel dans lequel je puisse avoir p impression contenu d'un JPanel [ par claroune ] Bonjour,Je souhaiterais pouvoir imprimer le contenu d'un JPanel mais je ne vois pas du tout comment programmer ca.Pouvez vous m'aider?Merci d'avance Tit prob de base avec SWING dans eclipse et JPANEL [ par Nargzul ] Bonjour,Je me mets gentillement à java, et avec eclipse, je suis en train de créer une interface utilisateur.Donc comme on m'a dit, je cr&#2 Impression avec MPanelPrinter.java (de mep) [ par kinnex91 ] Bonjour, peut être pouvez-vous m'aidez : lorsque j'imprime mon JPanel, la fonction de la classe écrite par mep calcul le nombre de pages. Dans mon exe


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.