Title: Les Interfaces graphiques
1Les Interfaces graphiques
2Les interfaces graphiques Introduction
- Une application est une boîte noire.
- Prend des entrées et produit des sorties.
- Les utilisateurs ne sont pas des programmeurs.
- Nécessité dun mécanisme dinteraction entre
lutilisateur et lapplication - Echanger les données.
- Echange de contrôle.
3Solution la plus basique les Intput/output
Stream
- Vous pouvez passer par des objets de gestion de
flux ou de données pour interagir avec
lutilisateur. - Saisir les données dans un fichier ou à partir du
clavier (System.in, InputStream). - affichage des résultats sur la console ou dans
des fichiers (System.out et OutputStream).
4Inconvénients
- Très lourde (beaucoup de code pour peut de
chose). - Peu adaptée pour les interactions de type
contrôle. - Pas du tout intuitive il faut connaître pour
pouvoir lutiliser - certains types de données ne peuvent être gérés
en tant que flux.
Solution Les interfaces graphiques
5Faire une interface graphique...
- Comment construire un écran graphique ?
- Comment gérer les événements ?
- Comment maintenir la cohérence entre les objets
applicatifs / objets graphiques ?
6Définition des écrans !
- Une application plein d écrans graphiques
- Un écran graphique 1 arbre de composants
graphiques - La racine La fenêtre
- Les feuilles des composants atomiques (button,
List, TextField) - Les nuds des conteneurs (des zones pour mettre
des composants atomiques)
7Exemple très simple
8Exemple un arbre de composant graphique
Les nuds des containeurs
saisir Frame
?????
ajout
Buttonl
nom
post TextField
Label
Les feuilles composants atomiques
9Étape1 Comment construire des écrans Graphiques ?
- Java offre une  pléthora de composantes
graphiques. - Deux packages java.awt. javax.swing.
- Le package swing est une extension de awt
- On peut les classer selon trois catégories
- Les composantes écrans
- Les composantes de gestion demplacement les
containers - Les composantes graphiques atomiques.
- Les composantes de type menus.
10Une vue partielle sur le modèle de classe du
package swing
Une classe abstraite!
Les composants atomiques
JComponent
(from awt)
component
Les composants composites !
Container
JButton
TextComponent
(from awt)
(from awt)
(from awt)
JTextField
Panel
JWindow
(from awt)
JList
Pas de nouvelles fenêtres
JFrame
11Les composants graphique de haut niveau !
- Les fenêtres graphique (Jframe)
- Les sous-fenêtre (JInternalFrame)
- Les containers
- Les composants de gestion demplacement (Les
Layout). - JPanel
12Les Fenêtres Graphiques (JFrame)
- La classe qui permet de créer des fenêtres
- Cest lobjet racine
- Sous classe de la classe Frame de awt.
- Elle maintient un objet de gestion de composants.
13Les constructeurs de JFrame
- Deux constructeurs
- public JFrame()
- public JFrame(String titre)
- Exemple
Hauteur40
14Deuxième méthode
- Parfois, vous avez besoin dassocier des données
ou des méthodes à des écrans - Vous voulez une type de fenêtre personnalisée.
- Solution ..lhéritage
- Exemple créer une classe EcranEmp qui prend en
paramètre un employé dont le titre sera
initialisé comme suit ceci est lécran de
lemployé XXXX
15qq méthodes de la classe Jframe
- Personnaliser le comportement du bouton de
fermeture - Par défaut rend la fenêtre invisible
- setDefaultCloseOperation(int )
- Trois constantes
- JFrame.DISPOSE_ON_CLOSE
- JFrame.DO_NOTHING_ON_CLOSE
- JFrame.HIDE_ON_CLOSE
- JFrame.EXIT_ON_CLOSE
- Show() elle dessine la fenêtre et tous les objets
appartenant a la fenêtre - setLocation(x,y) setLocationRelativeTo(Component)
- Pack() calcule automatiquement la taille
minimale. - setIconImage(new imageIcon(uriImage).getImage())
-
16Quatre modèles daffichages
Java Look Feel
GTK Look Feel
MacOS Look Feel
Windows Look Feel
- La gestion daffichage est gérée par UIManager
- UIManager intermédiaire entre les composantes
java et le système daffichage de la machine - Trois modes mode programme, commande en ligne
ou en cours dexécution
17Comment ajouter des composants dans un JFrame?(1)
- Chaque JFrame maintient un conteneur dobjets
graphiques (Container). - Le container de JFrame est JRootPane.
- Le JRootPane maintient une hiérarchie de
conteneur comme suit - JRootPane
- JLayeredPane
- JContentPane
- JGlassPane
18Comment ajouter des composants dans un JFrame?(2)
- il ne faut pas ajouter des composants
directement dans lobjet JFrame passer par sont
conteneur. - getContentPane() Container
- Par défaut cest le JContentPane.
- Utilisez la méthode add(Component).
- Vous pouvez ajouter tout sauf des composants de
Type JFrame. - les objets sont ajoutés sur le plan
- JLayeredPane en couche
19Exemple ajouter un label dans une fenêtre
20Cas particulierAjouter des sous-écrans
- Vous pouvez ajouter des sous fenêtres à une
fenêtre. - Il faut changer le JContentPane par un
JDesktopPane ..considérer la fenêtre comme
lécran de machine - Sous Classe de JLayeredPane..
- Les sous fenêtres sont de type JInternalFrame
- JInternalFrame se comporte exactement comme un
JFrame (ajouter des composants ..).
21JInternalFrame JDesktopPane
- public JDesktopPane()
- Il maintient également toutes les méthodes et
constantes des containers - La méthode add est valable
- Public JInternalFrame(String titre, boolean
resizable, boolean closable, boolean
maximazable). - Une fois fait Les JInternalFrame sont manipuler
de la même manière que les JFrame ajout passe
par le JContentPane etc
22Exemple
23Comment placer les objets ?
- Une fenêtre dispose dun ensemble de containers.
- Le container des composants est JContentPane
(getComponentPane). - Pas de placement absolu i.e. pas de button1 en
x3, y4
Chaque container délègue la gestion des
emplacements de composants à une Classe de type
Layout
24Les Layout les Containeurs
- Chaque container dispose dun gestionnaire
demplacement. - Les gestionnaires demplacement sont
- Celles de awt
- GridLayout
- BorderLayout
- Spécifique à swing
- BoxLayout
- FlowLayout
- SpringLayout
25Comment changer le Layout
- Chaque containeur maintient une méthode pour
définir lobjet Layout. - Par défaut le JContentPanel maintient un
FlowLayout. - ObjetContainer.setLayout(objetLayout)
- La méthode add() change de type de paramètre
selon les objets Layout
26BorderLayout
- Constructeur
- public BorderLayout()
- Divise le containeur en cinq parties
- Add( placement ,component)
27Exemple
28GridLayout
- Positionner les objets graphiques dans des
cellules dune grille i.e matrice. - Découper lespace de container en cellule a
espace égales. - Il faut spécifier le nb ligne et colonne dans le
constructeur (la valeur 0 signifie une gestion
dynamique). - Les objets sont ajoutés ligne par ligne de gauche
à droite selon lordre dajout dans le programme.
29Exemple
- Ecrire un programme qui affiche 6 boutons en
grille - Déclarer une fenêtre
- Obtenir son JContentPane
- Changer le gestionnaire demplacement en
gridLayout - Ajouter les 6 bouton.
- Afficher la fenêtre
30Résumons nous
- Une fenêtre est un objet de type JFrame ou une de
ses sous-classe. - Pour ajouter des composants graphique il faut
passer par le Container - getComponentPane() pour obtenir le container
- add(Component) pour ajouter des objets
graphiques - Pour gérer lemplacement des objets dans le
container utilisez les objets XXXXLayout. - Construire un objet XXXXLayout.
- Affecter au container ContainerOb.setLayout(layout
Ob).
31Un autre container JPanel
- Vous pouvez utiliser vos propre container, mais.
- Il faut les ajouter au container de la fenêtre
- Le JPanel vous permet de gérer lespace dans une
fenêtre. - Il peuvent définir des formats de placement
différent. - Vous ajoutez vos objets directement dans le JPane.
32qq méthodes de JPanel
- Constructeur
- new JPanel()
- New JPanel(Layout)
- La méthode setLayout(Layout)
- La méthode add(Component)
- Les JPanel sont des composants et peuvent
simbriqués entre elles. - Les JPanel napparaissent pas à lecran leurs
rôle se limite à une découpage dune espace
dffichage. - Pour le rendre visible il faut ajouter un objet
de type Border setBorder(BorderFactory.xxxx)
33Exemple
34Excercice1
- Écrivez une méthode main() qui affiche la fenêtre
suivante
35Solution
- Créer un objet Jframe
- Mettre à jours le gestionnaire de placement
(GridLayout(2,1)). - Mettre ajour la couleur de fond du panel de la
fenêtre - Créer deux JPanel avec la bordure
- Mettre à jours les couleurs de fonds
- Ajouter les JPanel dans la fenêtre
- Enfin afficher la fenêtre