et maintenant c'est quoi la suite du projet?![]()
et maintenant c'est quoi la suite du projet?![]()
Ok ; mais tu continues à faire tes écrans "à la main" en codant chaque contrôle.
Cela fonctionne bien sûr, mais quand je vois ta classe FenInterv courageusement codée à la main
à force de JPanel pour classer les contrôles et l'implémentation héroïque d'ActionListener pour les boutons,
je me dis que toute cette belle énergie serait bien mieux employée dans l'architecture du projet.
Explication :
NetBeans est construit pour composer facilement des écrans.
En quelques clics et quelques drag and drop, tu as composé un écran tout à fait professionnel.
http://netbeans.org/kb/docs/java/gui-functionality.html
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
ok j'en prend note pour la suite du programme!!!!
et maintenant je passe a quoi exactement?
Eh bien justement, passes donc un jour ou deux à bien maîtriser les écrans avec NetBeans
Cela fera gagner un temps fou à la suite
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Pour quelle date ?
Par ailleurs, tes écrans actuels sont fonctionnels.
Cependant, avec Netbeans, tu peux faire des écrans agréables à utiliser.
Au moment de la présentation de la maquette, c'est vital.
Il vaut mieux une belle IHM avec un ou deux bogues
qu'un écran gris parfaitement opérationnel ... c'est comme ça![]()
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
c'est vrai que mes ecrans sont plutot ouf!!!
mais je vais prendre le temps de les reconstituer pendant les week-end.
je doit finri le projet avant le 14 juin!!!
N'attends pas ce week-end.
Travailles tout de suite sur NetBeans.
La semaine prochaine, il faudra déjà commencer à travailler sur JasperReport
pour fabriquer les états
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
ok je commence de suite donc!!!![]()
c'est ok pour les ecrans!!!!
on peut passer a la suite...
La suite (pédagogique) est de s'initier rapidement à iReport pour formater un état utilisable depuis l'application Java.
JasperReport est le moteur ; il devra être ajouté aux bibliothèques de l'application le moment venu.
Voir FAQ iReport ici
Le principe général d'un "état" (ou "report" ou "impression") :
est le même que celui du mailing :
- d'un côté on a une requête SQL des données que l'on souhaite imprimer
- de l'autre on fabrique un modèle d'impression (report) en fonction des champs de cette requête.
Pour prendre en main l'outil, par rapport à ton application,
je te conseille de faire une simple liste des fabricants (nom, adresse) en restant dans iReport pour l'instant.
à+
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
ok je vais m'y mettre!!!
Ok!!! je suis arrivé à afficher les informations des fabricants dans iReport!!!
Bien, le plus gros est fait.
Travailles aussi sur la requête sous-jacente ; fais en sorte d'utiliser la table des fabricants reliées la table des équipements
Tu auras aussi besoin de faire des totalisations de colonnes.
Aussi, travailles la notion de groupe avec en-tête et ses pied de groupe
dans lesquels ont y place les calculs les plus intéressants.
Concentres-toi bien sur les chiffres et les données que tu veux obtenir.
Les utilisateurs et les responsables seront très exigeants sur les états
(c'est ce qui sert en réunions et ce sont des documents de gestion)
alors qu'ils sont plus tolérants sur l'aspect des écrans
Je te donnerais le reste du "programme d'étude" au fur et à mesure.
à+
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Et qu'en est il de JasperReports???
Comment l'utiliser dans mon programme?
pour bien comprendre la suite, dans iReport, dès que tu maîtrise bien les points précédents,
tu dois ajouter la notion de paramètre.
Cela sert à sélectionner les données dans un listing en fonction d'un critère.
Par exemple pour la liste de tous les équipements, La requête sous-jacente est :
Cependant, il est très rare qu'un état ne soit pas soumis à un ou plusieurs critères de sélection
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM equipements
Aussi, pour avoir cet état pour le fabricant N° 48, il faut modifier la requête :
Cela fonctionne mais ce n'est pas jouable pour un utilisateur qui doit pouvoir cliquer sur
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM equipements where Id_fabricant = 48
un bouton dans la fiche (JFrame) du fabriquant pour obtenir cette liste.
Ainsi, les états sont prévus pour recevoir un ou plusieurs paramètres
qui vont principalement servir à la sélection.
1) on définit le paramètre, par exemple {ID_FABRICANT} dans iReport
2) on modifie la requête en :Dès que ça marche alors, je te donnerai la procédure pour appeler un Rapport Jasper depuis ton application Java.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM equipements where Id_fabricant = $P{ID_FABRICANT}
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Sa maaarche!!!!
J'ai essayé avec la table interventions et j'ai ajouté 1 parametre {id_equipement} puis j'ai ecrit la requetê suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Select * from interventions where id_intervention=$P{id_equipement}
Le principe est simple :
1) on crée le rapport avec iReport -> on a un fichier "compilé" avec l'extension .jasper
2) on place ce fichier dans un package de l'application. Avantage : il sera transporté dans le jar de l'application généré par NetBeans
3) pour appeler le rapport, on le prend dans le jar (voir dans la classe comment c'est fait), on lui donne les paramètres et la connexion à la base
... et ça marche tout seul
Plutôt qu'une longue explication, voici une petite classe utilitaire
qui permet d'utiliser un rapport depuis une application java.
Il faut ajouter les jars de JaspertReport au classpath téléchargement ici : http://jasperforge.org/projects/jasperreports
Dans NetBeans, c'est facile, il suffit de créer une librairie avec les jars et d'ajouter cette bibliothèque au projet.
Il faut créer un package rapports dans lequel on place :
- la classe ImprJasper
- les différents rapports créés avec iReport (ne placer que les fichiers ayant .jasper comme extension)
à la fin de la classe se trouve un exemple d'appel de rapport
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112 package rapports; import java.io.File; import java.net.URL; import java.sql.Connection; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JRParameter; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperPrintManager; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.export.JRXlsExporter; import net.sf.jasperreports.engine.export.JRXlsExporterParameter; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.view.JasperViewer; /** * Petite classe utilitaire pour lancer une impression d'un état JasperReport * On suppose que cette classe est placée avec les différents rapports dans le package "rapports". */ public class ImprJasper { /** * @param nomDuRapport Le nom du rapport sans son extension .jasper * @param conn La connexion java.sql à la base de donnée * @param formatSortie "Aperçu","Imprimante","Tableur","HTML","PDF" * @param params Map des différents paramètres passés au rapport (ID_CLIENT par exemple) pour utilisation par le rapport * @param cheminFichierDeSortie chemin complet (avec extension) du fichier de sortie (HTML, Tableur, PDF). Indiquer null si Aperçu ou Imprimante */ public ImprJasper(String nomDuRapport, Connection conn, String formatSortie, Map<String, Object> params, String cheminFichierDeSortie){ params.put("SUBREPORT_DIR", "rapports/"); // on suppose que le package dans lequel se trouve le rapport est nommé "rapports" URL cheminRapport = getClass().getResource(nomDuRapport + ".jasper"); try { // chargement du rapport : JasperReport jasperReport = (JasperReport)JRLoader.loadObject(cheminRapport); // suppression de la pagination si format HTML (sinon on est au format A4 !!!) if (formatSortie.equals("HTML")) { params.put(JRParameter.IS_IGNORE_PAGINATION, Boolean.TRUE); } // calcul et mise en page du rapport avec utilisation des paramètres et de la connexion // l'objet jasperPrint contient le résultat JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, conn); // si le format de sortie est "Aperçu", le résultat est placé dans un JFrame (JasperViewer) qui fait un EXIT_ON_CLOSE par défaut // il faut donc passer le paramètre false pour empêcher l'arrêt de l'application après un aperçu if (formatSortie.equals("Aperçu")) { final JasperViewer Jv = new JasperViewer(jasperPrint,false); // le false empèche l'arrêt de l'application } if (formatSortie.equals("PDF")) { JasperExportManager.exportReportToPdfFile(jasperPrint, cheminFichierDeSortie); } // pour exporter au format HTML JasperExportManager crée un sous répertoire. // en cas de ré-exportation du rapport, il faut supprimer le sous-répertoire sinon ça plante if (formatSortie.equals("HTML")) { String NomRepHtml = cheminFichierDeSortie.subSequence(0, cheminFichierDeSortie.lastIndexOf(".")) + "_files"; File RepHtm = new File(NomRepHtml); if (RepHtm.exists()) { File[] Fichiers = RepHtm.listFiles(); for (File fichier : Fichiers) { fichier.delete(); } } RepHtm.delete(); JasperExportManager.exportReportToHtmlFile(jasperPrint, cheminFichierDeSortie); } if (formatSortie.equals("Imprimante")) JasperPrintManager.printReport(jasperPrint,false); if (formatSortie.equals("Tableur")) { JRXlsExporter exporter = new JRXlsExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, cheminFichierDeSortie); exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); exporter.exportReport(); } } catch (JRException ex) { ex.printStackTrace(); } } public void testImpression() { // exemple de sortie au format PDF du rapport "interventions" au format PDF pour l'équipement N°123 Connection conn = .... ; // la connexion à la base de données Map<String, Object> params = new HashMap<String, Object>(); params.put("id_equipement",123); new ImprJasper("interventions", conn, "PDF", params, "c:/Users/MaPomme/kika.pdf"); } }
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Bon j'ai tout fait:
j'ai télèchargé les jars de jasperreports
puis j'ai crée la library avec les jars
et j'ai ajouté les jars dans mon projet
j'ai crée le package avec la classe ImprJasper...
et maintenant il faut que j'ajoute un bouton dans le MenuGeneral pour que si je clique sur ce bouton le rapport se génère oubien???
parceque je vois toujours pas comment le lier a mon projet???
Ben oui, il faudrait faire un bouton ...
quant à l'endroit, cela dépend du rapport à générer ; c'est une simple question d'ergonomie
... dans le menu général ce n'est pratiquement jamais le cas (sauf pour des statistiques générales)
... dans la fiche "équipement" certainement :
exemple : un utilisateur veut imprimer toutes les interventions sur un équipement
(c'est le cas que tu as choisi dans ton état avec paramètre) alors sur ton JFrame "équipement", tu ajoutes un bouton.
Ce bouton crée un objet ImprJasper.
-> voir code exemple à la fin de la classe ImprJasper.
(à la place de 123 tu lui donnes l'ID_equipement bien sûr)
Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)
Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Partager