Java --> impression d'un textarea (applet)

Résolu
bad_dark_spirit Messages postés 13 Date d'inscription dimanche 10 décembre 2006 Statut Membre Dernière intervention 28 juin 2010 - 15 avril 2009 à 10:04
 merlin - 16 oct. 2014 à 18:59
Bonjour à tous,

Etant étudiant en info, j'ai un petit exo à rendre pour lundi. Le but est tout simple, il me faut créer un applet qui va chercher un répertoire sur le disque dur, m'affiche le contenu puis imprime ce contenu dans le format d'une jacquette cd.
Tout marche très bien, le problème est que je voudrais une bordure de la taille de la jacquette cd pour la découpe de celle ci sur la feuille venant d'être imprimée. Pour le moment l'impression me donne juste le texte du textarea contenant le contenu du répertoire choisi.

Ma question est donc : comment créer cette bordure (qui s'imprimera donc) sur le textarea lors de l'impression (une pochette cd fait 12cm/12 soit 340px/340)
Merci pour vos réponses, et voici mon code actuel...

/*=================================================================================================
 *         Projet : Classe_pochette_cd
 *         Auteur : Stéphane Haimet
 *         Crée le 06/04/2009
 *         Dernière modification le 07/04/2009
 *
 *         Description : Applet cherchant un répertoire dans le HDD du client. On affiche le
 *         contenu du répertoire, on le visualise, et on imprime ça sur un format de pochette cd
 ================================================================================================*/

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

public class Classe_pochette_cd  extends JApplet {
   
    /*=============================================================================================
          ATTRIBUTS DE LA CLASSE CLASSE_POCHETTE_CD
     ============================================================================================*/
    protected JButton btn_choix_dossier, btn_imprimer;
    protected JTextArea pnl_dossier_choisi;
    protected JFileChooser jfc_choix = new JFileChooser();
    protected Color clr_bouton, clr_texte_bouton, clr_bordure_panel, clr_erreur, clr_normal, clr_fond, clr_fond_clair;
    protected String[] liste_fichier, titre_liste_fichier;
    private static final long serialVersionUID = -666;
   
   
    //Lorsqu'on a cliqué sur le bouton de sélection de dossier, on affiche dans le text area la liste des fichiers du répertoire
    //séléctionné
     ActionListener lst_choix_dossier = new java.awt.event.ActionListener() {                   
         public void actionPerformed(ActionEvent evt_event) {
             //On n'autorise que la sélection de répertoires (directories)
             jfc_choix.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            if (jfc_choix.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                pnl_dossier_choisi.setText("  Contenu du répertoire ""+jfc_choix.getSelectedFile().getName()+""\n");
                //On enregistre le contenu du répertoire dans un tableau de string
                File dossier_choisi = new File(jfc_choix.getSelectedFile().getAbsolutePath());
                liste_fichier = dossier_choisi.list();
                //On affiche dans le text-area le contenu de notre répertoire sélectionné
                for(int i = 0; i < liste_fichier.length; i++) {
                    pnl_dossier_choisi.setText(pnl_dossier_choisi.getText()+"\n    - "+liste_fichier[i]);
                }
                pnl_dossier_choisi.setForeground(clr_normal);
            }
                       
         }
    };
   
   
    //Lorsqu'on a cliqué sur le bouton "visualiser", on a un popup qui s'affiche avec le contenu
    // de notre répertoire choisi
    ActionListener lst_imprimer = new java.awt.event.ActionListener() {   
        public void actionPerformed(ActionEvent evt_event) {
            //Si on a trop de données à afficher, on affiche une erreur
            if(liste_fichier.length>18) {
                pnl_dossier_choisi.setText("                     Trop de données, impression impossible");
                pnl_dossier_choisi.setForeground(clr_erreur);
            }
            else {
                try {
                    //On imprime
                    boolean impression_ok = pnl_dossier_choisi.print();
                    //Si on a imprimé, on affiche le bon déroulement de l'impression :D
                    if(impression_ok) {
                        pnl_dossier_choisi.setText("                                  Impression effectuée");
                        pnl_dossier_choisi.setForeground(clr_bouton);
                    }
                    else {
                        pnl_dossier_choisi.setText("                                   Impression annulée");
                        pnl_dossier_choisi.setForeground(clr_erreur);
                    }
                }
                catch (PrinterException pe) {
                    pnl_dossier_choisi.setText("                                  Une erreur est surevenue");
                    pnl_dossier_choisi.setForeground(clr_erreur);
                }
            }
        }
    };
   
   
    /*=============================================================================================
          METHODE DE LA CLASSE CLASSE_POCHETTE_CD
     ============================================================================================*/
   
    // Méthode d'initialisation de l'applet, c'est une méthode héritée
    @Override
    public void init() {
        super.init();
        this.setSize(360,410);
       
        //On configure les couleurs
        get_config_color();
        //On configure les composants de l'applet
        get_config_component();
        btn_choix_dossier.addActionListener(lst_choix_dossier);
        btn_imprimer.addActionListener(lst_imprimer);
    }
   
   
   
    //Méthode de configuration des différents éléments de l'applet
    public void get_config_component() {
        //On récupère le contenant de la fenêtre
        Container cnt_normal = getContentPane();
        cnt_normal.setLayout(null);

        //Configuration du bouton de sélection de dossier
        btn_choix_dossier = new JButton("Choisir le répertoire");
        btn_choix_dossier.setBackground(clr_bouton);
        btn_choix_dossier.setForeground(clr_texte_bouton);
        btn_choix_dossier.setBounds(10,360,160,30);
        cnt_normal.add(btn_choix_dossier);
       
        //Configuration du bouton d'impression
        btn_imprimer = new JButton("Imprimer");
        btn_imprimer.setBackground(clr_bouton);
        btn_imprimer.setForeground(clr_texte_bouton);
        btn_imprimer.setBounds(190,360,160,30);
        cnt_normal.add(btn_imprimer);
       
        //Configuration de notre textarea
        pnl_dossier_choisi = new JTextArea("                               Aucun répertoire sélectionné");
        pnl_dossier_choisi.setBounds(10,10,340,340);
        pnl_dossier_choisi.setBorder(BorderFactory.createLineBorder(clr_bordure_panel));
        pnl_dossier_choisi.setMinimumSize(getPreferredSize());
        cnt_normal.add(pnl_dossier_choisi);   
        // Note : une pochette cd fait 12cm/12cm soit 340px/340px
       
    }
   
   
   
    //Méthode de configuration des différents couleurs dans l'applet
    public void get_config_color() {
        clr_bouton = new Color(0,0,255);  //Couleur Bleu
        clr_texte_bouton = new Color(255,255,255);  //Couleur Blanche
        clr_bordure_panel = new Color(0,0,255);  //Couleur Bleu (idem que pour le fond des boutons)
        clr_erreur = new Color(255,0,0); // Couleur rouge
        clr_normal = new Color(50,50,240); //Couleur bleu légèrement grisé
        clr_fond = new Color(25,150,255);
        clr_fond_clair = new Color(220,220,255);
    }
   
               
} // Fin de la classe Classe_pochette_cd

4 réponses

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
15 avril 2009 à 20:05
...
public class Classe_pochette_cd extends JApplet {
...
                    //On imprime
                    boolean impression_ok = print(pnl_dossier_choisi);
...
    private boolean print(JTextArea text) throws PrinterException {
        // fetch the printable
        Printable printable = new TextReport(text);
        PrinterJob job = PrinterJob.getPrinterJob();// fetch a PrinterJob
        job.setPrintable(printable);// set the Printable on the PrinterJob
        // create an attribute set to store attributes from the print dialog
        PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
        // display a print dialog and record whether or not the user cancels it
        boolean printAccepted = job.printDialog(attr);
        if (printAccepted) {// if the user didn't cancel the dialog
            job.print(attr);// do the printing
            return true;
        }
        return false;
    }

    class TextReport implements Printable {

        private Printable textPrintable;
        private PageFormat pageFormatText;

        public TextReport(final JTextComponent text) {
            textPrintable = text.getPrintable(null, null);
        }

        public int print(final Graphics graphics, final PageFormat pageFormat,
                final int pageIndex) throws PrinterException {
            Graphics2D g = (Graphics2D) graphics;
            int x1 = (int) pageFormat.getImageableX();
            int y1 = (int) pageFormat.getImageableY();
            int w1 = (int) pageFormat.getImageableWidth();
            int h1 = (int) pageFormat.getImageableHeight();
            if (pageFormatText == null) {
                pageFormatText = (PageFormat) pageFormat.clone();
                Paper paperText = pageFormatText.getPaper();
                if (pageFormatText.getOrientation() == PageFormat.PORTRAIT) {
                    paperText.setImageableArea(x1, y1, w1, h1);
                } else {
                    paperText.setImageableArea(y1, x1, h1, w1);
                }
                pageFormatText.setPaper(paperText);
            }
            //print the text:
            Graphics gCopy = g.create();
            int retVal = textPrintable.print(gCopy, pageFormatText, pageIndex);
            gCopy.dispose();
            //print border around the text:
            g.drawRect(x1, y1, 300, 300);
            return retVal;
        }
    }
} // Fin de la classe Classe_pochette_cd
3
bad_dark_spirit Messages postés 13 Date d'inscription dimanche 10 décembre 2006 Statut Membre Dernière intervention 28 juin 2010 10
16 avril 2009 à 11:21
Un grand merci à toi uhrand !!!!

Pour information (pour les personnes souhaitant reprendre ce code), j'ai du faire deux "import" supplémentaires :
import javax.swing.text.*;
import javax.print.attribute.*;  //Pour l'utilisatin de la fonction HashPrintRequestAttributeSet()

Voilà voilà, encore merci à uhrand
0
Bonjour,
tout d'abord merci pour ce bout de code qui correspond pile poil à ce que je voulais faire.
J'ai néanmoins une une petite question : lorsque j'imprime mon textarea le texte se met bien dans la page en A4 par contre j'ai le dessin du bord du jtextarea qui est imprimé aussi mais en plus petit et donc en plein mileiur du texte :( comment puis j faire pour que cette partie ne s'imprime pas?
Merci de votre aide.
0
je réponds tout seul :
il faut virer :
//g.drawRect(x1, y1, 300, 300);
j'avais aps les yeux en face des trous...
Merci encore :)
0
Rejoignez-nous