Académique Documents
Professionnel Documents
Culture Documents
graphiques
Pratique de la programmation oriente-objet
Michel Schinz 20150518
AWT, Swing, Java FX
La bibliothque Java contient trois ensembles de classes
permettant la cration d'interfaces graphiques. Dans l'ordre
chronologique de leur apparition, ce sont :
1. AWT (Abstract Window Toolkit), tomb en dsutude
mais servant de base Swing,
2. Swing, utilis pour la majorit des applications
existantes mais en cours de remplacement par Java FX,
3. Java FX.
Cette leon dcrit Swing, mais la plupart des concepts se
retrouvent dans Java FX et dans d'autres bibliothques
similaires pour d'autres langages.
Swing
composant
de base JButton JButton
hirarchie apparence
JFrame
JPanel JPanel
JButton
JButton
JButton
JButton
JComponent
JFrame
JPanel
JFormattedTF
JButton
JButton
Exemple
L'interface graphique d'une calculatrice quatre oprations
pourrait tre obtenue au moyen de la hirarchie suivante :
JFrame
JPanel
JFormattedTF
JButton
JButton
Exemple
L'interface graphique d'une calculatrice quatre oprations
pourrait tre obtenue au moyen de la hirarchie suivante :
JFrame
JPanel
JFormattedTF
JButton
JButton
Exemple
L'interface graphique d'une calculatrice quatre oprations
pourrait tre obtenue au moyen de la hirarchie suivante :
JFrame
JPanel
JFormattedTF
JButton
JButton
Exemple
L'interface graphique d'une calculatrice quatre oprations
pourrait tre obtenue au moyen de la hirarchie suivante :
JFrame
JPanel
JFormattedTF
JButton
JButton
Conteneurs
de niveau suprieur
Composants de niveau sup.
titre
Une fentre
panneau
de contenu
Fermeture des fentres
Par dfaut, lorsque l'utilisateur ferme une fentre, celle-ci est
simplement rendue invisible.
Ce comportement est souvent inadquat pour la fentre
principale d'une application, car il est prfrable que la
fermeture de cette fentre provoque l'arrt complet de
l'application, p.ex. via un appel System.exit.
Pour obtenir ce comportement, on peut changer la
proprit defaultCloseOperation afin de lui donner la
valeur EXIT_ON_CLOSE :
JFrame f = ;
frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
Agencement
prdfini
et fixe JFrame
rootPane
JRootPane
contentPane
JPanel
spcifique
l'application
Conteneurs
intermdiaires
Conteneur intermdiaire
fils 1 fils 2
JTabbedPane
JTabbedPane est un panneau compos d'un certain
nombre d'onglets affichant chacun un composant fils
diffrent. Un seul onglet est visible un instant donn.
fils (onglet) 1
JScrollPane
JScrollPane donne accs une sous-partie d'un
composant trop grand pour tenir l'cran et permet de
dplacer la zone visualise de diffrentes manires, p.ex. au
moyen de barres de dfilement.
fils 1
fils 2
fils 3
Conteneur
intermdiaire
JPanel
JPanel
y panneau parent
fils
height
width
Agencement des fils
PAGE_START
PAGE_END
1 2 3 4
5 6
BoxLayout
BoxLayout place les fils dans l'ordre, soit aligns
horizontalement, soit empils verticalement.
Par exemple, il peut agencer ainsi trois fils d'un panneau en
les empilant verticalement :
3
GridLayout
GridLayout place les fils dans une grille de nm cellules
de taille identique, en partant du coin haut-gauche et en
suivant le sens de lecture.
Par exemple, il peut agencer ainsi neuf fils d'un panneau
dans une grille de 33 cellules :
1 2 3
4 5 6
7 8 9
Autres gestionnaires
Swing offre encore d'autres gestionnaires d'agencement,
plus puissants que ceux prsents jusqu'ici, parmi lesquels :
GridBagLayout, version amliore de GridLayout
permettant de dimensionner les lignes et colonnes
individuellement, et de combiner des cellules,
GroupLayout, associant chaque composant un
groupe horizontal et un groupe vertical et alignant de
manire configurable tous les composants d'un groupe.
Malheureusement, comme tous les gestionnaires
d'agencement offerts par Swing, ils montrent assez vite leurs
limites lors de la construction d'interfaces complexes.
Exemple
L'interface de la calculatrice peut tre mise en page au
moyen de deux gestionnaires :
1. le premier de type BorderLayout, attach au
panneau de contenu, permettant de placer l'affichage
dans la zone PAGE_START et le panneau du clavier
dans la zone CENTER,
2. le second de type GridLayout et de taille 44,
attach au panneau clavier.
Exemple
L'interface de la calculatrice peut tre mise en page au
moyen de deux gestionnaires :
1. le premier de type BorderLayout, attach au
panneau de contenu, permettant de placer l'affichage
dans la zone PAGE_START et le panneau du clavier
dans la zone CENTER,
2. le second de type GridLayout et de taille 44,
attach au panneau clavier.
BorderLayout
Exemple
L'interface de la calculatrice peut tre mise en page au
moyen de deux gestionnaires :
1. le premier de type BorderLayout, attach au
panneau de contenu, permettant de placer l'affichage
dans la zone PAGE_START et le panneau du clavier
dans la zone CENTER,
2. le second de type GridLayout et de taille 44,
attach au panneau clavier.
BorderLayout
GridLayout (44)
Exemple
JPanel p = new JPanel(new BorderLayout());
JFormattedTextField display = ;
// configuration de display
p.add(display, BorderLayout.PAGE_START);
JPanel keyboard =
new JPanel(new GridLayout(4, 4));
// configuration de keyboard (boutons, )
p.add(keyboard, BorderLayout.CENTER);
tiquette
Nom
Prnom
Age
Bouton un tat
JButton reprsente un bouton un tat, destin tre
cliqu pour effectuer une action.
Sa principale proprit est le texte qu'il affiche (text). Des
auditeurs peuvent lui tre attachs pour grer les clics de
l'utilisateur voir plus loin.
click me!
Case cocher
JCheckBox reprsente une case cocher, qui peut tre
slectionne ou non. Ses principales proprits sont le
texte qu'elle affiche (text) et son tat (selected).
fromage
pain
vin
ail
Bouton radio
JRadioButton reprsente un bouton radio , similaire
une case cocher mais faisant partie d'un groupe (de type
ButtonGroup) dont un seul peut tre slectionn.
Ses principales proprits sont les mmes que celles de
JCheckBox.
fondue
raclette
crote au fromage
Malakoffs
Combo box
JComboBox reprsente une combo box permettant de
choisir une valeur parmi un ensemble prdfini et
ventuellement d'en entrer une autre.
Pays Suisse
Tadjikistan
Turkmnistan
Vatican
Zimbabwe
Composant textuel simple
JTextField et ses sous-classes JFormattedTextField
et JPasswordField reprsentent des champs textuels
une ligne et prsentation uniforme (police unique, etc.).
Leur principale proprit est leur texte (text), une simple
chane de caractres de type String.
60%
Macro-composants
En plus des composants de base simples dcrits
prcdemment, Swing offre des macro-composants souvent
utiles, construits partir des composants de base :
JColorChooser, qui permet de choisir une couleur de
diffrentes manires (via une palette, en choisissant ses
composantes dans diffrents modles, etc.),
JFileChooser, qui permet de choisir un ou plusieurs
fichiers ou rpertoires, existants ou non, en naviguant
dans le systme de fichiers.
Ces deux macro-composants peuvent s'utiliser comme des
composants normaux ou dans des botes de dialogue.
Composants structurs
vue + modle
contrleur model
JList ListModel
listeners
ListModel
L'interface ListModel offre d'une part des mthodes
permettant de grer l'ensemble des observateursappels
ici auditeurs (listeners)et d'autre part des mthodes de
consultation de la liste de valeurs.
public interface ListModel<E> {
void addListDataListener(LDL l);
void removeListDataListener(LDL l);
int getSize();
E getElementAt(int i);
}
(Le type ListDataListener a t abrg LDL pour des
questions de prsentation).
AbstractListModel
listeners
1 JList 1 AbstractListModel
ListDataEvent MyListModelAdapter
Composants
personnaliss
Composants personnaliss
Prnom
Age
BorderFactory
Contrairement d'autres objets Swing, les bordures ne
doivent pas tre cres directement au moyen de l'nonc
new. Au lieu de cela, il convient d'appeler l'une des
mthodes fabriques de la classe BorderFactory, par
exemple :
createLineBorder prend une couleur et une
paisseur de trait et retourne une bordure compose
d'une simple ligne,
createTitledBorder prend une bordure existante et
une chane, qu'elle lui ajoute en titre,
etc.
Gestion des
Dire que l'interface est bloque tant que
le gestionnaire ne retourne pas
vnements
Prog. vnementielle
Un programme dot d'une interface graphique ne fait
gnralement qu'attendre que l'utilisateur interagisse avec
celle-ci, ragit en consquence, puis se remet attendre.
Chaque fois que le programme est forc de ragir, on dit
qu'un vnement (event) s'est produit.
Cette caractristique des programmes graphiques induit un
style de programmation particulier nomm programmation
vnementielle (event-driven programming).
Ce style se retrouve dans toutes les applications dont le but
principal est de ragir des vnements externes, p.ex. les
serveurs (Web et autres).
Boucle vnementielle
Au cur de tout programme vnementiel se trouve une
boucle traitant successivement les vnements dans leur
ordre d'arrive. Cette boucle, nomme boucle
vnementielle (event loop), pourrait s'exprimer ainsi en
pseudo-code :
tant que le programme n'est pas termin
attendre le prochain vnement
traiter cet vnement
Cette boucle est souvent fournie par une bibliothque et ne
doit dans ce cas pas tre crite explicitement. Il en va ainsi
de la plupart des bibliothques de gestion d'interfaces
graphiques, dont Swing.
Gestion des vnements
main
invokeLater boucle vnementielle :
createUI
println("click!")
Objets vnements