SlideShare a Scribd company logo
1 of 62
Download to read offline
Interfaces Graphiques	

Les Composants
Jean-Baptiste.Yunes@univ-paris-diderot.fr	

Université Paris Diderot	

©2014
Composants / Containers
• Interface	

• une interface est obtenue par
agrégation de composants	

• des emboîtements successifs de	

• boîtes (containers)	

• objets (composants simples)
Component
Container
*
2
Composants / Containers
• Donc deux types d’objets GUI	

• les composants	

• les containers	

• qui sont aussi des composants...
Component
Container
*
3
Composants / Containers
• (bizarrerie?) Swing	

• les JComponents Swing sont
des Container AWT…	

• il n’est pas conseillé de les utiliser
comme tels… sauf dans le cas des
containers Swing…
Component
Container
*
JComponent
4
Panorama (non-exhaustif) aka les-terres-du-milieu.java in JTolkien package
5
Component
Container
JComponentPanel
Applet
JApplet
ScrollPane Window
Dialog Frame JWindow
FileDialog JDialog JFrame
AbstractButton
JButton JMenuItemJToggleButton
JMenu
Box
JCheckBoxMenuItem JRadioButtonMenuItem
JCheckBox JRadioButton
JColorChooser JComboBox
JFileChooser JInternalFrame
Button
Label
Canvas
Checkbox
Choice
List
Scrollbar
TextComponent
TextArea
TextField
JLabel
JLayeredPane
JList
JMenuBar
JOptionPane
JPanel
JPopupMenu
JProgressBar
JRootPane
JScrollBar
JScrollPane
JSeparator
JSlider
JSpinner
JSplitPane
JTabbedPane
JTable
JTextComponent
JToolBar
JToolTip
JTree
JViewport
JTextFieldJTextAreaJEditorPane
JTextPane JFormattedTextField JPasswordField
MenuComponent
MenuItemMenuBar
CheckboxMenuItem Menu
PopupMenu
Mordor
Eriâdor
One Class to rule them all
One Ctrl-F to find them
One Swing to bring them all
and in the GUI bind them,
In the Land of Java where the Objects lie.
Component
• Les composants (awt.Component) :	

• un nom (name)	

• une taille et position (x/y/width/height -
size/location)	

• visible ou non (visible)	

• réceptacle de divers événements	

• Il est très important de rendre visible les
composants sous peine d’invisibilité…
6
Container
• Les containers (awt.Container) :	

• des méthodes de gestion de la relation
d’agrégation Container/Composant	

• add/remove/getComponent/
getComponentCount/getComponentAt/
getComponents…	

• des méthodes de gestion de la disposition (layout)	

• une police par défaut (font)
7
JComponent
• Les composants Swing (swing.JComponent) :	

• support pour une apparence dynamique (pluggable
look-and-feel)	

• amélioration de la gestion du clavier	

• support pour info-bulles	

• support pour l’accessibilité	

• support pour stockage de propriétés spécifiques	

• support amélioré pour le dessin (double-buffering,
bords)
8
• désormais et sauf exception nécessaire, nous ne
préoccuperons plus que de Swing…
9
JComponent
• Quelques propriétés des JComponents :	

• opaque (boolean)	

• background/foreground (Color)	

• font (Font)	

• toolTip (String)	

!
• illustration avec un JLabel (JComponentExemple.java)	

• précaution : rendre le JLabel opaque car par
défaut son fond est transparent…
10
Containers
• Les Containers	

• des boîtes (2D)	

• ont pour rôle de contenir d’autres composants
11
Containers racine
• Containers racine	

•JApplet!
•JDialog!
•JFrame!
•JWindow!
• au moins un par application	

• manipulables directement par le window manager
12
Containers racine
• JFrame vs JWindow	

• décoration...	

• JDialog ?	

• en général utile dans le contexte d’une autre
fenêtre, on verra plus tard…	

• JApplet ?	

• embarqué (navigateur, appletviewer…)
13
Containers racine
JFrameExemple.java
•JFrame(String title)!
• contient un unique JRootPane!
• peut être remplacé	

• ne peut être enlevé	

• peut être associée à une JMenuBar
14
Containers racine
JWindowExemple.java
•JWindow() / JWindow(Frame owner) /
JWindow(Window owner)!
• contient un unique JRootPane	

• peut être remplacé	

• ne peut être absent	

• pas de barre de menu…
15
Containers racine
JAppletExemple.html
•JApplet!
• contient un unique JRootPane	

• peut être remplacé	

• ne peut être absent	

• pas de barre de menu...
16
Containers racine
• Rappel : les containers racines peuvent être visibles
ou non :	

•setVisible(boolean)!
• il ne faut pas oublier des les rendre visibles sous
peine d’invisibilité…	

• il ne faut pas les rendre visible trop tôt! Pour éviter
des effets désagréables de construction visible de
l’interface et de performances…
17
Containers racine
• JWindow, JFrame	

• des capsules pour un container utilisateur	

• le container principal (JRootPane) est accessible
via	

•Container getContentPane()!
•setContentPane(Container)
18
Containers
• Containers ordinaires	

•JPanel!
•JScrollPane!
•JSplitPane!
•JTabbedPane!
•JToolBar!
• permettent la division d’un espace existant	

• ne sont utilisables que dans d’autres containers
19
Containers
• Les containers ordinaires	

• un espace de rangement d’autres composants,
l’agrégation vit grâce à :	

• add(Component) / remove(Component)	

• comment les composants sont-ils rangés/placés ?	

• comme on veut… on le verra plus tard…
20
JPanel
•JPanel!
• le plus simple, un espace rectangulaire	

• un simple panneau d’affichage
JPanelExemple.java
JPanelExemple2.java
21
JScrollPane
•JScrollPane!
• une fenêtre sur un espace rectangulaire déplaçable
JScrollPaneExemple.java
22
JSplitPane
•JSplitPane!
• divise un espace verticalement ou
horizontalement en deux parties dont la somme
est l’espace entier
JSplitPaneExemple.java
23
JTabbedPane
•JTabbedPane!
• une pile d’espaces tous de même dimension
24
JTabbedPaneExemple.java
JToolBar
•JToolBar!
• un espace linéaire de rangement	

• utilise des Actions
25
Containers
• Containers spéciaux :	

•JRootPane!
•JLayeredPane!
•JInternalFrame!
•JDesktopPane!
• Leur usage est plus anecdotique ou technique…
26
JRootPane
•JRootPane!
• on ne les crée jamais soi-même	

• les containers racine s’occupent d’en fournir	

• leur structure est très particulière…
27
JLayeredPane
•JLayeredPane!
• autorise la superposition « en Z-stack » de
différent panneaux à usages particuliers…
contentPane
menuBar
défaut
toolBar
palettes
modales internes
popups
drag’n’drop
28
JInternalFrame - JDesktopPane
•JInternalFrame!
• autorise la création de frames internes, c’est-à-
dire de fenêtres à l’intérieur d’une autre	

•JDesktopPane!
• une version spéciale de JInternalFrame
adaptée pour gérer des fenêtres internes multiples
29
Containers : Menu
• Les menus	

•JMenuItem!
• un choix dans un menu	

•JMenu!
• un container dédié qui hérite de JMenuItem	

•JMenuBar!
• un container dédié à l’accueil de menus
JMenuItem
JMenu
*
JMenuBar
*
30
Containers : Menu
JMenuExemple.java
• Attention	

• une seule barre de menu par container racine
(setJMenuBar(JMenuBar))	

• le placement de la barre n’est pas contrôlable
(WindowManager dépendant)	

• pas de layout modifiable
31
Containers : Menu
JSeparatorExemple.java
• Les séparation logiques entre groupes d’items
peuvent être obtenues par utilisation de	

!
•JSeparator
32
• Si le container est visible	

• validate() permet d’obtenir un replacement
correct de tous les composants après ajout de
nouveaux composants	

• Container racine	

• pack() permet d’obtenir un rangement optimal
33
Composants
• Les Composants	

• proposent une interaction avec l’utilisateur	

• affichage	

• interaction en entrée	

• les deux combinés
34
Composants
• Les composants :	

• peuvent être actifs ou non, i.e. autorisent
l’interactivité	

•setEnabled(boolean)!
•boolean getEnabled()!
• l’effet obtenu est en général un grisé
JButtonExemple.java JButtonDisabledExemple.java
35
Composants
• Composants simples non-interactifs	

•JLabel!
•JProgressBar!
•JSeparator!
•JToolTip!
• fournissent une information à l’utilisateur
36
Composants
JLabelExemple.java JLabelIconeExemple.java
•JLabel!
• permet d’afficher une icône et/ou un texte	

• supporte un sous-ensemble de HTML 3.2
37
Composants
ProgressMonitorExemple.java
•JProgressBar!
• permet de rendre compte d’une progression	

• cousins : ProgressMonitor /
ProgressMonitorInputStream
38
JProgressBarExemple.java
Composants
• Composants interactifs simples :	

• Boutons	

•JButton!
•JMenuItem!
•JCheckBox JCheckBoxMenuItem!
•JRadioButton JRadioButtonMenuItem!
•JToggleButton!
• Listes	

•JComboBox!
•JList!
• Texte	

•JTextField JFormattedTextField/JPasswordField!
• Divers	

•JSlider!
•JSpinner
39
Boutons
• Les boutons (AbstractButton) peuvent être
regroupés logiquement via des ButtonGroup	

• cela n’a vraiment de sens que pour les boutons
qui ont un état de sélection	

• donc ni JButton, ni JMenuItem!
• le plus souvent utilisé avec les RadioButton!
• Les ButtonGroup permettent de contrôler
l’exclusion mutuelle lors de sélection
40
ButtonExemple.java
Boutons
• Les listes	

• Attention depuis Java SE 1.7 ces classes sont
génériques…	

• Les JComboBoxs peuvent être éditables	

• on verra plus tard comment personnaliser les
rendus de ces objets… Les curieux peuvent aller
jeter un œil sur ListCellRendererE
41
ListeExemple.java
Texte
• Les champs de saisie de texte	

• ordinaire	

• mot de passe (saisie masquée)	

• champ formatés (date, etc)
42
TexteExemple.java
Divers
• Le slider	

• un curseur sur une règle	

• les graduations peuvent être activées ou non
(mineures/majeures)	

• Le spinner	

• la roulette (attention son aspect graphique n’est
pas celui généralement attendu…)
43
SliSpiExemple.java
Composants
• Composants avancés (complexes, i.e. plus d’une
interaction) :	

•JColorChooser!
•JEditorPane!
•JTextPane!
•JFileChooser!
•JTable!
•JTextArea!
•JTree!
• On les étudiera plus tard…
44
Layouts
• Les Layouts	

• algorithmes de placement de composants dans
des containers...	

• problème : ranger des bagages dans un coffre
45
Layouts
• on peut toujours essayer de ranger les éléments soi-
même mais c’est généralement non-portable…	

• on peut choisir la politique de placement associée à
un container donné	

!
• méthode setLayout(LayoutManager)
46
Layouts
• Layouts de base	

!
• AWT	

!
•BorderLayout!
•CardLayout!
•GridLayout!
•GridBagLayout!
•FlowLayout!
!
!
!
!
!
• Swing	

!
• BoxLayout	

• GroupLayout	

• OverlayLayout	

• ScrollPaneLayout	

• SpringLayout	

• ViewportLayout
47
Layouts
BorderLayoutExemple.java
•BorderLayout!
• par défaut dans :	

• les JRootPane des JWindow	

•les contentPane des JFrame!
• Cinq composants au plus : nord, sud, est, ouest,
centre	

• conserve dynamiquement son aspect	

• retaille les composants si nécessaire
48
Layouts
BoxLayoutExemple.java
•BoxLayout!
• par défaut dans les Box	

• les composants sont rangés horizontalement ou
verticalement dans des espaces tous de même
taille	

• ne retaille pas les composants
49
Layouts
GroupLayoutExemple.java
•GroupLayout!
• permet d’obtenir des effets d’alignement	

• ne retaille pas les composants	

• un poil complexe à utiliser
50
Layouts
OverlayLayoutExemple.java
•OverlayLayout!
• superpose des composants comme CardLayout	

• mais autorise la visualisation/manipulation par
transparence…
51
Layouts
SpringLayoutExemple.java
•SpringLayout!
• exprime des contraintes entre composants	

• simple en apparence…
52
Internationalisation
53
Internationalisation
• Régionalisation (Localization) l10n	

• adaptation d’une application aux caractéristiques
culturelles locales	

• travail de l’ordre de la traduction	

• Internationalisation (Internationalization) i18n	

• processus de développement conduisant à
produire une application localisable	

• travail spécifique de développement
54
Internationalisation
• Idée (simple)	

• ne pas afficher un message en dur	

• utiliser une fonction réalisant la traduction
adéquate en fonction d’un environnement donné
55
Internationalisation
• java.util.ResourceBundle!
• une classe d’encapsulation de données
régionalisées, la sélection des données est opérée
par un ResourceBundle.Control	

• des méthodes pour obtenir les messages depuis
une liste (une classe adéquate ou un fichier
adéquat)
56
Internationalisation
• Récupérer des données régionalisées depuis un
fichier	

•ResourceBundle.getBundle(String name)!
• le fichier recherché aura pour nom	

• name + suffixe régionalisé + “.properties“	

• ex : Messages_fr_FR.properties!
• possibilité d’internaliser le Bundle...
57
Internationalisation
• Récupérer la traduction d’un terme	

•unResourceBundle.getString(String clé)!
• permet de récupérer la chaîne associée à la
clé donnée, et ce dans la base précédemment
sélectionnée
58
Internationalisation
• Internationalisation	

• MacOSX	

• préférences système	

• Windows	

• préférences système	

• Unix	

• environnement : LANG, LC_*!
• dans Eclipse : sélection possible dans
Run Configurations... ➧ Environment
InternationalisationExemple.java
59
Mnémoniques
• Les menus et la navigation au clavier	

• on peut associer aux menus, items et boutons un
mnémonique	

• une lettre (associée à un modificateur en général ALT)
permettant de se placer (naviguer) et sélectionner l’objet
associé	

• attention, l’action associée n’est pas réalisée (RET)	

• ce n’est pas un raccourci!	

• un raccourci permet de déclencher l’action associée à un
objet d’interface sans passer par l’objet	

• c’est de l’accessibilité	

• La RFC 1345 est dédiée au sujet « Character Mnemonics 
Character Sets »
60
Mnémoniques
• pour associer un mnémonique	

•setMnemonic(int)!
• l’entier est normalement l’identité d’une touche
du clavier	

•java.awt.event.KeyEvent.VK_*!
• si le caractère est présent dans le texte affiché
par l’objet associé, ce caractère est souligné
par l’interface
61
MnemmoniquesExemple.java
Raccourcis
• un raccourci permet de déclencher l’action associée
à un objet d’interface sans passer par l’objet	

• c’est de l’ergonomie	

•setAccelerator(KeyStroke)!
• pour l’observer, il faut être capable d’associer des
actions à des objets d’interface (très bientôt
traité…)
62

More Related Content

Viewers also liked

Bac1 20122013 01
Bac1 20122013 01Bac1 20122013 01
Bac1 20122013 01mariiaaa
 
SALUD Y ENFERMEDAD
SALUD Y ENFERMEDADSALUD Y ENFERMEDAD
SALUD Y ENFERMEDADBIO LBL
 
Escrito Resumen De Tecnica 90
Escrito Resumen De Tecnica 90Escrito Resumen De Tecnica 90
Escrito Resumen De Tecnica 90guest16a7
 
CAL Insurance Properties
CAL Insurance PropertiesCAL Insurance Properties
CAL Insurance Propertieseddiered
 
Evaluación ptolomeo claudius tetrabiblos
Evaluación ptolomeo claudius   tetrabiblosEvaluación ptolomeo claudius   tetrabiblos
Evaluación ptolomeo claudius tetrabiblosAdalberto
 
Proyecto De Ordenanza Para La PreservacióN Del Edificio
Proyecto De Ordenanza Para La PreservacióN Del EdificioProyecto De Ordenanza Para La PreservacióN Del Edificio
Proyecto De Ordenanza Para La PreservacióN Del EdificioSilvanaCorso
 
Créations 2011
Créations 2011Créations 2011
Créations 2011elodie67
 
Les tablettes - Quels usages In-Store & Out-Store
Les tablettes - Quels usages In-Store & Out-StoreLes tablettes - Quels usages In-Store & Out-Store
Les tablettes - Quels usages In-Store & Out-StoreSolange Derrey
 
Lettre premier ministre 10 11-14
Lettre premier ministre 10 11-14Lettre premier ministre 10 11-14
Lettre premier ministre 10 11-14Luxemburger Wort
 
5 verbos a usar
5 verbos a usar5 verbos a usar
5 verbos a usarAdalberto
 
Maestria CurríCulum 4 Makarenko Anton Makarenko
Maestria  CurríCulum 4 Makarenko Anton MakarenkoMaestria  CurríCulum 4 Makarenko Anton Makarenko
Maestria CurríCulum 4 Makarenko Anton MakarenkoAdalberto
 
Créations.2011
Créations.2011Créations.2011
Créations.2011elodie67
 

Viewers also liked (20)

Quesreppol sne
Quesreppol sneQuesreppol sne
Quesreppol sne
 
Bac1 20122013 01
Bac1 20122013 01Bac1 20122013 01
Bac1 20122013 01
 
SALUD Y ENFERMEDAD
SALUD Y ENFERMEDADSALUD Y ENFERMEDAD
SALUD Y ENFERMEDAD
 
R artuso vf
R artuso vfR artuso vf
R artuso vf
 
Guerrilleros n° 135
Guerrilleros n° 135Guerrilleros n° 135
Guerrilleros n° 135
 
Escrito Resumen De Tecnica 90
Escrito Resumen De Tecnica 90Escrito Resumen De Tecnica 90
Escrito Resumen De Tecnica 90
 
CAL Insurance Properties
CAL Insurance PropertiesCAL Insurance Properties
CAL Insurance Properties
 
Organizadores visuales copia
Organizadores visuales   copiaOrganizadores visuales   copia
Organizadores visuales copia
 
Evaluación ptolomeo claudius tetrabiblos
Evaluación ptolomeo claudius   tetrabiblosEvaluación ptolomeo claudius   tetrabiblos
Evaluación ptolomeo claudius tetrabiblos
 
ucv
ucvucv
ucv
 
Proyecto De Ordenanza Para La PreservacióN Del Edificio
Proyecto De Ordenanza Para La PreservacióN Del EdificioProyecto De Ordenanza Para La PreservacióN Del Edificio
Proyecto De Ordenanza Para La PreservacióN Del Edificio
 
Chiffres clés
Chiffres clésChiffres clés
Chiffres clés
 
Créations 2011
Créations 2011Créations 2011
Créations 2011
 
Les tablettes - Quels usages In-Store & Out-Store
Les tablettes - Quels usages In-Store & Out-StoreLes tablettes - Quels usages In-Store & Out-Store
Les tablettes - Quels usages In-Store & Out-Store
 
Lettre premier ministre 10 11-14
Lettre premier ministre 10 11-14Lettre premier ministre 10 11-14
Lettre premier ministre 10 11-14
 
Empleate y ocupate
Empleate y ocupateEmpleate y ocupate
Empleate y ocupate
 
5 verbos a usar
5 verbos a usar5 verbos a usar
5 verbos a usar
 
Maestria CurríCulum 4 Makarenko Anton Makarenko
Maestria  CurríCulum 4 Makarenko Anton MakarenkoMaestria  CurríCulum 4 Makarenko Anton Makarenko
Maestria CurríCulum 4 Makarenko Anton Makarenko
 
Photo roman
Photo romanPhoto roman
Photo roman
 
Créations.2011
Créations.2011Créations.2011
Créations.2011
 

Similar to Les composants de Swing

Java- LT informatique
Java-  LT informatiqueJava-  LT informatique
Java- LT informatiqueHassanChaaban
 
Spring Batch 17-05-2011
Spring Batch 17-05-2011Spring Batch 17-05-2011
Spring Batch 17-05-2011Normandy JUG
 
Composants base
Composants base Composants base
Composants base luski chaka
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 

Similar to Les composants de Swing (8)

Introduction aux interfaces.
Introduction aux interfaces.Introduction aux interfaces.
Introduction aux interfaces.
 
Swing
SwingSwing
Swing
 
Java- LT informatique
Java-  LT informatiqueJava-  LT informatique
Java- LT informatique
 
Spring Batch 17-05-2011
Spring Batch 17-05-2011Spring Batch 17-05-2011
Spring Batch 17-05-2011
 
Composants base
Composants base Composants base
Composants base
 
JavaSwing.pdf
JavaSwing.pdfJavaSwing.pdf
JavaSwing.pdf
 
Presentation de gwt maven
Presentation de  gwt mavenPresentation de  gwt maven
Presentation de gwt maven
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 

Les composants de Swing

  • 2. Composants / Containers • Interface • une interface est obtenue par agrégation de composants • des emboîtements successifs de • boîtes (containers) • objets (composants simples) Component Container * 2
  • 3. Composants / Containers • Donc deux types d’objets GUI • les composants • les containers • qui sont aussi des composants... Component Container * 3
  • 4. Composants / Containers • (bizarrerie?) Swing • les JComponents Swing sont des Container AWT… • il n’est pas conseillé de les utiliser comme tels… sauf dans le cas des containers Swing… Component Container * JComponent 4
  • 5. Panorama (non-exhaustif) aka les-terres-du-milieu.java in JTolkien package 5 Component Container JComponentPanel Applet JApplet ScrollPane Window Dialog Frame JWindow FileDialog JDialog JFrame AbstractButton JButton JMenuItemJToggleButton JMenu Box JCheckBoxMenuItem JRadioButtonMenuItem JCheckBox JRadioButton JColorChooser JComboBox JFileChooser JInternalFrame Button Label Canvas Checkbox Choice List Scrollbar TextComponent TextArea TextField JLabel JLayeredPane JList JMenuBar JOptionPane JPanel JPopupMenu JProgressBar JRootPane JScrollBar JScrollPane JSeparator JSlider JSpinner JSplitPane JTabbedPane JTable JTextComponent JToolBar JToolTip JTree JViewport JTextFieldJTextAreaJEditorPane JTextPane JFormattedTextField JPasswordField MenuComponent MenuItemMenuBar CheckboxMenuItem Menu PopupMenu Mordor Eriâdor One Class to rule them all One Ctrl-F to find them One Swing to bring them all and in the GUI bind them, In the Land of Java where the Objects lie.
  • 6. Component • Les composants (awt.Component) : • un nom (name) • une taille et position (x/y/width/height - size/location) • visible ou non (visible) • réceptacle de divers événements • Il est très important de rendre visible les composants sous peine d’invisibilité… 6
  • 7. Container • Les containers (awt.Container) : • des méthodes de gestion de la relation d’agrégation Container/Composant • add/remove/getComponent/ getComponentCount/getComponentAt/ getComponents… • des méthodes de gestion de la disposition (layout) • une police par défaut (font) 7
  • 8. JComponent • Les composants Swing (swing.JComponent) : • support pour une apparence dynamique (pluggable look-and-feel) • amélioration de la gestion du clavier • support pour info-bulles • support pour l’accessibilité • support pour stockage de propriétés spécifiques • support amélioré pour le dessin (double-buffering, bords) 8
  • 9. • désormais et sauf exception nécessaire, nous ne préoccuperons plus que de Swing… 9
  • 10. JComponent • Quelques propriétés des JComponents : • opaque (boolean) • background/foreground (Color) • font (Font) • toolTip (String) ! • illustration avec un JLabel (JComponentExemple.java) • précaution : rendre le JLabel opaque car par défaut son fond est transparent… 10
  • 11. Containers • Les Containers • des boîtes (2D) • ont pour rôle de contenir d’autres composants 11
  • 12. Containers racine • Containers racine •JApplet! •JDialog! •JFrame! •JWindow! • au moins un par application • manipulables directement par le window manager 12
  • 13. Containers racine • JFrame vs JWindow • décoration... • JDialog ? • en général utile dans le contexte d’une autre fenêtre, on verra plus tard… • JApplet ? • embarqué (navigateur, appletviewer…) 13
  • 14. Containers racine JFrameExemple.java •JFrame(String title)! • contient un unique JRootPane! • peut être remplacé • ne peut être enlevé • peut être associée à une JMenuBar 14
  • 15. Containers racine JWindowExemple.java •JWindow() / JWindow(Frame owner) / JWindow(Window owner)! • contient un unique JRootPane • peut être remplacé • ne peut être absent • pas de barre de menu… 15
  • 16. Containers racine JAppletExemple.html •JApplet! • contient un unique JRootPane • peut être remplacé • ne peut être absent • pas de barre de menu... 16
  • 17. Containers racine • Rappel : les containers racines peuvent être visibles ou non : •setVisible(boolean)! • il ne faut pas oublier des les rendre visibles sous peine d’invisibilité… • il ne faut pas les rendre visible trop tôt! Pour éviter des effets désagréables de construction visible de l’interface et de performances… 17
  • 18. Containers racine • JWindow, JFrame • des capsules pour un container utilisateur • le container principal (JRootPane) est accessible via •Container getContentPane()! •setContentPane(Container) 18
  • 19. Containers • Containers ordinaires •JPanel! •JScrollPane! •JSplitPane! •JTabbedPane! •JToolBar! • permettent la division d’un espace existant • ne sont utilisables que dans d’autres containers 19
  • 20. Containers • Les containers ordinaires • un espace de rangement d’autres composants, l’agrégation vit grâce à : • add(Component) / remove(Component) • comment les composants sont-ils rangés/placés ? • comme on veut… on le verra plus tard… 20
  • 21. JPanel •JPanel! • le plus simple, un espace rectangulaire • un simple panneau d’affichage JPanelExemple.java JPanelExemple2.java 21
  • 22. JScrollPane •JScrollPane! • une fenêtre sur un espace rectangulaire déplaçable JScrollPaneExemple.java 22
  • 23. JSplitPane •JSplitPane! • divise un espace verticalement ou horizontalement en deux parties dont la somme est l’espace entier JSplitPaneExemple.java 23
  • 24. JTabbedPane •JTabbedPane! • une pile d’espaces tous de même dimension 24 JTabbedPaneExemple.java
  • 25. JToolBar •JToolBar! • un espace linéaire de rangement • utilise des Actions 25
  • 26. Containers • Containers spéciaux : •JRootPane! •JLayeredPane! •JInternalFrame! •JDesktopPane! • Leur usage est plus anecdotique ou technique… 26
  • 27. JRootPane •JRootPane! • on ne les crée jamais soi-même • les containers racine s’occupent d’en fournir • leur structure est très particulière… 27
  • 28. JLayeredPane •JLayeredPane! • autorise la superposition « en Z-stack » de différent panneaux à usages particuliers… contentPane menuBar défaut toolBar palettes modales internes popups drag’n’drop 28
  • 29. JInternalFrame - JDesktopPane •JInternalFrame! • autorise la création de frames internes, c’est-à- dire de fenêtres à l’intérieur d’une autre •JDesktopPane! • une version spéciale de JInternalFrame adaptée pour gérer des fenêtres internes multiples 29
  • 30. Containers : Menu • Les menus •JMenuItem! • un choix dans un menu •JMenu! • un container dédié qui hérite de JMenuItem •JMenuBar! • un container dédié à l’accueil de menus JMenuItem JMenu * JMenuBar * 30
  • 31. Containers : Menu JMenuExemple.java • Attention • une seule barre de menu par container racine (setJMenuBar(JMenuBar)) • le placement de la barre n’est pas contrôlable (WindowManager dépendant) • pas de layout modifiable 31
  • 32. Containers : Menu JSeparatorExemple.java • Les séparation logiques entre groupes d’items peuvent être obtenues par utilisation de ! •JSeparator 32
  • 33. • Si le container est visible • validate() permet d’obtenir un replacement correct de tous les composants après ajout de nouveaux composants • Container racine • pack() permet d’obtenir un rangement optimal 33
  • 34. Composants • Les Composants • proposent une interaction avec l’utilisateur • affichage • interaction en entrée • les deux combinés 34
  • 35. Composants • Les composants : • peuvent être actifs ou non, i.e. autorisent l’interactivité •setEnabled(boolean)! •boolean getEnabled()! • l’effet obtenu est en général un grisé JButtonExemple.java JButtonDisabledExemple.java 35
  • 36. Composants • Composants simples non-interactifs •JLabel! •JProgressBar! •JSeparator! •JToolTip! • fournissent une information à l’utilisateur 36
  • 37. Composants JLabelExemple.java JLabelIconeExemple.java •JLabel! • permet d’afficher une icône et/ou un texte • supporte un sous-ensemble de HTML 3.2 37
  • 38. Composants ProgressMonitorExemple.java •JProgressBar! • permet de rendre compte d’une progression • cousins : ProgressMonitor / ProgressMonitorInputStream 38 JProgressBarExemple.java
  • 39. Composants • Composants interactifs simples : • Boutons •JButton! •JMenuItem! •JCheckBox JCheckBoxMenuItem! •JRadioButton JRadioButtonMenuItem! •JToggleButton! • Listes •JComboBox! •JList! • Texte •JTextField JFormattedTextField/JPasswordField! • Divers •JSlider! •JSpinner 39
  • 40. Boutons • Les boutons (AbstractButton) peuvent être regroupés logiquement via des ButtonGroup • cela n’a vraiment de sens que pour les boutons qui ont un état de sélection • donc ni JButton, ni JMenuItem! • le plus souvent utilisé avec les RadioButton! • Les ButtonGroup permettent de contrôler l’exclusion mutuelle lors de sélection 40 ButtonExemple.java
  • 41. Boutons • Les listes • Attention depuis Java SE 1.7 ces classes sont génériques… • Les JComboBoxs peuvent être éditables • on verra plus tard comment personnaliser les rendus de ces objets… Les curieux peuvent aller jeter un œil sur ListCellRendererE 41 ListeExemple.java
  • 42. Texte • Les champs de saisie de texte • ordinaire • mot de passe (saisie masquée) • champ formatés (date, etc) 42 TexteExemple.java
  • 43. Divers • Le slider • un curseur sur une règle • les graduations peuvent être activées ou non (mineures/majeures) • Le spinner • la roulette (attention son aspect graphique n’est pas celui généralement attendu…) 43 SliSpiExemple.java
  • 44. Composants • Composants avancés (complexes, i.e. plus d’une interaction) : •JColorChooser! •JEditorPane! •JTextPane! •JFileChooser! •JTable! •JTextArea! •JTree! • On les étudiera plus tard… 44
  • 45. Layouts • Les Layouts • algorithmes de placement de composants dans des containers... • problème : ranger des bagages dans un coffre 45
  • 46. Layouts • on peut toujours essayer de ranger les éléments soi- même mais c’est généralement non-portable… • on peut choisir la politique de placement associée à un container donné ! • méthode setLayout(LayoutManager) 46
  • 47. Layouts • Layouts de base ! • AWT ! •BorderLayout! •CardLayout! •GridLayout! •GridBagLayout! •FlowLayout! ! ! ! ! ! • Swing ! • BoxLayout • GroupLayout • OverlayLayout • ScrollPaneLayout • SpringLayout • ViewportLayout 47
  • 48. Layouts BorderLayoutExemple.java •BorderLayout! • par défaut dans : • les JRootPane des JWindow •les contentPane des JFrame! • Cinq composants au plus : nord, sud, est, ouest, centre • conserve dynamiquement son aspect • retaille les composants si nécessaire 48
  • 49. Layouts BoxLayoutExemple.java •BoxLayout! • par défaut dans les Box • les composants sont rangés horizontalement ou verticalement dans des espaces tous de même taille • ne retaille pas les composants 49
  • 50. Layouts GroupLayoutExemple.java •GroupLayout! • permet d’obtenir des effets d’alignement • ne retaille pas les composants • un poil complexe à utiliser 50
  • 51. Layouts OverlayLayoutExemple.java •OverlayLayout! • superpose des composants comme CardLayout • mais autorise la visualisation/manipulation par transparence… 51
  • 52. Layouts SpringLayoutExemple.java •SpringLayout! • exprime des contraintes entre composants • simple en apparence… 52
  • 54. Internationalisation • Régionalisation (Localization) l10n • adaptation d’une application aux caractéristiques culturelles locales • travail de l’ordre de la traduction • Internationalisation (Internationalization) i18n • processus de développement conduisant à produire une application localisable • travail spécifique de développement 54
  • 55. Internationalisation • Idée (simple) • ne pas afficher un message en dur • utiliser une fonction réalisant la traduction adéquate en fonction d’un environnement donné 55
  • 56. Internationalisation • java.util.ResourceBundle! • une classe d’encapsulation de données régionalisées, la sélection des données est opérée par un ResourceBundle.Control • des méthodes pour obtenir les messages depuis une liste (une classe adéquate ou un fichier adéquat) 56
  • 57. Internationalisation • Récupérer des données régionalisées depuis un fichier •ResourceBundle.getBundle(String name)! • le fichier recherché aura pour nom • name + suffixe régionalisé + “.properties“ • ex : Messages_fr_FR.properties! • possibilité d’internaliser le Bundle... 57
  • 58. Internationalisation • Récupérer la traduction d’un terme •unResourceBundle.getString(String clé)! • permet de récupérer la chaîne associée à la clé donnée, et ce dans la base précédemment sélectionnée 58
  • 59. Internationalisation • Internationalisation • MacOSX • préférences système • Windows • préférences système • Unix • environnement : LANG, LC_*! • dans Eclipse : sélection possible dans Run Configurations... ➧ Environment InternationalisationExemple.java 59
  • 60. Mnémoniques • Les menus et la navigation au clavier • on peut associer aux menus, items et boutons un mnémonique • une lettre (associée à un modificateur en général ALT) permettant de se placer (naviguer) et sélectionner l’objet associé • attention, l’action associée n’est pas réalisée (RET) • ce n’est pas un raccourci! • un raccourci permet de déclencher l’action associée à un objet d’interface sans passer par l’objet • c’est de l’accessibilité • La RFC 1345 est dédiée au sujet « Character Mnemonics Character Sets » 60
  • 61. Mnémoniques • pour associer un mnémonique •setMnemonic(int)! • l’entier est normalement l’identité d’une touche du clavier •java.awt.event.KeyEvent.VK_*! • si le caractère est présent dans le texte affiché par l’objet associé, ce caractère est souligné par l’interface 61 MnemmoniquesExemple.java
  • 62. Raccourcis • un raccourci permet de déclencher l’action associée à un objet d’interface sans passer par l’objet • c’est de l’ergonomie •setAccelerator(KeyStroke)! • pour l’observer, il faut être capable d’associer des actions à des objets d’interface (très bientôt traité…) 62