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

Java Discussion :

[Débutant]Dimensionner la page imprimée


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut [Débutant]Dimensionner la page imprimée
    Bonjour à tous,

    J'ai fait un bouton qui imprime le Container de ma fenêtre en suivant pas à pas les instructions mises dans la FAQ. Néanmoins j'ai un problème de dimensionnement : à l'impression la fenêtre est coupée.
    Je souhaiterai savoir comment remédier à ce problème.

    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 11
    Par défaut
    faut recuperer la taille de ton container et de ta feuille ou tu imprime pour les adapter

    Perso, je n'ai pas utilisé la méthode de la faq, mais PrinterJob et l'interface Printable

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut
    Merci de m'avoir répondu

    J'ai redimensionné mon Container ce qui a pour effet d'augmenter la taille de l'image imprimée mais pas celle du graphics. Du coup j'ai toujours une image "utilie" petite. J'ai essayé de redimensionner le graphics mais sans succés. J'ai aussi essayé en passant par la fenêtre mais là encore sans succés.
    Je pense que je n'arrive pas à redimensionner le graphics.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 11
    Par défaut
    peut être parce que l'image que tu dessines dans ton graphics est petite en terme de pixel. Alors forcement, elle restera petite même si t'agrandie le frame.

    essaye en utilisant un Graphics2D et la methode scale(double sx, double sy).

    d'ailleur, pour le dessin d'une maniere general, je te conseil plutot graphics2D qui permet beaucoup plus de chose.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut
    Bonjour,

    J'ai essayé de transformer le graphics en graphics2D mais sans succés : une liste d'exception me sort. J'ai essaye cela de 2 manières différentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Graphics2D g2D = (Graphics2D)(g.create());
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Graphics2D g2D = (Graphics2D)g;
    La liste des exception est la même:
    at JPanelBoutonImprimer$Listener2.actionPerformed(JPanelBoutonImprimer.java:74)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
    at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
    Voilà pour les premières. Je vais peut être essayer une autre méthode d'impression. Je vous tiens au courrant.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut
    Rebonjour à tous,

    Pour arriver à changer les dimensions il a fallu que je change celles du panel et non celles du container. J'étais perçuadé que les panels suivés automatiquement leur container...
    Si quelqu'un peu m'expliquer où m'orrienté car m'aimerai comprendre.

    Merci d'avance à tous.

  7. #7
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    OK !

    Alors je ne sais pas trop ou tu en es dans ton travail d'impression, mais voici le code que moi j'ai fait pour imprimer une carte (dessinée dans la partie gauche d'un JSplitPane).
    Quelque soit la taille de mon JSplitPane le résultat sera toujours le même, à savoir un affichage sur la totalité de ma feuille, avec une marge de 20 pixels tout autour de la page.
    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
    	/** File print */
    	void filePrintMyMap() {
    		//Retrieve the job, and display the dialog box for printing
    		PrintJob job = getToolkit().getPrintJob(this, 
    				"MySociety - "+MySoft.getMySoftWindowInstance().getTitle(), null);
    		if (job != null) {
    			//retrieve the graphics where we gonna write
    			Graphics g = job.getGraphics();
    			if (g != null) {
    				//Print the left componant only -> The map.
    				Component leftComponent = mainSplitPane.getLeftComponent();
     
    				//Translate the component on the graphics, in order to start printing from the point(20, 20)
    				// -> margins at the left and at the top of the paper are of 20 pixels.
    				g.translate(20, 20);
     
    				//Save original map size, in order to get it back after printing
    				int originalWidth = leftComponent.getWidth();
    				int originalHeight = leftComponent.getHeight();
     
    				//Resize component on the graphics, to the paper dimensions selected by the user 
    				//in the dialog box (displayed above)
    				//Do not forget the original margin (20 pixels at top and left...), and add a new 20 pixels margin
    				//at bottom and right -> reduce paper width and paper height of 40 pixels.
    				leftComponent.setSize((int)job.getPageDimension().getWidth()-40, (int)job.getPageDimension().getHeight()-40);
     
    				//Print map component
    				leftComponent.printAll(g);
     
    				//Resize it back to its original size
    				leftComponent.setSize(originalWidth, originalHeight);
     
    				//End graphics
    				g.dispose();
    			} 
    			//Close the printJob
    			job.end();
    		}
    	}
    La première ligne (celle ou j'initialise mon PrintJob) me sert à afficher une boite de dialogue qui permet à l'utilisateur de choisir le format de papier sur lequel il veut faire son impression. Que ce soit du letter (A4 US) du A4 du A5 ou du A3, le résultat restera le même, et je n'ai pas à me soucier des dimensions du papier. Elles sont directement dans mon PrintJob !
    Je récupère dans leftComponent le composant que je veux imprimer (je ne m'occupe pas de savoir quel est le type de mon composant, je travaille en haut niveau...) puis je fais un translate, pour déplacer mon graphics. En d'autres termes, je commencerais à imprimer à partir du pixel 20,20 (mesuré à partir du coin supérieur gauche).
    Sur le setSize de mon leftComponent je réduis la dimension de mon composant de 40 pixels par rapport à celle du format de parpier choisit dans mon PrintJob. Le but : faire une marge de 20 pixels tout autour du graphics lors de l'impression.
    Et voilà le travail.

    Tu n'as plus qu'à l'appliquer en mettant ce que tu veux en lieu et place de mon leftComponent.

    Pour ce qui est des containers et des panels, les deux sont "indépendants". La gestion de tes panels à l'intérieur de tes containers et liée à ton LayoutManager. Tu n'es pas obligé d'avoir un LayoutManager dans ton container, ce qui te permet de faire à peu près ce que tu veux de tes panels dedans, sans dépendre de ton container...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut
    Merci,

    C’est très claire et beaucoup mieux que ce que j'avais fait (récupération du code de la FAQ avec changement des paramètres du panel à imprimer).

    Pour les panel et container : étant donnée que naturellement lorsque je modifie par la sourie les dimensions de la fenêtre tout change, je pensais que le LayoutManager servait de "ciment" avec le Container et faisait un "repaint" naturel. Mais là même en faisant faire un repaint du Container le label n'a pas suivi, comme si le LayoutManager c'était figer au lieu de prendre l'espace maximal.

  9. #9
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    J'ai un petit peu du mal à te suivre dans ton raisonnement sur les Container/LayoutManager.
    Par contre, si tu nous donnais un peu de ton code je pourrais peut-être essayer de comprendre/t'expliquer un peu plus en détail.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut
    Alors voici le code qui marche
    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
     
    class Listener2 implements ActionListener
       {
           public void actionPerformed(ActionEvent event)
           {
                Object source = event.getSource();
                int largeur_origine,hauteur_origine;
                if(source==BoutonImprimer)
                {
                    System.out.println("imprimer");
                    l=Panel_a_imprimer.getWidth();
                    h=Panel_a_imprimer.getHeight();
     
     
                    PrintJob job = getToolkit().getPrintJob(ff,"essai", null);
                    if (job != null) 
                    {
                        //Recupere le Graphics dans lequel on va ecrire 
                        Graphics g = job.getGraphics();
                        if (g != null) 
                        {
     
                            //Redimensionnement du Label
                            Panel_a_imprimer.setSize(830,588);//dimension pour une feuille A4
     
                            //Sur le Container imprime l'ensemble de ses Components  
                            cc.printAll(g);
                            g.dispose();
                        }
     
                    //** Finit le travail  
                    job.end();
                    }
                    Panel_a_imprimer.setSize(largeur_origine,hauteur_origine);
                    Panel_a_imprimer.repaint();//je sais pas si c'est nécessaire
     
     
                }
           }
    }
    Pour les codes qui ne marchent pas, la seule différence et que je changais les dimensions du container cc avec setBounds qui changais bien la taille du container mais pas celle de ses éléments.
    Pour en revenir à notre discusion je pensais que le container et les panels etaient liés par les layoutManager. Et donc en changeant la taille du container je changerai la taille des panels contenus.

    voilà @+ et Bonne soirée

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/05/2011, 11h07
  2. [XHTML] [débutant] Ouvrir une page dans une page xhtml
    Par wikers dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 14/02/2006, 16h20
  3. dimensionner une page php
    Par djibril dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 12/08/2005, 22h38
  4. [débutant] modifier une page en fonction d'un menu
    Par Hastur dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/07/2005, 13h29
  5. [Débutant] mise en page
    Par nounetmasque dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 02/05/2005, 19h41

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