les composants de swing

62
Interfaces Graphiques Les Composants [email protected] Université Paris Diderot ©2014

Upload: jean-baptiste-yunes

Post on 10-Dec-2014

473 views

Category:

Technology


2 download

DESCRIPTION

Une description des principaux composant de AWT et Swing. Comment ils se combinent et à quoi ils servent...

TRANSCRIPT

Page 1: Les composants de Swing

Interfaces Graphiques Les Composants

[email protected] Université Paris Diderot

©2014

Page 2: Les composants de Swing

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

Page 3: Les composants de Swing

Composants / Containers

• Donc deux types d’objets GUI

• les composants

• les containers

• qui sont aussi des composants...

Component

Container

*

���3

Page 4: Les composants de Swing

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

Page 5: Les composants de Swing

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

TextFieldJLabel

JLayeredPane

JList

JMenuBar

JOptionPane

JPanel

JPopupMenu

JProgressBar

JRootPane

JScrollBar

JScrollPane

JSeparator

JSlider

JSpinner

JSplitPane

JTabbedPane

JTable

JTextComponent

JToolBar

JToolTip

JTree

JViewportJTextFieldJTextAreaJEditorPane

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.

Page 6: Les composants de Swing

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

Page 7: Les composants de Swing

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

Page 8: Les composants de Swing

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

Page 9: Les composants de Swing

• désormais et sauf exception nécessaire, nous ne préoccuperons plus que de Swing…

���9

Page 10: Les composants de Swing

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

Page 11: Les composants de Swing

Containers

• Les Containers

• des boîtes (2D)

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

���11

Page 12: Les composants de Swing

Containers racine

• Containers racine

•JApplet!

•JDialog!

•JFrame!

•JWindow!

• au moins un par application

• manipulables directement par le window manager

���12

Page 13: Les composants de Swing

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

Page 14: Les composants de Swing

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

Page 15: Les composants de Swing

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

Page 16: Les composants de Swing

Containers racine

JAppletExemple.html

• JApplet!

• contient un unique JRootPane

• peut être remplacé

• ne peut être absent

• pas de barre de menu...

���16

Page 17: Les composants de Swing

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

Page 18: Les composants de Swing

Containers racine

• JWindow, JFrame

• des capsules pour un container utilisateur

• le container principal (JRootPane) est accessible via

•Container getContentPane()!

•setContentPane(Container)

���18

Page 19: Les composants de Swing

Containers

• Containers ordinaires

•JPanel!

•JScrollPane!

•JSplitPane!

•JTabbedPane!

•JToolBar!

• permettent la division d’un espace existant

• ne sont utilisables que dans d’autres containers

���19

Page 20: Les composants de Swing

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

Page 21: Les composants de Swing

JPanel

•JPanel!

• le plus simple, un espace rectangulaire

• un simple panneau d’affichage

JPanelExemple.java

JPanelExemple2.java

���21

Page 22: Les composants de Swing

JScrollPane

•JScrollPane!

• une fenêtre sur un espace rectangulaire déplaçable

JScrollPaneExemple.java

���22

Page 23: Les composants de Swing

JSplitPane

•JSplitPane!

• divise un espace verticalement ou horizontalement en deux parties dont la somme est l’espace entier

JSplitPaneExemple.java

���23

Page 24: Les composants de Swing

JTabbedPane

•JTabbedPane!

• une pile d’espaces tous de même dimension

���24

JTabbedPaneExemple.java

Page 25: Les composants de Swing

JToolBar

•JToolBar!

• un espace linéaire de rangement

• utilise des Actions

���25

Page 26: Les composants de Swing

Containers

• Containers spéciaux :

•JRootPane!

•JLayeredPane!

•JInternalFrame!

•JDesktopPane!

• Leur usage est plus anecdotique ou technique…

���26

Page 27: Les composants de Swing

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

Page 28: Les composants de Swing

JLayeredPane

•JLayeredPane!

• autorise la superposition « en Z-stack » de différent panneaux à usages particuliers…

contentPanemenuBar

défaut

toolBarpalettes

modales internespopupsdrag’n’drop

���28

Page 29: Les composants de Swing

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

Page 30: Les composants de Swing

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

Page 31: Les composants de Swing

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

Page 32: Les composants de Swing

Containers : Menu

JSeparatorExemple.java

• Les séparation logiques entre groupes d’items peuvent être obtenues par utilisation de

!

•JSeparator

���32

Page 33: Les composants de Swing

• 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

Page 34: Les composants de Swing

Composants

• Les Composants

• proposent une interaction avec l’utilisateur

• affichage

• interaction en entrée

• les deux combinés

���34

Page 35: Les composants de Swing

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

Page 36: Les composants de Swing

Composants

• Composants simples non-interactifs

•JLabel!

•JProgressBar!

•JSeparator!

•JToolTip!

• fournissent une information à l’utilisateur

���36

Page 37: Les composants de Swing

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

Page 38: Les composants de Swing

Composants

ProgressMonitorExemple.java

• JProgressBar!

• permet de rendre compte d’une progression

• cousins : ProgressMonitor / ProgressMonitorInputStream

���38

JProgressBarExemple.java

Page 39: Les composants de Swing

Composants

• Composants interactifs simples : • Boutons •JButton!•JMenuItem!•JCheckBox JCheckBoxMenuItem!•JRadioButton JRadioButtonMenuItem!•JToggleButton!

• Listes •JComboBox!•JList!

• Texte •JTextField JFormattedTextField/JPasswordField!

• Divers •JSlider!•JSpinner

���39

Page 40: Les composants de Swing

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

Page 41: Les composants de Swing

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 ListCellRenderer<E>

���41

ListeExemple.java

Page 42: Les composants de Swing

Texte

• Les champs de saisie de texte

• ordinaire

• mot de passe (saisie masquée)

• champ formatés (date, etc)

���42

TexteExemple.java

Page 43: Les composants de Swing

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

Page 44: Les composants de Swing

Composants

• Composants avancés (complexes, i.e. plus d’une interaction) :

•JColorChooser!

•JEditorPane!

•JTextPane!

•JFileChooser!

•JTable!

•JTextArea!

•JTree!

• On les étudiera plus tard…

���44

Page 45: Les composants de Swing

Layouts

• Les Layouts

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

• problème : ranger des bagages dans un coffre

���45

Page 46: Les composants de Swing

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

Page 47: Les composants de Swing

Layouts

• Layouts de base !

• AWT !

•BorderLayout!

•CardLayout!

•GridLayout!

•GridBagLayout!

•FlowLayout!!

!

!

!

!

• Swing !

• BoxLayout • GroupLayout • OverlayLayout • ScrollPaneLayout • SpringLayout • ViewportLayout

���47

Page 48: Les composants de Swing

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

Page 49: Les composants de Swing

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

Page 50: Les composants de Swing

Layouts

GroupLayoutExemple.java

• GroupLayout!

• permet d’obtenir des effets d’alignement

• ne retaille pas les composants

• un poil complexe à utiliser

���50

Page 51: Les composants de Swing

Layouts

OverlayLayoutExemple.java

•OverlayLayout!

• superpose des composants comme CardLayout

• mais autorise la visualisation/manipulation par transparence…

���51

Page 52: Les composants de Swing

Layouts

SpringLayoutExemple.java

•SpringLayout!

• exprime des contraintes entre composants

• simple en apparence…

���52

Page 53: Les composants de Swing

Internationalisation���53

Page 54: Les composants de Swing

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

Page 55: Les composants de Swing

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

Page 56: Les composants de Swing

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

Page 57: Les composants de Swing

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

Page 58: Les composants de Swing

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

Page 59: Les composants de Swing

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

Page 60: Les composants de Swing

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

Page 61: Les composants de Swing

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

Page 62: Les composants de Swing

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