bad_dark_spirit
Messages postés13Date d'inscriptiondimanche 10 décembre 2006StatutMembreDernière intervention28 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
================================================================================================*/
/*=============================================================================================
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);
}
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 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;
}
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
bad_dark_spirit
Messages postés13Date d'inscriptiondimanche 10 décembre 2006StatutMembreDernière intervention28 juin 201010 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()
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.