Académique Documents
Professionnel Documents
Culture Documents
g p q
-
Introduction
Université de Nice - Sophia Antipolis
Version 44.5.2
5 2 – 13/3/11
Richard Grin
Richard Grin Interface graphique 1
Contributions
• Des exemples de cette partie du cours sont
f
fortement inspirés
i i du d livre
li
Au cœur de Java 2
Volume I - Notions fondamentales
de Horstmann et Cornell
The Sun Microsystems Press
Java Series
• De nombreuses images proviennent du tutorial
en ligne d’Oracle (gratuit) :
http://download.oracle.com/javase/tutorial
Richard Grin Interface graphique 2
Pl de
Plan d cette
tt partie
ti
• Généralités
Gé é li é sur les
l interfaces
i f graphiques
hi
• Affichage
g d’une fenêtre
• Classes de base ; AWT et Swing
• Placer des composants dans une fenêtre
• Gestion des événements
• Modèle MVC ; exemple des listes
• Dessiner ; afficher une image
Wi d
Window JComponent P
Panel
l
Applet
Frame Dialog JWindow
JApplet
JFrame JDialog
Component
Composants Les composants
AWT de Swing sont
Container des containers
JComponent
• Chaque
q type
yp de container a un ggestionnaire de
placement par défaut
• On peut changer ce gestionnaire de placement
d’un Container par la méthode
setLayout(LayoutManager) de d la
l classe
l
Container
Source
Sou ce de laa classe
c asse Exécution
écu o
Richard Grin Interface graphique 61
FlowLayout
• Rangement de haut en bas et de gauche à droite
• Les composants sont affichés à leur taille
p
préférée
• layout manager par défaut de JPanel et
JApplet
• Attention, la taille préférée d’un container géré par un
Fl L
FlowLayout t estt calculée
l lé en considérant
idé t que tous
t les
l
composants sont sur une seule ligne
Box.createRigidArea(new Dimension(5,0))))
Box.createHorizontalGlue())
new Box.Filler(
new Dimension(5,100),
new Dimension(5,100),
new Dimension(Short.MAX_VALUE,100))
Richard Grin Interface graphique 79
Code avec Box
// Le plus simple est d'utiliser une Box
// mais on peut aussi mettre un BoxLayout
// pour gérer un autre container
Box b = Box.createVerticalBox();
b.add(bouton);
// O
On peut
t ajouter
j t d
des zones iinvisibles
i ibl
// entre les composants :
b add(Box createVerticalStrut(5));
b.add(Box.createVerticalStrut(5));
// ou b.add(Box.createRigidArea(
// new Dimension(5
Dimension(5, 15))
b.add(zoneSaisie);
• Placement horizontal :
groupe séquentiel (C1, C2,
groupe parallèle (C3, C4))
• Placement vertical :
groupe séquentiel (groupe parallèle (C1,
(C1 C2,
C2 C3),
C3)
C4)
Mauvais
Exercice
E i : donner
d 2 solutions
l i
• avec des composants emboîtés
• avec un GridBagLayout
Richard Grin Interface graphique 92
Traiter les événements :
l écouteurs
les é t
public Fenetre() {
. . . // ajout des composants dans la fenêtre
// Fenetre
t é
écoute
t lles composants
t
b1.addActionListener(this);
b2.addActionListener(this);
( )
tf.addActionListener(this);
. . .
}
Richard Grin Interface graphique 126
Exemple
e p e (suite)
(su e)
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
e getSource(); Suppose que
if (source == b1) { l’on est dans
... // action liée au bouton b1 la portée de b1
} qui contient une
else if (source == b2) { référence au
. . . // action liée au bouton b2 bouton
}
else if (source == tf) {
. . . // action liée au JTextField tf
}
. . . Risque de nombreux
} if … else
Modèle
< update < change
Evénements
getData >
Vue Contrôleur
< change
• donne une vue d’une • traite les événements
partie des données
• observe le modèle
Richard Grin Interface graphique 206
Architecture MVC
Modèle
< update < change
Evénements
getData >
Vue Contrôleur
(optionnel)
Modèle
< change
Evénements
getData >
Vue Contrôleur
< change
update >
Composant
p Ecouteurs
change
h >
< change
< getData
change >
M dèl
Modèle
< update update >
getWidth()
y
Richard Grin Interface graphique 244
Surface disponible pour ll’affichage
affichage
public void paintComponent(Graphics g) {
...
Insets insets = getInsets();
int largeurDisponible =
getWidth() - insets.left - insets.right;
int hauteurDisponible
p =
getHeight() - insets.top - insets.bottom;
...
/* Peindre dans le rectangle défini par
les points (insets.left, insets.height) et
(getWidth()-insets right getHeight()-insets
(getWidth()-insets.right, getHeight()-insets.bottom)
bottom)
*/
}
BufferedImage ImageIcon