Fi1-1-1-Swing-Interface Graphique-Short
Fi1-1-1-Swing-Interface Graphique-Short
Fi1-1-1-Swing-Interface Graphique-Short
Concepts Généraux
[email protected]
contrat Creative Commons Paternité-Pas d'Utilisation Commerciale-
Partage des Conditions Initiales à l'Identique 2.0 France License
GUI Toolkits / Boîtes à Outils
Les boîtes à outils 2D sont maintenant très
stéréotypées
3 composants
1 - Système de fenêtrage
2 - API graphique
3 - Gestion de l'arbre d'affichage et d'interaction
Organisation sous forme d'objets
2
1 - Systèmes de fenêtrage
Structurer l’espace d’affichage
Partager la ressource écran
Gestionnaire de fenêtres
interface
utilisateur
système de fenêtrage
3
1 - Système de fenêtrage
Accès partagé à l'écran
Subdivision de l'écran en fenêtres
Chaque fenêtre est positionné (x, y, z) et
dimensionnée (largeur x hauteur)
Modèle graphique d'affichage
Modèle d'événements
Communication entre les applications
Gestion de ressources spécifiques
4
1 - Modèles de fenêtrage
Sans superposition
Avec superposition
Hiérarchique
5
1 - Systèmes de fenêtrage
JTree JPanel
JPanel JToolbar
JRadioButton JButton
JRadioButton JButton
9
2 – Arbre Swing
JFrame
JMenuBar
13
Principales différences
Ilexiste un grand nombre de boîtes à
outils graphiques interactives (Graphical
User Interfaces ou GUI)
Langage / portabilité / performances /
mécanismes de communications /
extensibilité / rapidité de développement /
robustesse
Pas de "meilleur" mais des spécialisations
14
Les boîtes à outils graphiques
interactives de Java
Javapropose deux boîtes à outils
graphiques :
AWT (Abstract Window Toolkit), simple, petite
et limitée
SWING, cohérente, grosse et extensible.
15
Java et les interfaces graphiques
interactives
Langage conçu d'emblée avec une
interface graphique interactive
Ajout de mécanismes spécifiques pour les
interfaces
inner classes
2 interfaces et 2 modèles graphiques en
standard
Beaucoup d'exemples, de documentations
et d'expérience. 16
Conception d’IHM en Java
AWT
Java AWT
Interface indépendante de la plate-forme
API simple (simpliste)
Composants peu nombreux
Apparence pauvre
Relativement rapide
Similaire sur toutes les plate-formes
18
Organisation d ’AWT
Packages java.awt et java.applet
Classes de composants (dérivées de
Component)
Composants conteneurs
Composants « feuille »
22
Concepts de SWING
Basé sur des containers
générique
gère collection de composants
design Pattern composite
23
Programmation SWING
Package javax.swing
Relativement proche de AWT pour faciliter
la migration, ajout « J » avant le nom des
classes:
24
Construction d ’une application
Construire un arbre d ’objets dérivés de
« JComponent »
Attacher des gestionnaires d ’événements
Ce sont les gestionnaires d ’événements
qui feront les actions et modifieront les
composants
25
Exemple
import java.awt.*;
import javax.swing.*;
class hwSwing {
26
Autre approche
import java.awt.*;
import javax.swing.*;
Affichage
28
Arbre Swing
JFrame
JTree JPanel
JPanel JToolbar
JRadioButton JButton
JRadioButton JButton
29
Mon premier Composant
JFrame
fenêtre principale
JDialog
fenêtre de dialogue (modale)
Jwindow
show()
hide() ou dispose()
toFront() ou toBack()
setTitle(“titre !”) 30
31
JLabel
Javax.swing.Jlabel
descriptif
: texte statique + image
exemple : devant un champ de saisie
JLabel jl = new Jlavel(“Label 1”);
ou jl.setText(“Label 1”); // -> .getText()
jl.setIcon(new ImageIcon(“java.gif”));
jl.setVerticalTextPosition(SwingConstants.BOTTOM)
jl.setHorizontalTextPosition(SwingConstants.CENTER);
32
JTextField
Javax.swing.JTextField
saisie de texte (non typé)
JTextField jt = new JTextField(“Thomas”);
String nom = new String(“Thomas”);
jt.setText(nom);
jt.setColumns(nom.length());
jt.copy(); jt.cut(); jt.paste();
33
JButton
34
JmachinButton
JToggleButton
deux états (setIcon et setSelectedIcon)
JCheckBox
cases à cocher
JRadioButton
dans un groupe de boutons “radio”
35
Exemple de Radio
ButtonGroup grp = new ButtonGroup();
JRadioButton r1 = new JRadioButton(“it1”);
JRadioButton r2 = new JRadioButton(“it2”);
r2.setSelected(true);
grp.add(r1);
grp.add(r2);
36
Le modèle de bouton poussoir
Modèle utilisé pour les CheckBox,
RadioButton et Button
Plusieurs niveaux d ’utilisation
gère l’état du bouton, au repos, sous le
pointeur, appuyé et relâché.
Gère la notification vers les listeners
37
JComboBox
Listedéroulante (ouverte ou fermée)
vector ou tableau d’objets passés en
paramètres
JComboBox cb = new JComboBox( items);
cb.setMaximumRowCount(4);
cb.setEditable(true); // JTextField
38
JMenu
Une instance de JMenuBar par Jframe
setJMenuBar(JMenuBar mb);
Plusieurs Jmenu par JMenuBar
add(JMenu jm);
Plusieurs JMenuItem/JCheckboxMenu par
Jmenu
add(JMenuItem mi);
addSeparator();
Structurez !!!
39
JPanel
JPanel
conteneur
JScrollPane Panel
un seul composant !
barres de défilement
Tool bar
Internal frame
Layered pane
41
Composants de Swing
List
Slider
Table Text Tree
42
Capacités communes des
composants
(dés)activation
isEnabled() setEnabled(…)
(in)visible
setVisible(…) isVisible()
module le coût de l’instanciation d’un container !
45
Quelques difficultés à retenir
Conteneurs de fenêtre : ne pas ajouter
directement avec "add" mais ajouter avec
"getContentPane()"
Pas de multi-threading, sauf autorisation
explicite dans la documentation
46
La classe JComponent
Tool tip
Bords
Actions associées aux touches
Propriétés
Accès aux handicapés
Double buffer
47
Conception d’IHM en Java
Swing : la gestion du placement
des composants
Calcul du placement
Le placement est calculé dans les
conteneurs
Soit les composants sont placés
explicitement (x, y, largeur, hauteur)
Soit ils sont gérés par un
« LayoutManager » qui calcul ces
paramètres dynamiquement
besoinsdu composant (taille min, max,
normale) + positionnement relatif
49
Mise en place d ’un gestionnaire de
placement
Les conteneurs définissent la méthode
setLayout(layoutManager) pour changer le
gestionnaire par défaut
Le gestionnaire par défaut change d ’une
classe de conteneur à une autre
La méthode pack() déclenche le calcul du
placement
La méthode invalidate() rend le placement
courant invalide 50
Les gestionnaires de placement...
FlowLayout GridLayout
Place les composants Découpe en une grille
de gauche à droite régulière sur laquelle
les composants sont
CardLayout
placés
Superpose les
composants GridBagLayout
Découpe en une grille
et place les
composants sur une ou
plusieurs cases
51
...ou Layout Manager
BorderLayout
Découpe en 5 régions:
south, north, east, west,
center
Aucun : .setBounds(x,
y,h,l);
52
Conception d’IHM en Java
Conclusion sur Swing
Conclusion et perspectives
Java facilite la construction d’applications
graphiques interactives
Les APIs sont bien conçues
Plusieurs niveaux de complexité
Problèmes
performances parfois
complexité parfois
54