Problème avec l'impression

ulysse00 Messages postés 292 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 - 8 avril 2007 à 21:19
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 - 13 avril 2007 à 13:33
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

gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
9 avril 2007 à 09:36
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
0
ulysse00 Messages postés 292 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
9 avril 2007 à 13:35
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
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
9 avril 2007 à 13:52
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
0
ulysse00 Messages postés 292 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
9 avril 2007 à 16:14
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 -->
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ulysse00 Messages postés 292 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
9 avril 2007 à 23:35
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
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
10 avril 2007 à 07:51
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
0
ulysse00 Messages postés 292 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
10 avril 2007 à 15:04
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
0
ulysse00 Messages postés 292 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
11 avril 2007 à 11:30
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
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
11 avril 2007 à 13:07
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
0
ulysse00 Messages postés 292 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
11 avril 2007 à 15:47
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
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
12 avril 2007 à 00:10
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
0
ulysse00 Messages postés 292 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
12 avril 2007 à 12:49
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
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
13 avril 2007 à 13:33
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
0