Impression JFrame (java)

Reisors Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   -  
Reisors Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Debutant en JAVA et après avoir consulté des dizaines de pages sur l'impression dans ce language je n'ai toujours pas compris comment effectuer l'impression de ma JFrame car il n'y a AUCUNE véritable explication dans ses pseudo "tutoriels", je m'en remet donc a vous :)

Je voudrais pouvoir imprimer cette JFrame (ou plutot ce qu'elle contient) au lancement du programme donc sans bouton n'y quoi que ce soit histoire que je comprenne comment sa marche, merci d'avance.


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



public class NewClass extends JFrame {

    private JLabel lkPrenom;
    private JLabel lkNom;
    private JLabel lkProfession;
    private JLabel lkAdr;
    private JLabel lkCP;
    private JLabel lkVille;
    private JLabel lkTel;
    private JLabel lkNumk;
    private JLabel lPatient;
    private JLabel lMedecin;
    private JLabel lDDP;
    private JLabel lNDSE;
    private JLabel lDM;
    private JTextField tfPatient;
    private JTextField tfMedecin;
    private JTextField tfDDP;
    private JTextField tfNDSE;
    private JTextArea taDM;




    public NewClass(String nomFenetre){
        super(nomFenetre);
        this.setBounds(30, 30, 700, 1000);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        //Label
        lkNom = new JLabel("nom");
        lkPrenom = new JLabel("prenom");
        lkProfession = new JLabel("proffesion");
        lkAdr = new JLabel("adresse");
        lkCP = new JLabel("CP");
        lkVille = new JLabel("Ville");
        lkTel = new JLabel("08 25 25 25 25");
        lkNumk = new JLabel("25 022254 7");
        lPatient = new JLabel("PATIENT : ");
        lMedecin = new JLabel("MEDECIN : ");
        lDDP = new JLabel("Date de prescription : ");
        lNDSE = new JLabel("Nombre de séance effectuées : ");
        lDM = new JLabel("Diagnostic médical : ");
        //TextField
        tfPatient = new JTextField(15);
        tfMedecin = new JTextField(15);
        tfDDP = new JTextField(5);
        tfNDSE = new JTextField(5);
        //TextArea
        taDM = new JTextArea(4,63);
        this.fenetrePrincipale();
        this.setResizable(false);
        this.setVisible(true);
    }

    private void fenetrePrincipale(){

        Container c = getContentPane();

        //Panel Prenom et nom
        JPanel pPrenomNom = new JPanel();
        pPrenomNom.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pPrenomNom.add(lkPrenom);
        pPrenomNom.add(lkNom);
        //Panel Proffession
        JPanel pProfession = new JPanel();
        pProfession.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pProfession.add(lkProfession);
        //Panel Adresse
        JPanel pAdr = new JPanel();
        pAdr.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pAdr.add(lkAdr);
        //Panel CP et Ville
        JPanel pCPVille = new JPanel();
        pCPVille.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pCPVille.add(lkCP);
        pCPVille.add(lkVille);
        //Panel Tel
        JPanel pTel = new JPanel();
        pTel.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pTel.add(lkTel);
        //Panel NumK
        JPanel pNumK = new JPanel();
        pNumK.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pNumK.add(lkNumk);
        //Panel GridLayout for Entete Evelyne(pE1)
        JPanel pE1 = new JPanel();
        pE1.setLayout(new GridLayout(6,1));
        pE1.add(pPrenomNom);
        pE1.add(pProfession);
        pE1.add(pAdr);
        pE1.add(pCPVille);
        pE1.add(pTel);
        pE1.add(pNumK);
        //
        //Panel Patient
        JPanel pPatient = new JPanel();
        pPatient.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pPatient.add(lPatient);
        pPatient.add(tfPatient);
        //Panel Medecin
        JPanel pMedecin = new JPanel();
        pMedecin.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pMedecin.add(lMedecin);
        pMedecin.add(tfMedecin);
        //Panel GridLayout for Patient et Medecin(pE2)
        JPanel pE2 = new JPanel();
        pE2.setLayout(new GridLayout(2,1));
        pE2.add(pPatient);
        pE2.add(pMedecin);
        //
        //Panel Contenant pE1 et pE2
        JPanel pPE1PE2 = new JPanel();
        pPE1PE2.setLayout(new GridLayout(1,2,110,50));
        pPE1PE2.add(pE1);
        pPE1PE2.add(pE2);
        //
        //
        //Panel DDP
        JPanel pDDP = new JPanel();
        pDDP.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pDDP.add(lDDP);
        pDDP.add(tfDDP);
        //Panel NDSE
        JPanel pNDSE = new JPanel();
        pNDSE.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pNDSE.add(lNDSE);
        pNDSE.add(tfNDSE);
        //
        //Panel GridLayout contenant pDDP et pNDSE(E3)
        JPanel pE3 = new JPanel();
        pE3.setLayout(new GridLayout(1,2,100,50));
        pE3.add(pDDP);
        pE3.add(pNDSE);
        //
        //
        //Panels pour Diagnostic medical pDM1 et pDM2
        JPanel pDM1 = new JPanel();
        pDM1.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pDM1.add(lDM);
        JPanel pDM2 = new JPanel();
        pDM2.setLayout(new FlowLayout(FlowLayout.LEFT,1,1));
        pDM2.add(taDM);
        //
        //Panel BorderLayout pDM contenant pDM1 et pDM2
        JPanel pDM = new JPanel();
        pDM.setLayout(new BorderLayout());
        pDM.add(pDM1,BorderLayout.NORTH);
        pDM.add(pDM2,BorderLayout.CENTER);
        //
        //
        //Panel Borderlayout Contenant ALLN  :
        JPanel ALLN = new JPanel();
        ALLN.setLayout(new BorderLayout(0,10));
        ALLN.add(pPE1PE2,BorderLayout.NORTH);
        ALLN.add(pE3,BorderLayout.CENTER);
        ALLN.add(pDM,BorderLayout.SOUTH);
        //
        //
        //


        // Panel contenant TT :
        JPanel ALL = new JPanel();
        ALL.setLayout(new BorderLayout());
        ALL.add(ALLN,BorderLayout.NORTH);

        c.add(ALL);
        c.setVisible(true);


    }




    public static void main(String[] args){

        NewClass e = new NewClass("uneFenetre");






    }
}

A voir également:

2 réponses

choubaka Messages postés 39442 Date d'inscription   Statut Modérateur Dernière intervention   2 105
 
Bonjour

Tu veux imprimer quoi exactement, quel est le contenu ???
2
Reisors Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   14
 
Je voudrais imprimer l'ensemble des panels, donc le Panel "ALL".
0
choubaka Messages postés 39442 Date d'inscription   Statut Modérateur Dernière intervention   2 105
 
c'est normal que tu ne trouves rien dans les tutos.. Tu peux imprimer des documents, des dessins, des chaines de caratères mais des JPanel, non..

Tu devra créer sur base des données à imprimer un document ou quelque chose d'imprimable.
0
Reisors Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   14
 
ok, donc si je veux imprimer ce que j'ai dans ma fenêtre qu'es-qu'il faut que je fasse ?
0
choubaka Messages postés 39442 Date d'inscription   Statut Modérateur Dernière intervention   2 105
 
Et bien, c'est là que les tutos sont utiles

https://bruno-richeton.developpez.com/tutoriels/java/swing/impression-java/

par exemple...

Mais il y en a d'autres

0
Reisors Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   14
 
C'est désolant de voir que vous répondez à ma question sans avoir lu entièrement ce que j'ai écrit, et ce tutoriel là comme tous ceux que j'ai lu n'apporte AUCUNE solution à mon problème, si je suis venu ici c'est pour trouver une solution est pas être rediriger sur des pages lu et relu ....
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Une méthode que je trouve relativement simple c'est de construire une page HTML en la remplissant avec les valeurs que tu as obtenu. Cette méthode devient rapidement puissante si la page générée utilises une feuille de style CSS prédéfinie.
Avec la classe Desktop tu peux alors faire un print du fichier généré.
1
Reisors Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   14
 
merci mais j'aurais aimer une solution plus simple, qui imprime en utilisant juste JAVA.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Reisors Messages postés 153 Date d'inscription   Statut Membre Dernière intervention  
 
C'est quoi "juste Java" ? Le fait même de vouloir imprimer va devoir te faire sortir de Java. À moins que ce ne soit des feuilles Java, avec du papier Java...
Sinon tu remplis un fichier texte et tu l'imprimes, mais au niveau présentation ça risque d'être limité !
0
Reisors Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   14
 
Ok je vois, tu aurais un tuto pour construire une page HTML avec les infos que j'aurais obtenu ?
parce que je ne vois pas trop comment faire ...
Ce que tu veux dire c'est générer une page HTML en JAVA ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Reisors Messages postés 153 Date d'inscription   Statut Membre Dernière intervention  
 
Exemple :

public String toHTML()
{
	StringBuilder sb = new StringBuilder();
	
	sb.append("<html><head><style type=\"text/css\"><!-- .enTete {color:blue;} .consultation {color:red;} .diagnostic {color : green;} --></style></head><body>");
	sb.append("<div class=\"enTete\">");
	sb.append("prenomnom<br/>proffesion<br/>adresse<br/>CPVille<br/>08 25 25 25 25<br/>25 022254 7");
	sb.append("</div><div class=\"consultation\">");
	sb.append("Patient : ").append(tfPatient.getText()).append("<br/>");
	sb.append("Médecin : ").append(tfMedecin.getText()).append("<br/>");
	sb.append("Date de prescription : ").append(this.tfDDP.getText()).append("<br/>");
	sb.append("Nombre de séance : ").append(this.tfNDSE.getText()).append("<br/>");
	sb.append("</div><div class=\"diagnostic\">");
	sb.append("Diagnostic médical : <br/>").append(taDM.getText());
	sb.append("</div></body></html>");
	
	return sb.toString();
}

Ensuite, au moment opportun dans ton programme (une fois les valeurs entrées), il faut enregistrer cette chaîne de caractères dans un fichier temporaire avec l'extension .html puis lancer l'impression avec la classe Desktop
0
Reisors Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   14 > Reisors Messages postés 153 Date d'inscription   Statut Membre Dernière intervention  
 
Enregistrer dans un fichier temporaire ? excuse moi mais je suis en 2eme année de BTS je suis perdu .....
0