Problème avec l'impression

Signaler
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
-
Messages postés
545
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
28 septembre 2011
-
salut mes amis je viens d'essayer de realiser une application  pour lancer une impression  mais ça ne marche pas
voila le code


package aa;
import javax.swing.*;
import java.awt.*;
import java.awt.print.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;




 public class SimpleFenetre extends JFrame implements  ActionListener  
{
 private JPanel pan;
 private JLabel b = new JLabel("votre nom : ");
 private JButton imprime = new JButton ("imprimer");
 private JTextField  nom=new JTextField ();
 public SimpleFenetre (){
 this.setResizable(false);
 this.setSize(720, 520);
 this.setLocationRelativeTo(null);
 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


pan=new Panneau();
 pan.setLayout(null);
 nom.setBounds(340 ,100 ,100,30 );


pan.add(nom);
getContentPane().add(pan);


 pan.add(b);
  b.setBounds(150 ,100 ,80,24 );
pan.add(imprime);


 imprime.addActionListener(this);
  imprime.setBackground(Color.red);
  imprime.setBounds(220 ,100 ,100,30 );
getContentPane().add(pan);


}
public static void main(String[] args) {


   SimpleFenetre gui = new SimpleFenetre();
   gui.setVisible(true);




}


 class Panneau extends JPanel {


 private ImageIcon rouge ;
 public Panneau(){
 rouge =new ImageIcon("C:\\Documents and Settings\\BELHAOUARI\\Bureau\\a.JPG");
 }
 public void paintComponent(Graphics g){
 super.paintComponent(g);
 Image imRouge=rouge.getImage();
 g.drawImage(imRouge,0,0,this);
 }
 }


 public void actionPerformed(ActionEvent e) {


  if (e.getSource().equals(imprime)) {
   String text=nom.getText();


nom.Imprimer();
  }
  }
public void Imprimer() {


   PrinterJob printJob = PrinterJob.getPrinterJob();
   printJob.setPrintable();


if (printJob.printDialog()) {
try { printJob.print(); }
catch(Exception PrinterExeception) { }
}
}
public int print(Graphics g, PageFormat pf, int pi) throws
PrinterException {
if (pi >= 1) {
return Printable.NO_SUCH_PAGE;
}
g.translate(100, 100);
Font f = new Font("Monospaced",Font.PLAIN,12);
g.setFont (f);
nom.paint (g);
return Printable.PAGE_EXISTS;
}
}


 j'ai deux message d'erreur

"SimpleFenetre.java": cannot resolve symbol: method Imprimer ()in class javax.swing.JTextField at line 66, column 5


"SimpleFenetre.java": cannot resolve symbol: method setPrintable ()in class java.awt.print.PrinterJob at line 72, column 13

sur ces deux lignes
pan.add(imprime);
printJob.setPrintable();

merci mes amis de bien vouloir m'aider

13 réponses

Messages postés
545
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
28 septembre 2011
2
Salut,

Premier message => Logique, a m'éthode imprmer n'est applicable qu'à des objets de type SimpleFenetre, et donc pas à un JTextField. A la rigueur, tu peux appeler la méthode directement et faire des traitements sur ton label dedans, ça ça marche

Deuxième message => Dans al clase PrinterJob, setPrintable() prend au moins un paramètre, je t'invite à regarder la javadoc associée à la classe.

Par ailleurs, tu vas devoir implemanter l'interface Printable. Un p'tit tour sur google pour voir commenton fait devrait t'aider

gmi19oj19
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
salut
je viens de lire tes commentaires mais je n'ai rien compris , et en plus j'ai bien lis la doc comment faire lancer une impression , commetn sera la modification de mon code
merci
Messages postés
545
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
28 septembre 2011
2
Salut,

Je ne peux te donner une correction exacte à 100%, vu que je n'ai jamais géré d'impression en Java. Cependant, au risquer de me repeter.

Ta méthode imprimer() , définié dans la classe SimpleFenetre, ne peut s'appliquer qu'à un objet de tuype SimpleFenetre.

Si tu fais un objet.imprimer(), objet DOIT être de type SimpleFenetre. Toi, tu cherches à l'appeler sur ton JTextField nom, c'estpour cela que ça ne marche pas.

Donc, il faut appeler imprimer() et non nom.imprimer().

Deuxièmement, tu n'as pas bien regarder ta javadoc. Dans la classe PrinterJob, setPrintable() N'EXISTE PAS.  Les méthodes qui existent sont :

, 
setPrintable(Printable painter)


, 
PageFormat format)


Il te fut donc implemanter dans ta classe SimpleFenetre ou dans une autre classe l'interface
Printable pour le passer en paramètre.


Pour un exemple d'implementation, va ici.

Après, si tu ne comprends toujours pas ce que je te dis, je pense qu'il faut revoir les bases de Java....

gmi19oj19
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
voila je viens de modifier mon code
alors si je clik sur le bouton imprimer une fenetre impression apparait
ma question comment créer un état d'impression en java préparer la page d'impression pour imprimer le JTextField<!-- / message -->
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
je viens de modifier le code ,Le problème c'est qu'il m'imprime toute ma fenêtre. je voudrais juste qu'il m'imprime juste le texte et non la fenêtre
<!-- nothing comment --><!-- nothing comment -->
http://i12.tinypic.com/48df8k2.jpg

voila le code
http://rafb.net/p/yka3yw45.html

je chercher a afficher seulment JTextField et JLabel pas tout se trouve sur l'interface

merci encore mes amis
Messages postés
545
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
28 septembre 2011
2
Salut,

En fait, ton erreur vient de là :

PrintJob job = getToolkit().getPrintJob(this,"ulysse",null);

Le this fait référence à ta fenetre, du coup tu vas imprimer effectivement toute ta fenetre.
Ce qu'il faudrait, c'est modifier ton interface graphique pour avoir ton label et ton textfield dans un même panel, avec rien d'autre (ce panel étant déclarer en tant que variable d'instance, et non seulement dans le constructeur). Ensuite, tu appelles ta méthode comme ceci :
PrintJob job = getToolkit().getPrintJob(unPanel,"ulysse",null);

gmi19oj19
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
merci mais j'ai ajouté cette ligne mais ça ne marche pas 

     PrintJob job = getToolkit().getPrintJob(pan,"ulysse",null);
mais un message d'erreur
Simplefenetre .java cannot resolve variable in class aa.SimpleFenetre at line67 .colon 46
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
salut , je coince encore car je n'ai pas trouvé comment

normalement si je tape sur le bouton imprime
seulement le composant JLabel affiche et JTextField pas le bonton et la case d'ou je tape le nom JTextField

import javax.swing.*;
import java.awt.*;
import java.awt.print.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
 
publicclass SimpleFenetre extends JFrame implements  ActionListener
{
   private JPanel pan;
   private JLabel b = new JLabel("votre nom : ");
   private JButton imprime = new JButton("imprimer");
   private JTextField nom = new JTextField();
   public SimpleFenetre(){
     this.setResizable(false);
     this.setSize(720, 520);
     this.setLocationRelativeTo(null);
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
     pan = new Panneau();
     pan.setLayout(null);
     nom.setBounds(340, 100, 100, 30);
 
     pan.add(nom);
     getContentPane().add(pan);
 
     pan.add(b);
     b.setBounds(150, 100, 80, 24);
     pan.add(imprime);
 
     imprime.addActionListener(this);
     imprime.setBackground(Color.red);
     imprime.setBounds(220, 100, 100, 30);
     getContentPane().add(pan);
 
   }
 
   publicstaticvoid main(String[] args){
 
     SimpleFenetre gui = new SimpleFenetre();
     gui.setVisible(true);
 
   }
 
   class Panneau
       extends JPanel {
 
     private ImageIcon rouge;
     public Panneau(){
       rouge = new ImageIcon(
           "C:\\image.JPG");
     }
 
     publicvoid paintComponent(Graphics g){
       super.paintComponent(g);
       Image imRouge = rouge.getImage();
       g.drawImage(imRouge, 0, 0, this);
     }
   }
 
   publicvoid actionPerformed(ActionEvent e){
 
     if(e.getSource().equals(imprime)){
     PrintJob job = getToolkit().getPrintJob(this,"essaie",null);
   
     if(job !=null){
     Graphics g = job.getGraphics();
     g.translate(50, 10);
     Font f = new Font("Monospaced",Font.PLAIN,10);
     g.setFont(f);
 
pan.printComponents(g);
   g.dispose();
   job.end();
}
}
}
}
ça m'imprime la fenetre pan.printComponents(g);

merci
Messages postés
545
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
28 septembre 2011
2
Salut,

import javax.swing.*;
import java.awt.*;
import java.awt.print.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
 
public class SimpleFenetre extends JFrame implements  ActionListener, Printable {

   private JPanel panImp, panBouton;
   // c'est pas propre mais osef
   private JLabel b = new JLabel("votre nom : ");
   private JButton imprime = new JButton("imprimer");
   private JTextField nom = new JTextField();

   
   public SimpleFenetre() {
    
     super("Test d'impression");
 
     panImp = new JPanel(new GridLayout(0,2));panImp.add(b); panImp.add(nom);
     getContentPane().add(panImp, BorderLayout.CENTER);
     panBouton = new JPanel(); panBouton.add(imprime);
     getContentPane().add(panBouton,BorderLayout.EAST);
     imprime.addActionListener(this);
     imprime.setBackground(Color.red);

     setResizable(false);
     pack();
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     setVisible(true);
 
   }
 
   public static void main(String[] args){
 
     SimpleFenetre gui = new SimpleFenetre();
 
   }
 
  
   public void actionPerformed(ActionEvent e){
 
     if(e.getSource().equals(imprime)){
         PrinterJob job = PrinterJob.getPrinterJob();
       job.setPrintable(this);
         if(! job.printDialog()) return;

    try {

        job.print();

    } catch(Exception ex) {

        System.out.println("impossible d’imprimer");
        ex.printStackTrace();

    }
   
      }
  }

  public int print(Graphics g, PageFormat pf, int indexPage) {
   
    if(indexPage > 0) return NO_SUCH_PAGE;

    Graphics2D g2 = (Graphics2D)g;

    g2.setFont(new Font("Monospaced",Font.PLAIN,10));

    g2.drawString(b.getText()+" "+nom.getText(), 96, 144);

    return PAGE_EXISTS;
   

  }
}

gmi19oj19
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
merci encore c'est ça ce que je cherche
mais je cherche à insérer une image pour lancer l'impression

 ImageIcon ii =new ImageIcon("a.JPG");

g2.drawString(ii.getImage(),30,60);

ne marche pas merci encore ami
Messages postés
545
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
28 septembre 2011
2
Salut,

C'est normal que ça marce pas, tu demandes de dessiner une chaine de caractères et du lui passe une image en paramètre...

Tu trouveras les méthodes necessaires pour le traitement des images dans la javadoc de la classe Graphics2D

http://java.sun.com/javase/6/docs/api/java/awt/Graphics2D.html

Et "insérer une image pour lancer l'impression" c'est pas très clair ...

gmi19oj19
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
salut
merci encore ami
j'ai ajouté
ImageIcon img=new ImageIcone ("image.jpg");
img.getImage().getScaledInstance(20,20,Image.SCALE_AREA_AVERGING);//pour diminuer la taille de l'image sur la feuille avant l'imprimer mais ça n'a pas marché
g.drawImage((img.getImage(),50,50,this);

je voulias diminuer la taille de l'image 50,50 pas tellequelle est enregistré
la méthode img.getImage().getScaledInstance(20,20,Image.SCALE_AREA_AVERGING); ne marche pas

merci encore
Messages postés
545
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
28 septembre 2011
2
Salut,

Là j'peux pas t'aider sur ça, j'ai aucne idée^^

Poste un nouveau message pour ce problème, pour que plus de gens puissent t'aider^^

gmi19oj19