DEUG MIAS Option Info Introduction JAVA - PowerPoint PPT Presentation

1 / 50
About This Presentation
Title:

DEUG MIAS Option Info Introduction JAVA

Description:

S'il y a un changement dans le mod le, celui-ci rafra chit TOUTES ses vues (View) ... Quand le programme doit activement collecter les informations sur ce ... – PowerPoint PPT presentation

Number of Views:94
Avg rating:3.0/5.0
Slides: 51
Provided by: sig9
Category:

less

Transcript and Presenter's Notes

Title: DEUG MIAS Option Info Introduction JAVA


1
DEUG MIAS Option Info Introduction à JAVA
  • Olivier Sigaud
  • LIP6/AnimatLab
  • olivier.sigaud_at_lip6.fr
  • 01.44.27.88.53

2
Plan du cours 7 Interfaces graphiques en JAVA
  • Le modèle MVC
  • Programmation par événements
  • Applet et Application
  • Evolutions des modèles de sécurité
  • AWT et Swing
  • Présentation générale de Swing
  • Coder une application Swing

3
  • Le modèle MVC (pour Model, View, Controller)

Utilisateur
voit 
utilise
View
Controller
manipule
rafraîchit
Model
Application
4
  • Model  le cur de lapplication (état et
    données).
  • S'il y a un changement dans le modèle,
  • celui-ci rafraîchit TOUTES ses vues (View).
  • Controller  linterface en entrée présentée à
    lutilisateur pour manipuler lapplication.
  • View  linterface en sortie présentée à
    lutilisateur pour représenter des données du
    Modèle.

5
  • MVC  design pattern  issu de Smalltalk-80
  • Peut servir à autre chose quaux interfaces
    graphiques.
  • Exemples  log, interactions entre applications
    distantes, réflexes
  • Tout objet ayant besoin dinformations sur les
    changements du Modèle doit être une Vue
    répertoriée auprès du modèle (registered view).
  • Toute la gestion des événements en java est basée
    sur un concept  MVC .

6
Programmation par événements
  • Un modèle de programmation MVC où les échanges
    entre Modèle, View et Controleur seffectuent
    sous forme dévénements.
  • Adapté aux IHM quand le programme veut savoir
    ce que fait l'utilisateur
  • Deux méthodes dattentes dévénements
  • boucle programmeur ou boucle système

7
Avant Le polling
  • Quand le programme doit activement collecter les
    informations sur ce que fait l'utilisateur.
  • En Pratique après initialisation, on regarde si
    l'utilisateur a fait quelque chose (1)
  • lecture ACTIVE de létat des boutons, des cases à
    cocher, des curseurs.
  • On fait ce quil y a à faire.
  • Et. On reboucle en (1)

8
Inconvénients
  • Le polling marche, mais
  • 1) tout le code de gestion des événements est au
    même endroit (dans la boucle).
  • 2) tendance à complexifier le traitement des
    événements
  • 3) la boucle tourne tout le temps et consomme des
    cycles CPU
  • Pour éviter certains de ces problèmes

Programmation par événements
9
Caractéristiques
  • Actions abstraites de l'utilisateur sous forme
    d'événements qui décrivent avec suffisamment de
    détails les actions de l'utilisateur.
  • Un processus système se charge de produire des
    événements destinés à lutilisateur.

10
Deux méthodes dattentes dévénements
fonction bloquante unique(dans une boucle
programmeur) ou diffusion par le
système(protocole)
11
Les Applets
12
Applet et Application
  • Applet petite application téléchargée dans un
    navigateur web.
  • Héritée de la classe Applet (ou JApplet cf.
    loin)
  • Bénéficie dun contexte graphique déjà créé
  • Contexte dexécution protégé (SandBox contrôle
    daccès)
  • Quatre méthodes principales init(), start(),
    stop(), destroy()
  • Application ensemble autonome de classes,
    exécutables sur une VM (Virtual Machine).

13
La classe Applet
  • public class Applet extends java.awt.Panel
  • public void start()
  • public void stop()
  • public void init()
  • public boolean isActive()
  • Il existe une classe JApplet en SWING

14
Installer une Applet
  • Disposer dun fichier HTML dans lequel est placée
    une balise permettant de mettre lapplet sur la
    page web
  • Lapplet démarre quand on consulte la page web
  • Possibilité de passer des paramètres

15
Exemple de fichier HTML
  • ltHEADgtlt/HEADgt
  • ltBODYgt
  • ltAPP classTetris x10 y20gt
  • ltAPPLET codebase classes/beta 
    code Tetris.class  width120 height250gt
  • ltPARAM namex value10gt
  • ltPARAM namex value10gt
  • lt/APPLETgt
  • lt/BODYgt
  • Seule la partie en bleu est obligatoire

16
Sécurité
17
Java et sécurité Evolutions
  • Modèle de sécurité du JDK 1.0
  • Liberté totale daccès pour le code local
    (application)
  •  Restriction totale  pour le code téléchargé
  • Un gestionnaire de sécurité contrôle le tout.

18
Modèle de sécurité du JDK 1.1
  • Applet  signée  code considéré comme du code
    local.
  • Applets non  trustées  continuent dêtre
    exécutées dans  le bac à sable 
  • Applets signées signatures respectives livrées
    sous forme de fichiers JAR signés (Java Archive)

19
JDK 1.2 (et 1.3, 1.4)
  • Tout code (local ou distant) peut être soumis à
    contrôle daccès.
  • Des Domaines regroupent des classes ayant les
    mêmes droits sur les mêmes ressources.
  • Un Domaine peut être configuré comme  sandBox 
  • Les applications ne sont pas restreintes par
    défaut.
  • Permet une gradation de permissions daccès
    depuis laccès total à la restriction totale.

20
Swing
21
AWT et Swing
  • Abstract Window Toolkit jdk1.0, jdk1.1
  •  premier jet 
  • basé sur des composants du système hôte.
  • composants  lourds 
  • Swing léger et tout en java !
  • pas de code natif
  • beaucoup plus puissant

22
Filiation suivant 2 critères traitement des
actions utilisateur et structure
Programmation événementielle
Polling
Gestion  à la main 
Xlib, OpenGL
Java AWT 1.0
Objets événements
Java AWT 1.1
Modèle par délégation
Java Swing
Composants  pur  Java
23
Présentation générale de Swing
Une des formes les plus abouties denvironnement
de création dIHM..
24
Un environnement graphique
  • Simple, léger, riche, puissant
  • Hiérarchie de constituants interchangeables
  • Agencement souple LayoutManagers
  • Gestion élégante des événements
  • Painting clair et hiérarchisé

25
Conteneurs de premier niveau
Conteneurs généraux
26
Conteneurs spécialisés
27
Contrôles de base
Frame
28
Afficheurs non éditables
29
Editeurs dinformations structurées ou formatées
Tree
Table
Text
30
  • Hiérarchie de constituants
  • Gestion souple de lagencement

Layout managers
31
  • Gestion des événements
  • un click, un caractère, un bouton enfoncé --gt un
    événement.
  • nimporte quel objet peut être notifié de cet
    événement. Il doit juste implémenter la bonne
    interface.
  •  Painting  clair et hiérarchisé
  • du composant le plus haut dans la hiérarchie vers
    le plus bas.
  • du background vers le foreground
  • quand le système le décide
  • déboggable  à cur 

32
Marche à suivre
33
Coder une application Swing
  • 1) Importer les packages swing.
  • 2) Construire une (ou plusieurs) fenêtre(s) de
    haut niveau.
  • 3) Créer des boutons et Labels
  • 4) Ajouter des composants aux Containers
  • 5) Gérer des événements
  • - Comment peindre dans un JPanel ?

34
1.  Importer les packages swing. 
  • import javax.swing.
  • Note les premiers JFC/Swing et des releases
    béta de JDK 1.2 ont utilisé des noms de package
    différents (com.sun. ).
  • La plupart des programmes ont aussi besoin
    dimporter les deux packages principaux de lAWT
    (Abstract Window Toolkit). 
  • import java.awt.
  • import java.awt.event.

35
2. Construire une (ou plusieurs) fenêtre(s) de
haut niveau.
  • Tout programme ayant une interface Swing comporte
    au moins un top-level Swing container  (JFrame,
    JDialog, ou, pour les applets, JApplet).
  • Un  top-level Swing container  procure
    lenvironnement dont les composants Swing ont
    besoin pour se dessiner et gérer les événements.

36
Petit exemple simple
  • public class SwingApplication ...
  • public static void main(String args
    ...
  • JFrame frame new
    JFrame("SwingApplication")
  • //création des composants
    internes au frame
  • // qui seront mis dans un
    container nommé  contenu ...
  • frame.getContentPane().add(cont
    enu, BorderLayout.CENTER)
  • // ajout dun listener
    dévénements de type  fenêtre 
    frame.addWindowListener(...)
  • // retaillage et calcul définitif des
    dimensions internes
  • frame.pack()
  • // affichage de lapplication
  • frame.setVisible(true)
  • // fin de la méthode main
  • // fin de la classe SwingApplication

37
  3. Créer des boutons et Labels
  • Exemple de code typique de création de bouton
  • JButton button new JButton( Je suis un
    bouton )
  • button.addActionListener(un  ActionListener ..
    .)
  • La première ligne crée le bouton.
  • La deuxième enregistre un gestionnaire
    dévénements pour ce bouton
  • voir plus loin  Gestion des événements 

38
4. Ajouts des composants aux Containers
  • Les applications Swing groupent les boutons et
    autres composants dans des containers (JPanel)
    avant de les insérer dans le JFrame.
  • On peut positionner un  gestionnaire
    dagencement  (ou Layout manager) dans le JPanel
    pour contraindre la disposition des composants
    quil contient.
  • Exemples

39
Exemple de code de création et dinitialisation
dun JPanel
  • // création du JPanel
  • JPanel jPanel new JPanel()
  • // une petite bordure pour faire joli.
  • jPanel.setBorder(BorderFactory.createEmptyBorder(3
    0, 30, 10, 30))
  • // un Layout manager qui aligne de gauche à
    droite les composants
  • jPanel.setLayout(new FlowLayout())
  • // on insère le bouton et un label
  • jPanel.add(button)
  • jPanel.add(label)

40
5. Gérer des événements
  • 1) déterminer qui va recevoir et traiter les
    événements provenant des composants (Controller
    dans le concept MVC) 
  • décider de la granularité (un ou plusieurs
    contrôleurs)
  • trouver les comportements (interface) à
    implémenter par ce (ou ces) contrôleur(s).
  • Par exemple   ActionListener pour les boutons,
    ChangeListener pour les JSlider etc.
  • 2) écrire les méthodes de ces interfaces dans les
    objets contrôleurs choisis.

41
La source
  • L'objet Source émet des événements.
  • Il existe une hiérarchie de classes dévénements
  • La source enregistre ses listeners par des
    méthodes setltEventTypegtListener ou
    addltEventTypegtListener.
  • Toutes les sources dévénements supportent un
    modèle multicast pour lémission Plusieurs
    listeners peuvent être ajoutés pour une seule
    source.
  • L'API na aucun a priori sur l'ordre dans lequel
    les événements sont délivrés.

42
Les listeners
  • Un objet listener est un objet qui implémente
    (remplit le contrat d) une interface spécifique.
  • Cette interface (ce contrat) prévoit une ou
    plusieurs méthodes qui peuvent être invoquées par
    une source dévénements.
  • Chaque listener reçoit une réplique identique de
    lévénement original.

43
Exemple
  • // dans un fichier MonGestionnaireDeBouton.java
  • public class MonGestionnaireDeBouton implements
    ActionListener
  • public void actionPerformed(ActionEvent e)
  • System.out.println(  bouton
    touché !! )
  • // fin de la méthode public void
    actionPerformed
  • // fin de la classe MonGestionnaireDeBouton
  • Pour que MonGestionnaireDeBouton puisse être
    ActionListener, il DOIT implémenter (offrir) la
    méthode actionPerformed
  • // dans le fichier de notre application graphique
    .
  • button.addActionListener(new MonGestionnaireDeBout
    on ())

44
Comment peindre dans un JPanel ?
public class MaClasse extends JPanel
public void paintComponent(Graphics g) // g
est la  boite à peinture  fournie par le
système // (fontes, styles de traits, couleurs
etc) super.paintComponent(g) //
pour peindre le fond // dessin
d un rectangle de w100, h200 en 10,
10 g.drawRect(10, 10, 100, 200)
// dessin d une image.
g.drawImage(image, 90, 0, 300, 62, this) //
dessin d une ligne rouge, on sélectionne la
couleur voulue g.setColor(java.awt.Color.red)
// ligne de x10, y10 a x2250, y2123
g.drawLine(0, 0, 250, 123)
// fin de public class MaClasse
45
Quelques classes utilitaires
  • Les Timers activent des ActionListeners à
    intervalles définis délai initial, délai de
    répétition.
  • EventListenerList Classe dans swing.event pour
    gérer des Listeners addXXXListener,
    removeXXXListener, fireXXXPerformed etc..
  • Utilisés par tous les Swing générateurs
    dévénements.
  • Package swingUtilities plus de 30 méthodes
    statiques utilitaires.

46
Exemple dutilisation Timers
// package à importer import javax.swing. //
création dun Timer de 1000 millisecondes (int)
de temps initial et de temps entre les actions
successives. Lobjet conteneur doit être un
ActionListener. Timer timerUneSeconde new
Timer(1000, this) // ajout dun autre
ActionListener timerUneSeconde.addActionListener(u
nAutreListener) //changement de la valeur de
temps initial timerUneSeconde.setInitialDelay(1000
0) // un seul déclenchement après le temps
initial... timerUneSeconde.setRepeats(false) //
et cest parti timerUneSeconde.start()
47
Exemple EventListenerList
// gestion à la manière dun vecteur de couples
(Classe du Listener - Listener)
EventListenerList listenerList new
EventListenerList() listenerList.add(listener1.ge
tClass(), listener1) listenerList.remove(listene
r2.getClass(), listener2) // Retour dun
tableau de paires (Classe du Listener - Listener)
// le tableau retourné est garanti non
null Object pairesClasseListener
listenerList.getListenerList() // Retour dun
tableau de listeners dun type
particulier EventListener listeners
listenerList.getListeners(Class uneClasse) //
exemple d utilisation appel de fooXXX(FooEvent
e) sur tous les // listeners de type Listener1
for (int i pairesClasseListener.length-2 i gt
0 i - 2) if (listenersi
listener1.getClass()) FooEvent
fooEvent new FooEvent(this)
((Listener1)listenersi1).fooXXX(fooEvent)

48
Package swingUtilities (1)
  • Plus de 30 méthodes statiques utilitairesregroupé
    es par catégories fonctionnelles
  • Méthodes de calcul calculs dintersections,
    dunions et de différences entre rectangles.
    Méthodes de calcul des dimensions dune String
    avec une fonte spécifique.
  • Méthodes de conversions de coordonnées entre
    composants graphiques.
  • Méthodes qui retournent des informations
    daccessibilité pour un composant donné.

49
Package swingUtilities (2)
  • Méthodes dextraction dobjets associés à un
    composant comme le propriétaire du focus, les
    ancêtres graphiques ou la fenêtre racine dans
    laquelle réside un composant.
  • Méthodes pour exécuter du code dun thread AUTRE
    que le thread de diffusion des événements.
  • Méthodes booléennes de test de relation, par
    exemple si un composant est lancêtre dun autre,
    si le thread courant est le dispatch thread ou
    quel bouton de la souris a été pressé
  • Méthodes de layout, de painting etc. pour un
    composant donné.

50
Vous dompterez Swing !
Write a Comment
User Comments (0)
About PowerShow.com