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 :

probleme bouton d'impression


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 52
    Points
    52
    Par défaut probleme bouton d'impression
    bonjour,

    je cherche desesperement à imprimer un graphique...
    mon probleme viens de la methode : getPrintJob
    cette methode attend une frame en premier argument et je vois vraiment pas comment la recuperer... (cette frame etant la fenetre que je construit dans la classe XRecuitSimule(cf ci-dessous))

    j'ai essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PrintJob pJob = getToolkit().getPrintJob(XRecuitSimule.getFrames()[0],"Printing_Test", props);
    &&

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PrintJob pJob = getToolkit().getPrintJob(this,"Printing_Test", props);

    Voici a quoi ressemble ma classe :


    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
    public class XRecuitSimule extends JFrame{
     
      public XRecuitSimule(Vector v1, Vector v2){
      ...
    		//On ajoute le bouton imprimer dans "partieBouton"
    		btImprimer = new JButton("Imprimer");
    		partieBouton.add(btImprimer);
    		btImprimer.addActionListener(new imprimerBoutonListener());
      ...
      }
      // On definit une classe interne pour l'ecoute du bouton "Imprimer"
      public class imprimerBoutonListener implements ActionListener{
      	public void actionPerformed(ActionEvent e){
    	            Properties props = new Properties();
    		    props.put("awt.print.paperSize", "a4");
    		    props.put("awt.print.destination", "printer");  
    		    PrintJob pJob = getToolkit().getPrintJob(XRecuitSimule.getFrames()[0],"Printing_Test", props);
    		    if (pJob != null){	
    			Graphics pg = pJob.getGraphics();
    			graph.printAll(pg);
    			pg.dispose();
    		    }
    		    pJob.end();
    	}
      }//Fin classe imprimerBoutonListener 
     
    }//Fin classe XRecuitSimule

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    Tu crée ta propre classe listener (imprimerBoutonListener) dedans tu appelle la fonction getPrinterJob.
    Si tu passe this en argument cela représente un listener, or il te faut une JFrame. Ta classe imprimerBoutonListener est défini à l'intérieur de la classe XRecuitSimule.

    Pour obtenir l'instance de ta JFrame tu fait :
    XRecuitSimule.this : cela représente l'objet actuel (this : ta JFrame) qui comprend l'instance de ton listener.

    Voilà j'espère que je dis pas trop de bétises parceque en me relisant c'est pas très clair.

    PS: pense à mettre la balise [code] autour de ton code pour que ce soit plus lisible.

  3. #3
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    petite histoire :
    Il fut un temps ou j'ai essayé de manipuler les impressions directement sous java (a mes debuts).
    Je ne sais pas si c'est moi qui ne me suis pas assez forcé ou les classes java a disposition.
    Mais au final j'ai finit par passer par l'intermediaire du PDF. J'exporte mon graphique en image et je l'insere dans un fichier pdf (tres facile a faire avec la librairie IText), apres quoi je lance Adobe reader avec en parametre mon fichier.

    Au final je ne m'embete plus avec les impressions, et j'ai possibilité de faire une sauvegarde de mon fichier imprimé (ce qui peut etre tres interessant).

    J'ai choisis cette solution quand je travaillais dans une mairie, l'aspect PDF archivés a tout de suite fait l'unanimité.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    merci pour le "XRecuitSimule.this" ca n'a pas resolu ce problème (même resultat qu'avec "XRecuitSimule.getFrames()[0]") , mais ca m'a été pratique pour un autre problème....

    En fait, quand je clique sur mon bouton, il reste "enfonce" suite a mon clique, mais rien ne se passe...
    Si quelqu'un a une idée....

    La solution du pdf aurait pu etre une solution mais j'ai deja un bouton me permettant de sauvegarder mon graphique au format que je veux. L'interet du bouton imprimer étant d'imprimer directement mon graphique via ma fenetre et ne pas avoir à faire de manip supplémentaire....

  5. #5
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Si ton bouton reste enfoncé et que rien ne se passe, c'est déjà que tu effectues une opération assez longue dans l'EDT, c'est pas la bonne solution. Certainement qu'il y a une exception lors de l'exécution de ce code. Est-ce que toute ton application est "figée" après avoir appuyé sur ce bouton ?
    Et pense à utiliser la balise [code], c'est horrible la...

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    Désolé pour le code... j'avais pris la peine de l'indenter dans le message d'origine (mais ca n'a servit à rien...) maintenant que je sais qu'il faut inserer la balise [code], je ne ferai plus l'erreur...

    Pour repondre à ta question, effectivement tout mon application est figée ! mais en supprimant le processus associé, ma fenetre met un temps fou à disparaitre....

  7. #7
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    C'est que tu as une exception certainement. Ta console ne t'affiche rien ?

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    pas d'erreur dans ma console malheureusement...

    mais en tracant l'execution, il bloque sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PrintJob pJob = getToolkit().getPrintJob(XRecuitSimule.this,"Printing_Test", props);

  9. #9
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Déjà, essaie de mettre l'ActionListener dans la même classe, ce sera plus clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class XRecuitSimule extends JFrame implements ActionListener {
    public XRecuitSimule(Vector v1, Vector v2){  ... //On ajoute le bouton imprimer dans "partieBouton"  btImprimer = new JButton("Imprimer"); partieBouton.add(btImprimer); btImprimer.addActionListener(this);
    public void actionPerformed(ActionEvent e){  Properties props = new Properties(); props.put("awt.print.paperSize", "a4"); props.put("awt.print.destination", "printer");
    PrintJob pJob = getToolkit().getPrintJob(this,"Printing_Test", props);
    if (pJob != null){ Graphics pg = pJob.getGraphics(); graph.printAll(pg); pg.dispose(); }  pJob.end(); }
     ... } 
    // On definit une classe interne pour l'ecoute du bouton "Imprimer" }//Fin classe XRecuitSimule
    Ensuite, vérifie qu'aucune variable n'est a null avant de l'utiliser et voit dans la doc. ce qu'implique la méthode getPrintJob(), si il peut y avoir des problèmes...

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    j'avais deja test de mettre mon actionPerformed directement ds la classe mais ca change vraiment rien et j'ai du mal à voir en quoi c'est plus propre...

    après test, aucune variable n'est à null

    si pour la doc tu entends la javadoc, ils sont pas très bavard sur le sujet...

    j'croit ke je vais finir par supprimer mon bouton Imprimer... trop une perte de temps

    merci du coup de main !

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 52
    Points
    52
    Par défaut
    yop,

    juste pour dire qu'en fait ca fonctionne depuis toujours (avec classe ecoutrice ou pas)! enfin presque... en fait ca marche sur certain pc, et sur les pc où ca ne fonctionne pas, changer l'OS (passer de windows à linux) peut résoudre le problème !

    allez comprendre !

    Encore un de ces grands mystères qui ne sera sans doute jamais résolus !

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

Discussions similaires

  1. [Javascript] probleme script d'impression
    Par pimpmyride dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/03/2006, 14h37
  2. probleme bouton radio avec onChange dans formulaire
    Par wil4linux dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/09/2005, 11h26
  3. probleme bouton radio checked
    Par coachbob44 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/04/2005, 10h02
  4. [C#] Probleme bouton et place holder
    Par moimoimoi dans le forum ASP.NET
    Réponses: 12
    Dernier message: 02/04/2004, 12h01

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