Interface graphique avec Java - kamrablog.files.wordpress.com · Pour créer des fenêtres, Java...

Post on 15-Jul-2019

223 views 0 download

Transcript of Interface graphique avec Java - kamrablog.files.wordpress.com · Pour créer des fenêtres, Java...

Interface graphique avec Java

S. RITAL

Plan

● Ma première fenêtre● Animation● Les boutons● Multi-threading● Menu, Barre d'outils, ● Le Pattern MVC● Les interfaces Observer / Observable● Calculatrice

Les boîtes à outils graphiques

● Java propose deux boîtes à outils graphiques :– AWT (Abstract Window Toolkit)

● depuis la version 1.0● Dépend d'OS● Lourde

– SWING ● depuis la version 1.2● Ne dépend pas d'OS● Légére

Swing

● Swing est une extension des AWT– nombreux nouveaux composants

– nombreuses facilités

– séparation entre● modèle (données)● aspect visuel (UI)● contrôle

● Les composants sont légers, sauf JApplet, JWindow, JFrame, JDialog

J C h e c k B o x

J R a d i o B u t t o n

J T o g g l e B u t t o n

J B u t t o n

J M e n u

J R a d i o B u t t o n M e n u I t e m

J C h e c k B u t t o n M e n u I t e m

J M e n u B u t t o n

A b s t r a c t B u t t o n

J C o l o r C h o o s e r

J C o m b o B o x

J I n t e r n a l F r a m e

J L a b e l

J L i s t

J M e n u B a r

J O p t i o n P a n e

J P a n e l

J P o p u p M e n u

J P r o g r e s s B a r

. . .

J C o m p o n e n t

C o n t a i n e r

J C o m p o n e n t

J A p p l e t

A p p l e t

P a n e l

J W i n d o w

J F r a m e

F r a m e

J D i a l o g

D i a l o g

W i n d o w

C o n t a i n e r

C o m p o n e n t

O b j e c t

Ma première fenêtre

✗ JFrame✗ JPanel✗ Graphics & Graphics 2D

Ma première fenêtre

Ma première fenêtre

Ma première fenêtre

JFrame

Une JFrame contient une fille unique, de la classe JRootPane

Cette fille contient deux filles, glassPane (JPanel) et layeredPane (JLayeredPane)

La layeredPane a deux filles, contentPane (JPanel) et menuBar (null JMenuBar)

On travaille dans contentPane.JApplet, JWindow et JDialog sont semblables.

g l a s s P a n e

c o n t e n t P a n e m e n u B a r

l a y e r e d P a n e

J R o o t P a n e

J F r a m e

class Tout extends JFrame { Tout() { JPanel panel; getContentPane().add(panel); ... }...}

Objet JFrame

● JFrame

● RootPane conteneur principal qui contient les autres composants ;

● le LayeredPane (en violet), qui forme juste un panneau composé du conteneur global et de la barre de menu (MenuBar) ;

● La menuBar (orange)

● le content pane (en rose) : c'est dans celui-ci que nous placerons nos composants ;

● le GlassPane (en transparence), couche utilisée pour intercepter les actions de l'utilisateur avant qu'elles ne parviennent aux composants.

Il existe d'autres types de fenêtre : la JWindow, une JFrame sans bordure et non draggable (déplaçable), et la JDialog, une fenêtre non redimensionnable.

Look and fel

Trois “look and feel” existent, de noms"com.sun.java.swing.plaf.windows.WindowsLookAndFeel"

"com.sun.java.swing.plaf.motif.MotifLookAndFeel"

"javax.swing.plaf.metal.MetalLookAndFeel”

On essaye de l’utiliser parUIManager.setLookAndFeel(lf);

et de l’appliquer à la racine de l’arbre parSwingUtilities.updateComponentTreeUI(

SwingUtilities.getRoot(this));

Objet JPanel

● Voici le marche à suivre :

– Importer la classe javax.swing.JPanel dans notre classe héritée de JFrame.

– Instancier un JPanel puis lui spécifier une couleur de fond pour mieux le distinguer.

– Avertir notre JFrame que ce sera notre JPanel qui constituera son content pane.

Graphics & Graphics2D

● La classe Graphics2D est une classe dérivée de Graphics

Objet Graphics

Objet Graphics

Résumé.

●Pour créer des fenêtres, Java fournit les composants swing (dans javax.swing) et awt (dans java.awt).

●Une JFrame est constituée de plusieurs composants.

●Par défaut, une fenêtre a une taille minimale et n'est pas visible.

●Un composant doit être bien paramétré pour qu'il fonctionne à votre convenance.

●L'objet JPanel se trouve dans le package javax.swing.

●Un JPanel peut contenir des composants ou d'autres conteneurs.

●Lorsque vous ajoutez un JPanel principal à votre fenêtre, n'oubliez pas d'indiquer à votre fenêtre qu'il constituera son content pane.

●Pour redéfinir la façon dont l'objet est dessiné sur votre fenêtre, vous devez utiliser la méthode paintComponent() en créant une classe héritée.

●Cette méthode prend en paramètre un objet Graphics.

●Cet objet doit vous être fourni par le système.

●C'est lui que vous allez utiliser pour dessiner dans votre conteneur.

●Pour des dessins plus évolués, vous devez utiliser l'objet Graphics2D qui s'obtient en effectuant un cast sur l'objet Graphics

Animation

✗ Travaux pratiques

TP.

Les Boutons

✗ Objet JButton✗ Positionner✗ Interagir✗ Classes interne et anonymouse✗ Travaux pratiques : Calculatrice✗ Importer vos applications en JAR

Objet JButton

Objet JButton

Positionner

BorderLayout

Positionner

GridLayout

Positionner

BoxLayout

Interagir

MouseListener

Interagir

ActionListener

Interagir

Classes internes

Classes anonymes

TP.

Notre propre calculatrice !

Importer votre application en .JAR

Multi-Threading

●Pourquoi ?●

Multi - threading

En cas de problème, la fenêtre...

Multi - threading

Thread principal

Deuxième Thread

Multi-Threading par héritage

Java utilise un ordonnanceur

Multi – Threading par héritage

Un thread peut présenter plusieurs états :

– NEW : lors de sa création

– RNNABLE : lorsqu'on invoque la méthode start(), le thread est prêt à travailler.

– TERMINATED : lorsque le thread a effectué toutes ses tâches ; on dit aussi qu'il est « mort ». Vous ne pouvez alors plus le relancer par la méthode start().

– TIMED_WAITING : lorsque le thread est en pause (quand vous utilisez la méthode sleep(), par exemple).

– WAITING : lorsque le thread est en attente indéfinie.

– BLOCKED : lorsque l'ordonnanceur place un thread en sommeil pour en utiliser un autre, il lui impose cet état.

Multi-threading par héritage

Mutli-threading par héritage

Multi-threading par Runnable

Multi-threading par Runnable

Multi-threading par Runnable

Autres objets Swing

Résumé

● Un nouveau thread permet de créer une nouvelle pile d'exécution.

● La classe Thread et l'interface Runnable se trouvent dans le package java.lang, aucun import spécifique n'est donc nécessaire pour leur utilisation.

● Un thread se lance lorsqu'on invoque la méthode start().

● Cette dernière invoque automatiquement la méthode run().

● Les opérations que vous souhaitez effectuer dans une autre pile d'exécution sont à placer dans la méthode run(), qu'il s'agisse d'une classe héritant de Thread ou d'une implémentation de Runnable.

● Pour protéger l'intégrité des données accessibles à plusieurs threads, utilisez le mot clé synchronized dans la déclaration de vos méthodes.

● Un thread est déclaré mort lorsqu'il a dépilé la méthode run() de sa pile d'exécution.

● Les threads peuvent présenter plusieurs états : NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING et TERMINATED.

Pattern MVC

● MVC va vous apprendre à découper vos codes en trois parties : modèle, vue et contrôleur.

Vue

● Ce que l'on nomme « la vue » est en fait une IHM. Elle représente ce que l'utilisateur a sous les yeux. La vue peut donc être :– une application graphique Swing, AWT, SWT pour

Java (Form pour C#…) ;

– une page web ;

– un terminal Linux ou une console Windows ;

– etc.

Vue

Modèle

● Le modèle peut être divers et varié. C'est là que se trouvent les données. Il s'agit en général d'un ou plusieurs objets Java. Ces objets s'apparentent généralement à ce qu'on appelle souvent « la couche métier » de l'application et effectuent des traitements absolument transparents pour l'utilisateur. Par exemple, on peut citer des objets dont le rôle est de gérer une ou plusieurs tables d'une base de données. En trois mots, il s'agit du cœur du programme !

Contrôleur

● Cet objet - car il s'agit aussi d'un objet - permet de faire le lien entre la vue et le modèle lorsqu'une action utilisateur est intervenue sur la vue.

● C'est cet objet qui aura pour rôle de contrôler les données.

Scénario

● Dans une application structurée en MVC, voici ce qu'il peut se passer :

– l'utilisateur effectue une action sur votre vue ;

– l'action est captée par le contrôleur, qui va vérifier la cohérence des données et éventuellement les transformer afin que le modèle les comprenne. Le contrôleur peut aussi demander à la vue de changer ;

– le modèle reçoit les données et change d'état (une variable qui change, par exemple) ;

– le modèle notifie la vue (ou les vues) qu'il faut se mettre à jour ;

– l'affichage dans la vue (ou les vues) est modifié en conséquence en allant chercher l'état du modèle.

MVC 1 & MVC 2

● MVC 1, Chaque modèle possède son propre contrôleur.

● MVC 2, Présence d'un super contrôleur.

Des objets qui parlent et qui écoutent : le pattern observer

Il fait communiquer des objets entre eux ;c'est un bon moyen d'éviter le couplage d'objets.

Le pattern Observer

● La vue implémente l'interface Observer

● Le modèle implémente l'interface Observable

Calculatrice.

Fenêtre

JFrame

CalculetteContrôleur

AbstractContrôleur

Calculette

AbstractModelObserver

Observable

héritage

implémente

use

héritage

héritage

implémente

use

JPanelJButton

Découpage en packages

Fenêtre

JFrame

CalculetteContrôleur

AbstractContrôleur

Calculette

AbstractModelObserver

Observable

héritage

implémente

use

héritage

héritage

implémente

use

JPanelJButton

Résultats

Découpage en packages