Cours 2

publicité
Cours 2
Contenu du cours :
"
"
"
"
"
"
"
"
"
"
OO avancé
Introduction aux GUI
un peu d’histoire : AWT et swing
swing
Les événements
Les composants textuels
Les boutons
Les gestionnaires de disposition
Les panneaux
Les fenêtres
Données et méthodes statiques
Données et méthodes statiques
Les méthodes et données statiques appartiennent aux classes
et sont utilisables sans créer d'objets de cette classe.
Il n’existe qu’une copie d’une variable statique, partagée par tous les objets
d’une classe.
Vie et mort des objets (1)
A l'intérieur d'une méthode statique, on ne peut
utiliser que les variables/méthodes statiques.
Mais l'inverse n'est pas vrai.
Vie et mort des objets (2)
Un objet est marqué « à détruire » lorsqu’il n’existe plus de référence sur lui.
La méthode finalize est exécutée lors de la destruction d’un objet.
La méthode System.gc suggère l’utilisation du ramasse-miette.
Vie et mort des objets (3)
Surcharge de méthodes (1)
Pour surcharger une méthode, il suffit d’écrire plusieurs versions de la méthode.
Chaque version a le même nom, mais une liste de paramètres différents.
(en anglais, on parle d’overloading)
Surcharge de méthodes (2)
Premier appel
Dans la version de la méthode pour les entiers !
Second appel
Dans la version de la méthode pour les chaîne !
POO
La programmation orientée objet permet:
√d'augmenter la réutilisabilité du logiciel
héritage
√la définition de fonctionnalités génériques
polymorphisme
√l'abstraction
penser en terme de classes, d'objets
L'héritage
Java
UML
MaSuperClass
e
On dit que :
:la classe MaClasse hérite de la classe MaSuperClasse
:la classe MaClasse dérive de la classe MaSuperClasse
:la classe MaClasse est une sous-classe de MaSuperClasse :(
:la classe MaClasse est une classe fille de MaSuperClasse
:la classe MaSuperClasse est la super classe de MaClasse
:(
:la classe MaSuperClasse est la classe mère de MaClasse
:la classe MaSuperClasse est la classe parent de MaClasse
MaClasse
La dérivation est une spécialisation.
Il n'y a pas d'héritage multiple, une classe ne peut avoir
qu'une seule et unique classe super classe.
On parle de super classe directe et indirecte.
L'héritage
Animaux
Vertébrés
Animaux
Chiens
Vertébrés
Chiens
Une classe représente un ensemble .
Une classe fille représente un sous ensemble
de l'ensemble représenté par sa classe mère.
L'héritage
L'héritage
La classe fille hérite des fonctionalités de sa classe mère.
Elle hérite de ses données membres et de ses méthodes.
L'héritage
Une classe fille n'a pas accés à toutes les
variables ou à toutes les méthodes de sa
classe mère.
Elle a accès aux propriétés déclarées:
:public
:protected
:package (si elles sont dans le même
package)
Elle n'a pas accès aux propriétés déclarées :
/private
L'héritage définit un nouveau mode de masquage de données,
et il respecte la philosophie du masquage des données privées.
Les membres hérités conservent le même niveau de visibilité.
Accessibilité des données
Modificateur
d'accès
Accessible à
la classe
Accessible à
une classe du
même package
Accessible à
une classe
fille
Accessible à
tous
public
Oui
Oui
Oui
Oui
protected
Oui
Oui
Oui
Non
package
Oui
Oui
Non
Non
private
Oui
Non
Non
Non
Hiérarchie
Objets
Animaux
Vertébrés
Chiens
La hiérarchie est l'ensemble des liens d'héritage.
java.lang.Object est la classe mère par défaut.
En java, toutes les classes dérivent de la classe java.lang.Object.
GUI (1)
GUI (1)
Comment faire « scroller » le contenu d’un JOptionPane ?
GUI (2)
GUI (3)
Les événements en java ....
GUI (4)
événement
composant
Composants de base et événements
GUI (5)
Les événements en java ....
GUI (6)
événement
composant
Composants de base et événements
GUI
GUI signifie Interface Utilisateur Graphique.
Une GUI est basée sur des composants réutilisables.
Swing
La hiérarchie de swing est basée sur l'AWT afin de profiter
des mécanismes définis dans l'AWT par héritage.Les
packages de swing se trouvent dans javax.swing....
Composants de Swing
L'API swing propose un grand nombre de composants réutilisables.
Chaque famille de composants est décrite dans une classe de Swing.
Composants de Swing
La classe javax.swing.JLabel
Méthodes
public void setVisible(boolean b)
"public void setEnabled( boolean b )
"public void setSize(int w,int h)
"
public void setToolTipText(String s)
"public void setBorder(Border b)
"
public void setText(String s)
"public void setHorizontalTextPosition(int
i)
"
Tous les composants sont personnalisables.
Les classes de swing proposent des mécanismes
généraux de manipulation des composants (par l'héritage).
Composants de Swing
Un composant est un objet java comme les autres.
Il doit être instancié avec un constructeur,possède des
méthodes ....
Composants de Swing
La classe javax.swing.JFrame
Méthodes
public Container
getContentPane()
"public void setSize(int w,int h);
"public void show();
"
Une JFrame est un objet complexe.
Il délègue son rôle de « Container » à son ContentPane.
SwingConstants
L'interface
javax.swing.SwingConstants
L'interface SwingConstants définit des constantes qui sont
utilisées pour les dispositions dans Swing.
Les événements
?
Les événements sont un mécanisme qui permet au
programmes java de réagir aux actions de l'utilisateur sur
le GUI.
Les événements : écoute
L'écoute d'un événement se fait toujours selon le même
schéma.
Les événements : écoute
Les 3 phases de l'écoute d'un événement :
Création d'une classe d'écoute (un listener)
"
Implantation de la méthode qui nous intéresse dans la
classe d'écouteur.
"
Enregistrement d'une instance de la classe écouteur
auprès de la source de l'événement.
"
L'écoute d'un événement se fait toujours selon le même
schéma.
Les événements : source
Le composant JButton
possède une donnée
membre listenerList de
type EventListenerList
héritée de Component.
handle
r L'écouteur handler de type
Handler contient la méthode
public void actionPerformed(ActionEvent
evt)
car la classe Handler
implémente ActionListener.
listenerList
...
Le Handler est l'écouteur d'événement,
le JButton est la source de l'événement.
Les événements : source
Grâce à la méthode
public void addActionListener( ActionListener l)
la source s'assure que l'écouteur l possède la méthode
public void actionPerformed(ActionEvent evt)
avant de le mettre dans sa listenerList.
"
Pour déclencher son événement, la source n'a plus qu'à parcourir
tous les listeners de sa listenerList et appeler leur méthode
public void actionPerformed(ActionEvent evt)
où evt est un objet décrivant les spécificités de l'événement.(source,
genre,etc..)
"
Chaque source d'événement possède des méthodes
add<event>Listener et remove<event>Listener
où <event> représente le type d'évévenement qu'elle est capable
de générer.
"
Les événements sont étroitement liés au modèle d'héritage
de java.
Les événements : hiérarchie
Les événements sont eux aussi soumis à une hiérarchie.
Les événements : hiérarchie
Les interfaces d'écoute des événements sont, elles aussi,
hiérarchisées.
Les écouteurs : utilisation.
MouseListener :
écoute les cliks de souris, les pressions et les
relâchements de boutons.
"
MouseMotionListener :
écoute les déplacements de la souris et les drag.
AdjustementListener :
écoute les événements liés à des
ajustements (ex : scrollbar)
"
"
KeyListener :
écoute les événements de frappe de touches.
"
ItemListener :
écoute les événements de sélection
d'item dans une liste de choix.
"
ActionListener :
écoute les événements d'action.
Les événements d'action sont les
événements « attendus par défaut »
(ex click pour les butons, enter pour
les textfields....)
"
FocusListener :
" écoute les événements de focus (perte/gain)
"
WindowListener :
écoute les événements des fenêtres
(agrandissement, iconification...)
"
Component/ContainerListener :
écoute les événementsd'ajout, de
redimensionnement de composants
"
Les interfaces sont spécifiques à un type d'événement donné.
Mais rien interdit d'implémenter plusieurs interfaces dans vos Handler.
Les écouteurs : exemple.
Les écouteurs : utilisation.
Les écouteurs : utilisation.
Un handler implémentant une interface doit donner une
implémentation de TOUTES les méthodes de l'interface.
Handler implémente, ici, 2 interfaces.
Les composants textuels
javax.swing.text.JTextCompon
ent
javax.swing.JTextField
javax.swing.JTextAera
javax.swing.JPasswordFi
eld
La classe abstraite javax.swing.text.JTextComponent propose des
méthodes générales pour la gestion du undo, cut/copy/paste, polices...
Les composants textuels
Les composants textuels
Les JtextComponents envoie des actionEvent lorsque l'on appuie sur Entrée.
On utilise getText ou getPassword pour récupérer le contenu des champs.
Les boutons
javax.swing.JComponent
javax.swing.AbstractButto
n
javax.swing.JButton
javax.swing.JToggleButton
javax.swing.JCheckB javax.swing.JRadioButto
n
ox
Il existe une hiérarchie dans les boutons, de manière à regrouper tout le
code commun dans la classe AbstractButton et augmenter l'abstraction.
Les boutons
Les boutons
Les gestionnaires de disposition
Les LayoutManagers sont des objets permettant de gérer la disposition
des composants déposés dans un container, ils gérent aussi le
redimmensionnement.
Les gestionnaires de disposition
Les gestionnaires de disposition
Le borderLayout utilise des constantes pour placer les composants.
Par défaut, le composant est ajouté au centre.
Les panneaux
Les Jpanels sont utilisés comme des conteneurs swing ,
ils permettent de découper le conteneur qui les contient en zones...
Les panneaux
Les fenêtres
Les fenêtres génèrent des événements pour leur fermeture,
ouverture, iconisation, etc,...
Téléchargement