Florence Join – Patrice Ringot - Bruno Mériot INIST

publicité
IHM Java / Swing
4ème rencontre DevelopR6
Florence Join – Patrice Ringot - Bruno Mériot
INIST - CNRS
16 juin 2011
Plan
Introduction
Présentation d’IHM
Retour d’expérience
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Pourquoi Swing ?
Présentation applications
Architectures
Présentation Swing
Swing définition historique
Bibliothèque graphique écrite en java, faisant partie du package
Java Foundation Classes (JFC), inclus dans J2SE
1996 : JDK 1.0 Version initiale incluant AWT (Abstract Window Toolkit)
Composants utilisés associés à leurs équivalents dans le SE
Difficultés en terme de portabilité et d’extensibilité
1998 : J2SE 1.2 Intégration de l’API graphique Swing
Plus portable et plus flexible que AWT
Facile de personnaliser à la fois l’apparence et le comportement
Utilise le principe Modèle-Vue-Contrôleur
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Pourquoi Swing ?
Présentation applications
Présentation Swing
Swing architecture
le Modèle représente les données de l'application.
la Vue représente l'interface utilisateur,
n'effectue aucun traitement,
affiche les données que lui fournit le modèle.
le Contrôleur gère l'interface entre le modèle et le client
interprète la requête client,
synchronise le modèle et les vues,
génère des événements lors d'une modification du modèle,
indique à la vue qu'il faut se mettre à jour.
Tous les composants Swing héritent de la super-classe JComponent
et JComponent hérite de java.awt.Container.
Architectures
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Pourquoi Swing ?
Présentation applications
Architectures
Présentation Swing
Swing hiérarchie des classes
- Container
-JComponent
-JPanel
-JScrollPane
-JToolBar
-JSplitPane
-JTabblePane
-JlLayeredPane
-JInternalFrame
-AbstractButton
-JButton
-JMenuItem
-JCheckBoxMenuItem
-JRadioButtonMenuItem
-JToggleButton
-JCheckBox
-JRadioButton
- JComponent (suite)
-JComboBox
-JList
-JSlider
-JLabel
-JTooltip
-JProgressBar
-JTextComponent
-JTextArea
-JTextField
-JPasswordField
-jTextPane
-JHTMLPane
-JTable
-JTree
-JColorChooser
-JFileChooser
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Présentation Swing
Pourquoi Swing ?
Présentation applications
Architectures
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Présentation Swing
Pourquoi Swing ?
Présentation applications
Architectures
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Pourquoi Swing ?
Présentation applications
Présentation Swing
Les événements
Programmation par événement
Les composants sont des sources
Un écouteur s'abonne à une source
Un événements est déclenché par une action utilisateur
La source le passe aux abonnés
Les abonnés réagissent
Principale classe d'écouteur :
ActionListener
Listeners spécifiques :
MouseListener, MouseAdapter
KeyListener, KeyAdapter
WindowListener, WindowAdapter
Architectures
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Pourquoi Swing ?
Présentation applications
Présentation Swing
Le « look and feel »
Par défaut même aspect, quelque soit la plate-forme
CrossPlatformLookAndFeel
SystemLookAndFeel (LAF du système courant)
le LAF d'un autre système, si les licences le permettent
(le LAF Windows n'est pas disponible sur Linux)
Architectures
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Pourquoi Swing ?
Présentation applications
Architectures
Présentation Swing
Exemple HelloWord.java
import javax.swing.JFrame;
import javax.swing.JLabel;
public class HelloWorld {
public static void main(String[] args) {
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);
}}
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Pourquoi Swing ?
Présentation applications
Architectures
Présentation Swing
Pour résumer
!   100% java
!   palette de composants disponibles riche
!   respect de nombreuses bonnes pratiques de conception Orientée Objet (Design
Pattern)
!   look and feel complètement adaptable
!   communication par événements
!   fait partie d’un framework plus ambitieux, Java Foundation Classes (JFC),
qui inclut le glisser-déposer, copier-coller, l’affichage et les animation 2D (Java 2D),
le traitement d’images (Java Advanced Imaging),
ainsi que les impressions en qualité PostScript…
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Pourquoi Swing ?
Présentation applications
Architectures
Pourquoi avoir choisi Swing ?
Framework solide
!   Pérenne (Sun – Oracle)
!   Technologie éprouvée, une base de bugs bien entretenue 
!   Communauté d’utilisateurs nombreuse et réactive
Adaptable
!   Il existe souvent une solution pour façonner quelque chose qui n’existe
pas en standard
Adapté au fonctionnement en entreprise
!   Une solution (JavaWebStart) pour la distribution et la mise à jour
!   Un Framework disponible en standard avec chaque JRE
Forte dominante Java préexistante
!   Existant outils / librairies métier / interfaces en Java
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Pourquoi Swing ?
Présentation applications
Architectures
Applications internes et externes
Référentiel Documentaire
Chaîne Documentaire
Centralise les données documentaires
24 millions de références
Gestionnaire du Référentiel Documentaire
Interroger et gérer le contenu du Référentiel
Utilisé quotidiennement en interne / 200 collaborateurs
Plate-forme
Référentiel
Référentiel
documentaire
documentaire
IHM
Production de BD bibliographiques
Saisie de catalogage et analyse par classification et indexation
Gestionnaire de BD bibliographiques
Interroger et gérer le contenu des bases
Utilisé / des unités et des chercheurs du CNRS, des étudiants et des
réseaux thématiques
Introduction
Présentation IHM
Retour d’expérience
Présentation Swing
Pourquoi Swing ?
Présentation applications
Architectures
Architecture / Technologies utilisées
INIST
Serveur coopérants
________________
JBoss(JDBC)
Servlets
Référentiels,
Vocabulaires
Catalogage
jdbc
Référentiel
Documentaire
PostgreSQL
https
Serveur sur site
Serveur
BGI
______________
Catalogage
avec
Mots-clés
JBoss(EJB/JPA)
Lucene
ejb
https
JBoss (EJB/JDBC)
Servlets
Oracle
Java
ejb
IHM mode client/serveur
Java/Swing
Metadata
H2
H2
IHM mode non connecté
Java/Swing
JPA/Lucene
Introduction
Présentation IHM
Retour d’expérience
Démonstration
Démonstration
Introduction
Présentation IHM
Retour d’expérience
Introduction
Retour d’(in)expérience …
Some like it hot (Billy Wilder) certains l’aiment chaud

-­‐ Nobody is perfect. Jack Lemon -­‐ But I’m a man ! Tony Cur7s Introduction
Présentation IHM
Retour d’expérience
Introduction
Java: influence de la version de la JVM
Java: influence de la version de la JVM
!   Chaque version de Java apporte son lot de bugs
► La fiabilité de l’applicatif dépend aussi de la version de la JVM de
l’utilisateur, surtout en ce qui concerne Swing
!   On peut aussi écrire du code Swing que l’on pense valide et qui se révèle être une
bombe à retardement suite à une évolution/correction de bug dans la librairie
Swing
► Si possible il est préférable de travailler avec une JVM validée pour son
applicatif.
Introduction
Présentation IHM
Retour d’expérience
Introduction
Java
JavaWebStart (installation / mise à jour des interfaces)
JavaWebStart: une bonne idée, pas mal de problèmes
!   Marchait à peu près bien en Java 1.5
!   Composant retravaillé par Sun en Java 6 pour préparer l’arrivée de JavaFX ce
qui a engendré des problèmes en tous genres
► Après l’avoir utilisé pendant des années, on a décidé de s’en passer et prendre à
notre charge le déploiement et la mise à jour de notre applicatif et d’embarquer sa
JVM.
Introduction
Présentation IHM
Retour d’expérience
Java
JavaWebStart
Multi plateformes
Write once, run everywhere … but with caution !
MacOS
!   Nécessite une couche Java spéciale pour être conforme avec ce qu’est un
applicatif MacOS (ex: fermeture applicatif)
MacOS/Linux/Windows
!   Problèmes de rendu graphique: il est préférable de valider ses écrans sur les trois
plateformes, sous peine d’avoir des surprises
Introduction
Présentation IHM
Retour d’expérience
JavaWebStart
Multi plateformes
Gestion des bugs
Gestion des bugs
Contexte: livraisons assez fréquentes (mensuelle ou bi mensuelle) à des utilisateurs
« projet » (qui n’ont pas que cela à faire), avec release notes.
A bien fonctionné au début: retours réguliers, notamment par des bugs ou demande
d’évolution référencés dans Mantis.
Puis les retours formalisés se sont estompés et se sont transformés en mail et les tests
systématiques ont naturellement baissé en intensité.
Certains bugs ont mis des années avant d’être mis en évidence (un testeur de métier
les aurait découvert rapidement).
Problème: pas de cellule de test …
Introduction
Présentation IHM
Retour d’expérience
Multi plateformes
Gestion des bugs
Automatisation des tests
Automatisation des tests
Comment optimiser l’effort de test des utilisateurs ? Moins les solliciter …
Utilisation de FEST/Swing, Framework de tests fonctionnels
!   « tenir » le produit pour ne pas régresser
!   Ne solliciter l’utilisateur que pour les nouveautés
!   Tâche au long cours qu’il vaut mieux intégrer dès le début …
Introduction
Présentation IHM
Retour d’expérience
Gestion des bugs
Automatisation des tests
Les bugs invisibles
Les bugs invisibles
Les retours de bugs (RuntimeException) sont beaucoup plus rares de la part des
utilisateurs finaux, d’autant plus s’ils n’ont pas participé à la conception de l’interface et
qu’ils n’ont pas été formés !
Pour qu’un retour ait lieu, il faut vraiment que l’utilisateur soit bloqué.
Les bugs intermittents (ceux qui donnent une mauvaise impression …), eux, ne sont
quasiment pas signalés.
Une solution qui a fait ses preuves: un rapport est envoyé au serveur au prochain
démarrage du client après l’apparition d’un bug (pas besoin que l’utilisateur coopère).
Introduction
Présentation IHM
Retour d’expérience
Automatisation des tests
Les bugs invisibles
Internationalisation et Localisation
Internationalisation (I18N) et localisation (L10N)
Il est recommandé de prévoir l’internationalisation de l’applicatif dès sa conception,
même si cela ne semble vraiment pas nécessaire au départ.
► I18N/L10N à postériori pour 2100 messages = effort non négligeable …
Introduction
Présentation IHM
Retour d’expérience
Les bugs invisibles
Internationalisation et Localisation
Apprentissage / Aide utilisateur
Apprentissage / Aide utilisateur
Plus un applicatif est riche et moins l’exhaustivité de ces fonctionnalités est connu.
Le manuel utilisateur ne suffit pas
!   Il est rassurant de le posséder … mais il est rarement utilisé …
!   Et pourtant il est indispensable et couteux
Ce que nous aurions du faire
Utiliser un format de documentation plus structuré (Docbook à la place de Word puis
FrameMaker)
!   facilement packageable et utilisable (HTML),
!   accessible en mode recherche directement dans l’interface (Lucene),
!   accessible en contexte
► Valoriser au mieux l’effort consacré au manuel
Utiliser des screencasts (éviter les déperditions d’information et l’instauration de
mauvaises pratiques).
Introduction
Présentation IHM
Retour d’expérience
Internationalisation et Localisation
Apprentissage / Aide utilisateur
Aller sur le terrain !
Aller sur le terrain !
Il faut aussi aller voir les utilisateurs finaux (ceux qui ne s’expriment pas pendant le
développement initial, mais qui utilisent quotidiennement le logiciel).
!   Détecter les mauvaises pratiques
!   Récolter de nouvelles fonctionnalités
Introduction
Présentation IHM
Retour d’expérience
Fin
Fin
Questions ?
Téléchargement