Vous êtes sur la page 1sur 15

Iremia, R.

Courdier

Chapitre 4 : AWT - SWING

Interface Homme Machine

Java
© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 1

Sommaire

AWT : Abstract Window Toolkit


Applet et application
Frame, Panel et Layout
Composants GUI
Les menus SWING
Les layouts Nouvelle hiérarchie
Les images Quelques composants
Animations Quelques Thèmes
Les polices Les applets
Gestion des événements Les composants

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 2

03/27/99 1
Iremia, R.Courdier

AWT – SWING
Présentation

AWT
Première interface graphique proposée par Sun
Appel direct au système d’exploitation pour l’affichage des composants
Interface différente selon l’OS
Mais + rapide
Peu de composants

SWING
Objectif : 100% de portabilité
Les composants sont dessinés par Java (seuls les codes de base accèdent à
l’OS via l’AWT)
Aspect identique
Plus gourmand en ressources
Plus de 40 composants différents

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 3

AWT : Abstract Window Toolkit


Applet - Application - AWT

Applet Applets : Restrictions


Code Java lancée par un navigateur pas d’accès au disque
Web pas de menus
La classe Applet est fournie dans pas de boites de dialogues
java.applet modales
une applet dérive d’un Panel problèmes de gestions de boites
Application de dialogues.
code exécutable de manière autonome Points de vigilance
possède en générale une Frame temps de chargements Java
propose les fichier JAR (Java
AWT
ARchive) : compression dans un
Couche d’interfaçage graphique portable fichier signé chargeable en une
Pour Applets et Applications Java seule transaction réseau de toutes
Protocoles d’agencement d’éléments les ressources d’une applet
graphiques perte d’informations possible
Protocoles de gestion d’événements quand l’utilisateur change de page
la boite à outils AWT est fournie dans ou ferme son navigateur
java.awt inopinément

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 4

03/27/99 2
Iremia, R.Courdier

AWT : Abstract Window Toolkit


Développement d’une Applet

Les méthodes //Fichier HTML pour


init() : invoquée lorsque l’applet Applet
est chargée pour les initialisations
destroy() : invoquée lorsque
l’applet est déchargée de la mémoire
...
pour libérer les ressources utiles à <applet
l’appl code=“Applet1“
stop(): invoquée chaque fois que width=200
l’applet n’est plus visable dans le
browser Web et avant destroy() height=200>
start() : invoquée chaque fois que </applet>
l’applet est visable dans le navigateur ...
Web et après le init()
paint() : appelée pour chaque fois
qu’il y a une mise à jour de la fenetre //Fichier Applet1.java
des élements graphiques de l’applet import java.applet.*;
(fait partie du scénario d’”update()” import java.awt.*;
d’un Component awt)
public class Applet1
extends Applet { public
© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 5
void paint (Graphics g)

AWT : Abstract Window Toolkit


Développement d’une Application Java

Une application Java a l’avantage ultime


d’être portable sur toutes les plate-formes // Fichier Appi.java
informatiques majeurs : MS-Windows,
UNIX OSF/Motif, Mac OS7/8, import java.awt.*;
OS/2 Presentation Manager, etc. public class Appli extends Frame {

public Appli() {
Il peut y avoir certaines modifications du
look-and-feel de l’OS natif induites par // constructeur joue le role
// de la methode init() de
l’AWT qui impose son propre mécanisme
// l’applet
de gestion des éléments d’interfaces
...
graphique.
}

Attention a réaliser du code 100% “pure” public static void main (...) {
Java. (...Java SDK 2.0 de Microsoft, Appli app = new Appli();
encore lui... )
app.show();
}
}

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 6

03/27/99 3
Iremia, R.Courdier

AWT : Abstract Window Toolkit


Principales classes “component“ de l’AWT

Component : classe de base


Container : gestionnaire de Component
composants Button
Window : Fenêtre sans bordure Canvas
Frame : Fenêtre avec bordure Checkbox
Choice
Dialog : Boite de dialogue
Container
Panel : conteneur pour agencement Panel
Canvas : Fenêtre pour dessiner Applet
Contrôles de Dialogue : Window
Dialog
Button : Boutton FileDialog
Checkbox : Boite à cocher + Radio Label
Choice : sorte de combo box List
Scrollbar
Label : Texte statique
TextComponent
List : Liste à choix TextArea
Scrollbar : Barre de défilement TextField
TextArea : champs de texte multiligne
TextField : champ de texte simple
© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 7

AWT : Abstract Window Toolkit


Principales méthodes utiles de la classe Component

void show() : Affiche le composant


void hide() : Masque le composant
Dimension size() : Retourne la taille largeur, hauteur
void resize(int larg, int haut) : Re-dimensionne le composant
Rectangle bounds() : Défini une zone rectangulaire
void enable() : Active le composant
void disable() : Désactive le composant
void repaint() : pour demander de rafraichissement
void update(Graphics g) : Appelé par repaint(),
par défaut efface le fond
void paint(Graphics g) : Appelé par update()
Redessine le composant
void pack(): Retaille la fenêtre principale pour
avec getPreferedSize() l’adapter au composant

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 8

03/27/99 4
Iremia, R.Courdier

AWT : Abstract Window Toolkit


Principales autres classes de l’AWT

dessin : la classe Graphics


Color
classe utilisée pour dessiner, afficher du
texte, etc dans une Fenêtre Dimension
exemple : drawLigne, drawRect, Event
fillRect, fillPolygon, Component
drawString, etc... Button
cette classe possède également des ...
méthodes pour changer de Font ou de Graphics
Color
Image
L’accès à cette classe s’effectue
généralement dans la méthode paint() des Point
composants MenuComponent
MenuBar
MenuItem
Agencement : les classes Layout Menu
les “layout” permettent d’agencer les
LayoutManager
Components dans un Container
BorderLayout //West East Center
Ne pas positionner par programme les
// North South
composants graphiques.
CardLayout //onglets simples
...Problème de résolution d’écrans, de
système d’exploitation,... FlowLayout //par défaut
Panel p = new Panel(); GridBagLayout//Grille flexible
p.setLayout(new GridLayout(2,3)); GridLayout //Grille

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 9

AWT : Abstract Window Toolkit


Principaux types de layout

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 10

03/27/99 5
Iremia, R.Courdier

AWT : Abstract Window Toolkit


La gestion d’un menu

La barre de menu : la Classe MenuBar


Frame fr = new Frame();
MenuBar mb = new MenuBar();
fr.setMenuBar(mb);

Menu déroulant de base : la classe Menu


Menu menuFichier = new Menu (“Fichier”);
Menu menuEdition = new Menu (“Edition”);
Menu menuAide = new Menu (“Aide”);
mb.add(menuFichier ); mb.add(menuEdition );
// menu d’aide positionné à droite de la barre
mb.add(menuAide); setHelpMenu(menuAide);

sous-menu dans un Menu : la classe MenuItem


MenuItem itemOuvrir = new MenuItem (“Ouvrir”);
MenuItem itemFermer = new MenuItem (“Fermer”);
menuFichier.add(itemOuvrir);
menuFichier.add(itemFermer );
menuFichier.addSeparator(); ...

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 11

AWT : Abstract Window Toolkit


Les images

Classe Image
représente les images de fomats normalisés : GIF, JPEG, ...
Chargement d’une image :
Différence de méthode selon le type de code : Application ou Applet
Application :
Toolkit tk= Toolkit.getDefaultToolkit();
Image uneImage = tk.getImage(“image.gif”);
Applet :
Image uneImage = getImage(getDocumentBase(), “image.gif”);

Affichage d’une image :


public void paint (Graphics g) {
g.drawImage(uneImage,0,0,this);
}

Icone d’une fenêtre:


uneFrame.setIconImage(uneImage);

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 12

03/27/99 6
Iremia, R.Courdier

AWT : Abstract Window Toolkit


Les images

Par défaut le chargement des réel des images s’effectue


lors de son l’affichage

Principe pour forcer le chargement des images au début


du programme
public void chargeFond(String strFond) {
MediaTracker tracker = new MediaTracker(this);

Image m_fond =
Toolkit.getDefaultToolkit().getImage(strFond);

// Force le chargement de l'image


tracker.addImage(m_fond,0);
try { tracker.waitForID(0); }
catch (InterruptedException e) { System.err.println(e); }
}

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 13

AWT : Abstract Window Toolkit


Animation
while(true) {
Une animation consiste à afficher une suite x+= vitessex;
d’images et à forcer le rafraîchissement y+= vitessey;
public void paint(Graphics g) { numimage++;
g.drawImage(mesImage[numimage],x,y,this); repaint();
} }

Pour éviter le scintillement, méthode du doublebuffering


// Buffer offscreen
Image bufferImage;
Graphics bufferGraphics;
public void update(Graphics g) {
// création d’une image non visible et son «Graphic»
if (bufferImage==null) {
bufferImage = createImage(getSize().width,getSize().height);
bufferGraphics = bufferImage.getGraphics();
}
// réalisation de tous nos dessins sur cette image
paint(bufferGraphics);

// « transfert » de l’image sur l’écran


g.drawImage(bufferImage,0,0,this);
}

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 14

03/27/99 7
Iremia, R.Courdier

AWT : Abstract Window Toolkit


Les Polices de caractères

Classe Font
représente une police de caractères indépendante de l’OS

Récupération de la liste des polices disponibles


String strFontTab [];
strFontTab = (Toolkit.getDefaultToolkit()).getFontList();
system.out.println(“nombre de polices : “ + strFontTab.length);
for (int i = 0; i< strFontTab.length; i++){
// affiche chaque nom de police Helvetica, Arial, ...
system.out.println(strFontTab[i]);
}

Sélection d’une Font :


Label unLabel; // une zone de texte
unLab.setFont(new Font(“Courier“, Font.Bold, 12);

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 15

AWT – SWING
Les évènements

Programmation événementielle
pilotage du code par des événements (si click de souris alors…)
Les environnements actuels multi-fenêtres X Windows, MS-Windows, Mac OS,...
utilisent ce principe

Principe
Tout component peut déclencher un événement
Chaque type d’événement est défini par une classe spécifique
Lorsqu’un événement est déclenché il peut être capté par des “listeners”
(écouteurs) qui réalisent alors des traitements appropriés
La source d’un événement et les traitements associés sont séparés

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 16

03/27/99 8
Iremia, R.Courdier

AWT – SWING
Les évènements

Quelques Listeners (écouteurs)

Clavier: KeyListener
Clicks de la souris: MouseListener
Déplacement de la souris: MouseMotionListener
Roulette de la souris: MouseWheelListener
Ouverture,Femeture….Fenêtre: WindowListener
Changement de valeur dans une zone de texte: TextListener
Action (p.ex appui sur un boutton) : ActionListener
HyperlinkListener, MenuListener…..

Voir java.awt.event et javax.swing.event

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 17

AWT – SWING
Les évènements
Soit XXXEvent un Type d’Event
peut être ActionEvent, KeyEvent, FocusEvent, MouseEvent,...
pour capter un événement XXXEvent
on s’enregistre auprès du Event Handler avec un XXXListener
unComponent.addXXXListener(new CListener());
// désactivation par : removeXXXListener();
on implémente notre Classe Listener
class CListener implements XXXListener {
...// définir ici toutes les méthodes de XXXListener
}
// OU lorsque XXXListener définit plusieurs méthodes
class CListener extends XXXAdapter {
...// définir ici certaines méthodes de XXXListener
}
On peut aussi utiliser une classe anonyme
monboutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(«boutton » +e.getSource()+« appuyé»);
}
});

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 18

03/27/99 9
Iremia, R.Courdier

AWT : Abstract Window Toolkit


La gestion des événements : exemple
/** Fichier AppEvent.java */
import java.awt.*
public class TK1K extends KeyAdapter {
import java.awt.event.*
public void KeyTyped (KeyEvent e) {
import java.applet.*
if (e.getKeyChar() ==
public class AppEvent extends Applet {
KeyEvent.VK_BACK_SPACE) {...}
Button
...}
b1 = new Button(“Bouton1”);
public static void main (...) {
b2 = new Button(“Bouton2”);
AppEvent myApplet = new AppEvent();
TextField t1 = new TextField(30);
Frame aFrame =new Frame(“titre”);
public init() {
WindowAdapter wa =
b1.addActionListener(new LB1());
new WindowAdapter() {
b2.addActionListener(new LB2());
public void windowClosing
t1.addTextListener(new LT1T());
(WindowEvent e)
t1.addActionListener(new TK1A());
{ system.exit(0); }
t1.addKeyListener(new TK1K());
aFrame.addWindowListener (wa);
add(b1); add(b2); add(t1);
aFrame.add(“Center”, myApplet);
}
aFrame.setSize(250,250);
public class LB1
myApplet.init();
implements ActionListener {
myApplet.start();
public void actionPerformed
(ActionEvent e) aFrame.setVisible(true);
...} }
} // programme Appli ou Applet
© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 19

Java AWT
Couleurs du “desktop”

Les couleurs de l’environnement graphique (Bureau)


courant sont initialisés automatiquement dans des
variables static de la classe SystemColor
deskstop 9 menuText 9 controlDkShadow
activeCaption 9 text 9 scrollbar
activeCaptionText 9 textText 9 info
activeCaptionBorder 9 textHighlight 9 infoText
inactiveCaption 9 textHighlightText
inactiveCaptiveText 9 textInactiveText
inactiveCaptionBorder 9 control
window 9 controlText
windowBorder 9 controlHighlight
windowText 9 controlLtHighlight
menu 9 controlShadow

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 20

03/27/99 10
Iremia, R.Courdier

Java AWT
Impression
l’impression est possible /** objet PrintJob */
...
depuis les application Java class PrintData {
mais pas depuis une Applet public PrintJob pj;
Java public int pageWidth, pageHeight;

PrintData(String jobName) {
récupération d’un objet pj = getToolkit().getPrintJob(
PrintJob depuis un objet null);
PrintDemo.this, jobName,

Toolkit par la méthode if (pj!= null) {


getPrintJob()
pW=pj.getPageDimension().width;

les mécanismes d’impression pH=pj.getPageDimension().height;


g = pj.getGraphics;
Java ne sont pas
}
completement automatisés }
}

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 21

AWT
Le presse-papier “clipboard”
Fonctionnalités offertes
Java supporte un certain nombre de fonctionnalités du clipboard
uniquement sur les String
possibilité de copier un objet String dans le clipboard au format text et
de lire un texte du clipboard dans un String
le modèle de gestion du clipboard est extensible avec la notion de
“Flavors”

Principe
import java.awt.datatransfer.*
...
Clipboard cl = getToolkit().getSystemClipboard();
...
cl.setcontents(aClipString, aClipString);
...
Transferable clipData=cl.getcontents(...);
try {
ClipString = (String)clipData.getTransferData(DataFlavor.stringFlavor);
catch { /* exception levé si pas de stringFlavor dans le clipboard ...*/ }

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 22

03/27/99 11
Iremia, R.Courdier

Sommaire

AWT : Abstract Window Toolkit


Applet et application
Frame, Panel et Layout
Composants GUI
SWING
Les menus
Les layouts Nouvelle hiérarchie
Les images Quelques composants
Animations Quelques Thèmes
Les polices Les applets
Gestion des événements Les composants

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 23

SWING
Différences par rapport à l’AWT

Plus grande variété de composants


Arbres, Tables, ToolTips..
boutons avec images, bordures…

Gestion des thèmes «LookAndFeel »


Selon l’OS: Windows,MacOs…
Thémes personnalisés…

Gestion automatique du double buffering

S’appuie en partie sur l’AWT

Consommateur de ressources

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 24

03/27/99 12
Iremia, R.Courdier

Swing
Une nouvelle hiérarchie

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 25

SWING
Quelques composants

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 26

03/27/99 13
Iremia, R.Courdier

Swing
Quelques « Look & Feel »

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 27

Swing
Les applets

Comme un pluggin standard: Java Plug In

Utilisation d'une autre balise que APPLET


OBJECT dans le cas de Explorer.
EMBED dans le cas de Netscape.

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH


= 400 HEIGHT = 50
codebase="http://java.sun.com/products/plugin/1.1.2/jinstall-
112-win32.cab#Version=1,1,2,0">

L’outil de SUN HTML Converter


Il permet de convertir les balises APPLET en OBJECT/EMBED avec
des scripts d’installation automatique du pluggin

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 28

03/27/99 14
Iremia, R.Courdier

Swing
Les composants

De haut niveau
JFrame, JDialog & JApplet
Pour leur ajouter des composants, il faut
passer par leur ContentPane
maFenetre.getContentPane().
add(new JButton(« test »));

Intermédiaires
Les JPanel, JScrollPane,JTabbedPane
monPanel.add(new JScrollPane(new
JLabel(«Test »)));

Atomiques
Les JButton, JLabel….

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 29

Références
Trail: Creating a GUI with JFC/Swing
http://java.sun.com/docs/books/tutorial/uiswing/

Le langage JAVA
http://cedric.cnam.fr/~farinone/Java/

© Rémy Courdier (Révisé M/ GANGAT) 1996-2003 - Java AWT SWING - Version du cours 2.8 30

03/27/99 15