Les Java Beans… - Laboratoire I3S

publicité
Java Beans
„ http://java.sun.com/docs/books/tutorial/javabeans/index.ht
ml
Les Java Beans…
„ composants logiciels (généralement graphique) pouvant
être composés dynamiquement
Michel RIVEILL
[email protected] - http://rangiroa.essi.fr/riveill
Laboratoire I3S
2
Programmation par composants
Java Beans
JavaBeans
„ Objectif : permettre la programmation par composition
„ Bean : objet Java présentant certaines caractéristiques
dynamique
„
„
syntaxiques (pattern)
Beans = composants réutilisables (visuel ou non) pour les
plates-formes Java
Composition dynamique
„
„
„
„
Définition des attributs
Communication de type événement/réaction
Assemblage dynamique de composants
Visualisation en ligne de l’application réalisée
ƒ intéressant pour la construction d’une interface
„
Bean
Caractéristiques
„
„
„
„
Bean
Un bean exporte différentes propriétés (attributs publics)
Communication par événement
Chaque bean est persistant
Introspection : permet de découvrir dynamiquement les
propriétés de chaque bean
abonné_1
Source
event
event
Bean
event
event
3
abonné_2
4
Exposé court
(suite page 31)
Java Beans - propriétés
Java Beans - propriétés
„ Attributs publics pouvant être positionnés de l'extérieur
„ modes : read/write, read only ou write only
„ par d'autres beans ou par des outils (PropertyEditor)
„ portent par exemple sur :
„ Différents types de propriétés
„ simples
„ indexées : ensemble de valeur
„ liées - bound : un événement est notifié à chaque
modification de l’attribut
„ contraintes - constrained : notification du changement avec
vérification de la modification
„
„
la présentation (taille, couleur, position, …)
le comportement
„ Identification d'une propriété par des règles syntaxiques
„ setX(int i) et int getX() identifie la propriété X de type entier
„
„
„
mécanisme générique utilisé par les outils d’introspection
un autre Bean peut interdire la modification de la valeur
utilisation non transparente
5
6
Java Beans
Java Beans
„ Evénements
„ objets java héritant de java.lang.EventObject
„ envoyés vers des beans abonnés à cet événement
„ Evénements
„ objets java héritant de java.lang.EventObject
„ envoyés vers des beans abonnés à cet événement
„
Utilisation des Listener
„
Public
Publicinterface
interfaceEventListener
EventListener{{
void
handleEvent(Event
(Event e);
handleEvent
void handleEvent(Event
e);
}}
Source
Source
Abonné
é
Abonn
Abonné
„
Un bean souhaitant réagir à un événement, s’enregistre auprès
d ’un beans capable de générer cet événement
Utilisation des Listener
Source
Source
Public
Publicsynchronized
synchronized
addListener(
(Listener l)l)
addListener
addListener(Listener
implement
s
Abonné
é
Abonn
Abonné
Source.addListener(
(this);
Source.addListener
this);
Source.addListener(this);
Abonné
é
Abonn
Abonné
Abonné
é
Abonn
Abonné
7
8
Java Beans
Java Beans : introspection
Public
Publicinterface
interfaceEventListener
EventListener{{
void
(Event e);
handleEvent
voidhandleEvent(Event
handleEvent(Event
e);
}}
Source
Source
„ mécanisme d’introspection
„ convention de nommage
„
„
Public
Publicsynchronized
synchronized
addListener(
(Listener l)l)
addListener
addListener(Listener
utilisation de méthodes pour rechercher les attributs, les
événements, les méthodes
description explicites des méthodes, propriétés, événements
associés aux composants
Abonné
é
Abonn
Abonné
Source.addListener(
(this);
Source.addListener
this);
Source.addListener(this);
implements
handleEvent(e)
(e)
handleEvent
handleEvent(e)
Vector
VectorListeners
Listeners
Event
Event
Object
Object
Abonné
é
Abonn
Abonné
Event
Event
Object
Object
9
Java Beans : persistance
10
Java Bean : la BeanBox
„ Mise en œuvre
„ sauvegarde / restauration de l ’état à l ’aide de la
sérialisation Java
„ sauvegarde de l ’état après chaque modification d ’une
propriété
„ on peut choisir les propriétés qui seront sauvegardées
11
12
Exemple : construire un bean jauge
Ecriture d ’un bean (suite)
„ A chaque appel de la méthode progress (), la jauge
„ Ecriture de la méthode publique progress() qui incrémente
évolue :
le pointeur
public void progress(){
if(steps!=0){
theta = theta + (360/steps);
repaint();
}
}
„ Choix de l ’objet graphique a étendre : « component »
„ permet de créer des composants graphiques « légers »
„
„
(i.e. qui n ’ont pas de fenêtre opaque associé - voir doc awt)
public class Gauge extends Component {
„ Un bean a un constructeur sans paramètre :
public Gauge() {
super();
}
13
14
Ecriture d ’un bean
Ecriture d ’un bean
„ Déclaration des méthodes permettant l ’accès aux
„ Ecriture de la méthode paint () permettant de visualiser la
attributs :
progression du pointeur
„
Steps : nombre de pas pour faire le tour du cercle
„
MaximumSize
„
„
lecture et écriture
lecture seulement
public void setSteps
(int steps){
this.steps=steps;
progress();
}
public int getSteps(){
return steps;
}
public Dimension
getMaximumSize(){
return
new Dimension
(100, 100);
}
15
public void paint(Graphics g){
g.drawOval(0, 0, 100, 100);
g.drawLine(50, 50,
(int) (50+50*Math.cos(theta*Math.PI/180)),
(int) (50+50*Math.sin(theta* Math.PI/180))
);
}
„ C ’est fini… il faut compiler le bean jauge (voir manuel du
B.D.K)
16
Construire une petite application avec 3
beans
Tester le bean jauge
„ Charge le bean Timer
„ Placer les bean « Gauge », « OurButton » et « Timer » dans la
„ Charger le bean jauge (« Gauge ») dans la ToolBox
„ Placer le bean jauge (« Gauge ») dans la BeanBox, and
„
„
„
„
„
positionnner le nombre de pas à 10
Placer un bean « OurButton » dans la BeanBox
Avec le bean « OurButton » sélectionner, choisir dans le
menu Edit -> Events|mouseClick|buttonClicked, et tirer un
trait vers le bean jauge (« Gaude »)
Dans la boite de dialogue, sélectionner la méthode
progress()
Maintenant en cliquant sur le bouton, le pointeur avance
pour les 9 prochains clics.
Vous pouvez modifier le nombre de pas… et
recommencer
17
Java Beans : évaluation
„ Intégration
„
au niveau source (Java...)
„ Visualisation de l’application
„
„
mais pas de son architecture
intéressant pour des composants graphiques
„ Environnement ‘BeanBox’
„
outils d’aide à la construction (vision exécution)
ƒ possibilité d’éditer les propriétés, les méthodes, mais plus
difficilement les liens entre les Beans
„
n’est pas orienté vers les applications réparties
„ Environnement ‘professionnel’
„
„
Intègrent tous aujourd’hui la notion de Beans
Permettent presque tous la visualisation de l’architecture
19
BeanBox
„ Modifier le label du bean « OurButton » pour avoir « Start
„
„
„
„
„
Timer »
Lier l ’événement Events|mouseClick|buttonClicked associé au
bean « OurButton » à la méthode startTimer() du bean
« Timer »
Lier l ’événement Events|timer|timedOut du bean « Timer » à la
méthode progress() du bean « Gauge »
Selectionner le bean « Timer ». Positionner l ’attribut
« noOfTimeouts » à 10
Selectionner le bean « Gauge ». Positionner l ’attribut « steps »
à 10
Cliquer sur le bouton « Start Timer » et vous devez voir
progresser la jauge pendant les 10 prochaines secondes !
18
Téléchargement
Study collections