Impresssion sous Java

kainblueriver Messages postés 8 Date d'inscription samedi 12 juillet 2003 Statut Membre Dernière intervention 27 février 2006 - 6 nov. 2003 à 09:40
tominfo Messages postés 93 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 30 janvier 2009 - 12 nov. 2003 à 15:02
Voila je souhaiterais imprimer une interface graphique contenant plusieurs JPanel et le Pb est que je sais pas comment faire :sad) .
J'ai consulter deja plusieurs articles sur le sujet mais ils sont pas tres clairs, et quand je les tests ils m'impriment que les JPanel mais pas le texte qu'il y a dessus (ce qui est légèrement embetant). Si on pouvais me donner un coup de pouce ce serait sympa :big)
kainblueriver

1 réponse

tominfo Messages postés 93 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 30 janvier 2009
12 nov. 2003 à 15:02
Créer une classe comme celle çi :


import java.awt.*;
import javax.swing.*;
import java.awt.print.*;

/** A simple utility class that lets you very simply print
 *  an arbitrary component. Just pass the component to the
 *  PrintUtilities.printComponent. The component you want to
 *  print doesn't need a print method and doesn't have to
 *  implement any interface or do anything special at all.
 *  
 *  If you are going to be printing many times, it is marginally more 
 *  efficient to first do the following:
 *  
 *    PrintUtilities printHelper = new PrintUtilities(theComponent);
 *  

 *  then later do printHelper.print(). But this is a very tiny
 *  difference, so in most cases just do the simpler
 *  PrintUtilities.printComponent(componentToBePrinted).
 *
 *  7/99 Marty Hall, http://www.apl.jhu.edu/~hall/java/
 *  May be freely used or adapted.
 */

public class PrintUtilities implements Printable {
    /** le composant à imprimer */    
  private Component componentToBePrinted;

  /** imprimer composant
   * @param c le composant
   */  
  public static void printComponent(Component c) {
    new PrintUtilities(c).print();
  }
  
  /** constructeur
   * @param componentToBePrinted compsant à imprimer
   */  
  public PrintUtilities(Component componentToBePrinted) {
    this.componentToBePrinted = componentToBePrinted;
  }
  
  /** print method **/
  public void print() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    printJob.setPrintable(this);
    if (printJob.printDialog())
      try {
        printJob.print();
      } catch(PrinterException pe) {
        System.out.println("Error printing: " + pe);
      }
  }
  
  /** print method
   * @param g graphisme
   * @param pageFormat format
   * @param pageIndex index
   * @return valeur de retour de l'impression
   */

  public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
    if (pageIndex > 0) {
      return(NO_SUCH_PAGE);
    } else {
      Graphics2D g2d = (Graphics2D)g;
      g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
      disableDoubleBuffering(componentToBePrinted);
      componentToBePrinted.paint(g2d);
      enableDoubleBuffering(componentToBePrinted);
      return(PAGE_EXISTS);
    }
  }

  /** The speed and quality of printing suffers dramatically if
   *  any of the containers have double buffering turned on.
   *  So this turns if off globally.
   * @see enableDoubleBuffering
   * @param c composant
   */
  public static void disableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(false);
  }

  /** Re-enables double buffering globally.
   * @param c composant
   */
  
  public static void enableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(true);
  }
}


Ensuite tu n'as plus qu'à faire
PrintUtilities pu = new PrintUtilities();
puis
pu.print(MaFrame); (ou monPanel,...)
0
Rejoignez-nous