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

Interfaces Graphiques en Java Discussion :

[Print] Impression de plusieurs composants graphiques....


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut [Print] Impression de plusieurs composants graphiques....
    Bonjour,
    je ne sais pas vraiment comment faire pour imprimer plusieurs composants sur une même page, j'ai quelques idées mais n'ayant encore jamais imprimer en java (ni en autres choses d'ailleurs) je me demande si il n'y a pas une solution simple.
    J'ai une interface graphique qui présente à l'utilisateur une feuille (JPanel, avec couleur de fond blanche et bordure noir), sur cette feuille il peut mettre des composants les faire dépasser de la feuille...
    donc moi deja j'aimerais bien créer un apercu de cette feuille, en y rajoutant des entete et pied de page (non visible sur la feuille de l'interface), et ensuite imprimer ma feuille.
    Seulement mes composants ne sont pas des enfants de ma feuille (vu qu'il peuvent dépasser...) donc je ne sais pas trop comment faire, je peux récupérer chaque composant, j'ai entendu parler de clipping zone, je pourrais les couper pour afficher seulement ce qui est contenu dans la feuille, mais ensuite comment faire pour combiner ce composant avec un autre composant présent sur la feuille.
    Je suis un peu perdu, alors si qq'1 pourrait m'orienté, si il y a des tutorials qui existe pour ce cas... merci d'avance.
    au fait en image, il faut imprimer la feuille :

    et si les composants sont en dehors cela donne :


    voila merci d'avance encore pour vos réponses et conseils.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    up

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Lorsque tu te crees un Printable tu peux tres bien appeler sa methode print() pour dessiner dans un panel ou dans une image.
    Tu peux aussi te creer un PageFormat ou un Paper ayant la taille d'un feuille A4 (j'igore comment recuperer la liste des formats disponibles sur l'imprimante selectionnee).

    Apres pour imprimer il s'agit juste de dessiner dans le graphics fournis. Il faudra peut-etre egalement faire un layout manuel des graphes (prevoir de l'espace en haut et en bas de page pour les entete et les pieds de page) que tu veux imprimer lors du 1er appel de la methode print() (ce qui permet aussi de calculer le nombre de pages).

    Voir ici un bout de code dont tu peux t'inspirer meme s'il n'imprime pas le meme genre de choses que toi.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    ok merci de ta réponse, ja vais regarder, j'ai vu aussi un site qui explique comment imprimer des composants, apparemment il faudrait faire des translate(x,y) pour déplacer le 'pinceau' ...
    http://hironico.club.fr/swing/projet...nting_api.html

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    j'ai regarder le liens que tu m'a fournit apparement tu passe par du HTML et un JEditorPane pour faire les entete et les pied de page.
    si je reprends ce que tu as fait, je reprendrais le meme printable sauf que le mien n'aurait pas de JEditorPane au centre mais un panel normal qui correspondrait a ma feuille blanche avec ces composants (a moi de débrouiller biensur).

    on est donc obligé de passé par du HTLM ?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    en fait je ne comprends rien au translate...
    pour l'instant j'essaye de dessiner une JTable qui rentre dans une page mais, le pied de page n'est pas visible.
    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
     
     public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
        if (table == null) {
          createTable();
        }
     
        int pageWidth = (int) pageFormat.getImageableWidth();
        int pageHeight = (int) pageFormat.getImageableHeight();
        if (!layoutDone) {
          centerHeight = pageHeight - (headerHeight + footerHeight);
          table.setSize(pageWidth, table.getHeight());
          layoutDone = true;
        }
     
        double pageX = pageFormat.getImageableX();
        double pageY = pageFormat.getImageableY();
        Graphics2D g1 = (Graphics2D) graphics;
     
        int fontHeight = g1.getFontMetrics().getHeight();
        int fontDescent = g1.getFontMetrics().getDescent();
        g1.translate(pageX, pageY);
        g1.drawString("GROUPE DSI ", pageWidth / 2 - 35, headerHeight - fontHeight);
        g1.translate(0, headerHeight);
        int centerY = pageIndex * centerHeight;
        g1.translate(0, -centerY);
        Shape oldClip = g1.getClip();
        g1.setClip(0, centerY, pageWidth, centerHeight);
        table.print(g1);
        g1.setClip(oldClip);
        g1.translate(0, centerY);
        g1.translate(0, centerHeight);
        g1.drawString("Page : " + (pageIndex + 1), pageWidth / 2 - 35, centerHeight + fontHeight + fontDescent);
        g1.translate(0, -(headerHeight + centerHeight));
        g1.translate(-pageX, -pageY);
        if (pageIndex >= 1) {
          return NO_SUCH_PAGE;
        }
     
        return PAGE_EXISTS;
    }
    quelq'un peut il m'expliquer exactement quelle opérations cela effectue ?

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Non, non, non, pour "l'inspiration" c'etait pour imprimer ou faire un image (ou d'afficher a l'ecran) via le Printable (plutot que via un panel ou une image separee) ; je parlais donc du code en general... Ce qu'il fait (ou plutot la solution que je lui ai fournis) avec des JEditorPane est bien specifique a son probleme et pas au tien.

    translate() change le repere actuel de ton contexte de dessin.
    Ainsi si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    graphics.translate(10, 10);
    graphics.drawRect(5, 0, 1, 1);
    graphics.translate(-10, -10);
    1) on change le repere le point (10, 10) est la nouvelle origine O'.
    2) on dessine un point (rectangle) a (5, 0) dans le nouveau repere d'origine O'. Soit a (15, 10) dans l'ancien repere d'origine O.
    3) on restaure l'origine a O (qui avait les coordonees (-10, -10) dans le repere d'origine O').

    etc... pour les autres transformations affines.
    Si tu ne comprend toujours pas il vas te falloir regarder des didacticiels Java2D et experimenter par toi-meme. Mais au vu de tes graphes et de ton affichage je pensais que tu avais des bases dans ce domaine.

    L'important c'est que tu dois faire le layout de tes graphes lors du 1er appel a print() en fonction de :
    - leur positions relatives.
    - la taille de ta page.
    - la taille de l'entete de la page.
    - la taille du pied de page.
    - le fait que probablement tu ne veux pas avoir un graphe qui s'etale sur 2 pages.
    Ce qui te permettras de determiner le nombre de pages.
    Ensuite chaque page est rendue separement.

    Sinon, si tu veux imprimer ce que tu vois a l'ecran tels quel il suffit juste de faire une image a partir de l'affichage de ta page et d'imprimer cette image directement (et eventuellement la mettre a l'echelle si besoin) dans la methode print du Printable.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    tout d'abord bonne année a tous, et aussi je n'ai pas compris pourquoi on change de repere deux fois de suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g1.translate(0, -(headerHeight + centerHeight));
        g1.translate(-pageX, -pageY);
    quel est l'intéret ? pourquoi ne pas seulement mettre la derniere ligne ?

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Bonne annéé, bonne santé !

    Le 1er translate() remet l'origine du repère au haut de la partie imprimable de la page.

    Le 2nd translate() remet l'origine du repère au haut de la page.

    Le 2 lignes sont dissociées pour être plus lisibles mais ces 2 opérations peuvent être fusionnées en une seule ligne.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    ok, merci je crois que je commence a comprendre, quand tu parle de layout
    Citation Envoyé par bouye
    L'important c'est que tu dois faire le layout de tes graphes lors du 1er appel a print() en fonction de :
    - leur positions relatives.
    - la taille de ta page.
    - la taille de l'entete de la page.
    - la taille du pied de page.
    - le fait que probablement tu ne veux pas avoir un graphe qui s'etale sur 2 pages.
    Ce qui te permettras de determiner le nombre de pages.
    Ensuite chaque page est rendue separement.
    tu veux dire qu'avec une sequence g.translate(); + g.draw() tel que les translate mette les élément au bon endroit... => soit définissent le layout ?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    pour l'instant j'arrive a gérer l'impression d'une JTable avec entete et pied de Page, une fois que j'ai mis cela au propre, je vais essayer de passer sur l'impression de ces composants.
    Merci pour l'explication, j'ai compris les décalages de repere, cela n'était pas compliqué.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/09/2011, 16h14
  2. plusieurs composants graphiques ayant meme comportement
    Par yassine.s dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 31/05/2011, 16h26
  3. Réponses: 2
    Dernier message: 07/08/2007, 11h32
  4. Composant graphique multiple (ou dérivé d'un TFrame)
    Par Jean Bovet dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/04/2007, 18h57
  5. Réponses: 4
    Dernier message: 06/11/2003, 10h37

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