Chap4_javaawt

  • Uploaded by: Oussama Mimouni
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Chap4_javaawt as PDF for free.

More details

  • Words: 2,572
  • Pages: 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 Les layouts Les images Animations Les polices Gestion des événements

© Rémy Courdier (Révisé M/ GANGAT)

03/27/99

SWING Nouvelle hiérarchie Quelques composants Quelques Thèmes Les applets Les composants

1996-2003 - Java AWT SWING - Version du cours 2.8

2

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 Web La classe Applet est fournie dans java.applet une applet dérive d’un Panel

Application code exécutable de manière autonome possède en générale une Frame

AWT Couche d’interfaçage graphique portable Pour Applets et Applications Java Protocoles d’agencement d’éléments graphiques Protocoles de gestion d’événements la boite à outils AWT est fournie dans java.awt © Rémy Courdier (Révisé M/ GANGAT)

03/27/99

pas d’accès au disque pas de menus pas de boites de dialogues modales problèmes de gestions de boites de dialogues.

Points de vigilance temps de chargements Java propose les fichier JAR (Java ARchive) : compression dans un fichier signé chargeable en une seule transaction réseau de toutes les ressources d’une applet perte d’informations possible quand l’utilisateur change de page ou ferme son navigateur inopinément

1996-2003 - Java AWT SWING - Version du cours 2.8

4

2

Iremia, R.Courdier

AWT : Abstract Window Toolkit Développement d’une Applet Les méthodes init() : invoquée lorsque l’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 à l’appl stop(): invoquée chaque fois que l’applet n’est plus visable dans le browser Web et avant destroy() start() : invoquée chaque fois que 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 des élements graphiques de l’applet (fait partie du scénario d’”update()” d’un Component awt) © Rémy Courdier (Révisé M/ GANGAT)

//Fichier HTML pour Applet ... ...

//Fichier Applet1.java import java.applet.*; import java.awt.*; public class Applet1 extends Applet { public 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 informatiques majeurs : MS-Windows, UNIX OSF/Motif, Mac OS7/8, OS/2 Presentation Manager, etc.

// Fichier Appi.java import java.awt.*; public class Appli extends Frame { public Appli() { // constructeur joue le role // de la methode init() de // l’applet ... }

Il peut y avoir certaines modifications du look-and-feel de l’OS natif induites par l’AWT qui impose son propre mécanisme de gestion des éléments d’interfaces graphique. Attention a réaliser du code 100% “pure” Java. (...Java SDK 2.0 de Microsoft, encore lui... )

public static void main (...) { Appli app = new Appli(); app.show(); } }

© Rémy Courdier (Révisé M/ GANGAT)

03/27/99

1996-2003 - Java AWT SWING - Version du cours 2.8

6

3

Iremia, R.Courdier

AWT : Abstract Window Toolkit Principales classes “component“ de l’AWT Component : classe de base Container : gestionnaire de composants Window : Fenêtre sans bordure Frame : Fenêtre avec bordure Dialog : Boite de dialogue Panel : conteneur pour agencement Canvas : Fenêtre pour dessiner

Contrôles de Dialogue : Button : Boutton Checkbox : Boite à cocher + Radio Choice : sorte de combo box Label : Texte statique List : Liste à choix Scrollbar : Barre de défilement TextArea : champs de texte multiligne TextField : champ de texte simple © Rémy Courdier (Révisé M/ GANGAT)

Component Button Canvas Checkbox Choice Container Panel Applet Window Dialog FileDialog Label List Scrollbar TextComponent TextArea TextField

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() : void hide() : Dimension size() : void resize(int larg, int haut) : Rectangle bounds() : void enable() : void disable() : void repaint() : void update(Graphics g) : void paint(Graphics g) : void pack(): avec getPreferedSize()

© Rémy Courdier (Révisé M/ GANGAT)

03/27/99

Affiche le composant Masque le composant Retourne la taille largeur, hauteur Re-dimensionne le composant Défini une zone rectangulaire Active le composant Désactive le composant pour demander de rafraichissement Appelé par repaint(), par défaut efface le fond Appelé par update() Redessine le composant Retaille la fenêtre principale pour l’adapter au composant

1996-2003 - Java AWT SWING - Version du cours 2.8

8

4

Iremia, R.Courdier

AWT : Abstract Window Toolkit Principales autres classes de l’AWT dessin : la classe Graphics classe utilisée pour dessiner, afficher du texte, etc dans une Fenêtre exemple : drawLigne, drawRect, fillRect, fillPolygon, drawString, etc... cette classe possède également des méthodes pour changer de Font ou de Color L’accès à cette classe s’effectue généralement dans la méthode paint() des composants

Agencement : les classes Layout les “layout” permettent d’agencer les Components dans un Container Ne pas positionner par programme les composants graphiques. ...Problème de résolution d’écrans, de système d’exploitation,... Panel p = new Panel(); p.setLayout(new GridLayout(2,3));

© Rémy Courdier (Révisé M/ GANGAT)

Color Dimension Event Component Button ... Graphics Image Point MenuComponent MenuBar MenuItem Menu LayoutManager BorderLayout //West East Center // North South CardLayout //onglets simples FlowLayout //par défaut GridBagLayout//Grille flexible GridLayout //Grille

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)

03/27/99

1996-2003 - Java AWT SWING - Version du cours 2.8

10

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)

03/27/99

1996-2003 - Java AWT SWING - Version du cours 2.8

12

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 Une animation consiste à afficher une suite d’images et à forcer le rafraîchissement public void paint(Graphics g) { g.drawImage(mesImage[numimage],x,y,this); }

while(true) { x+= vitessex; y+= vitessey; numimage++; 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)

03/27/99

1996-2003 - Java AWT SWING - Version du cours 2.8

14

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)

03/27/99

1996-2003 - Java AWT SWING - Version du cours 2.8

16

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)

03/27/99

1996-2003 - Java AWT SWING - Version du cours 2.8

18

9

Iremia, R.Courdier

AWT : Abstract Window Toolkit La gestion des événements : exemple /** Fichier AppEvent.java */ import java.awt.* import java.awt.event.* import java.applet.* public class AppEvent extends Applet { Button b1 = new Button(“Bouton1”); b2 = new Button(“Bouton2”); TextField t1 = new TextField(30); public init() { b1.addActionListener(new LB1()); b2.addActionListener(new LB2()); t1.addTextListener(new LT1T()); t1.addActionListener(new TK1A()); t1.addKeyListener(new TK1K()); add(b1); add(b2); add(t1); } public class LB1 implements ActionListener { public void actionPerformed (ActionEvent e) ...}

© Rémy Courdier (Révisé M/ GANGAT)

public class TK1K extends KeyAdapter { public void KeyTyped (KeyEvent e) { if (e.getKeyChar() == KeyEvent.VK_BACK_SPACE) {...} ...} public static void main (...) { AppEvent myApplet = new AppEvent(); Frame aFrame =new Frame(“titre”); WindowAdapter wa = new WindowAdapter() { public void windowClosing (WindowEvent e) { system.exit(0); } aFrame.addWindowListener (wa); aFrame.add(“Center”, myApplet); aFrame.setSize(250,250); myApplet.init(); myApplet.start(); aFrame.setVisible(true); } } // programme Appli ou Applet

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 activeCaption activeCaptionText activeCaptionBorder inactiveCaption inactiveCaptiveText inactiveCaptionBorder window windowBorder windowText menu © Rémy Courdier (Révisé M/ GANGAT)

03/27/99

9 9 9 9 9 9 9 9 9 9 9

menuText text textText textHighlight textHighlightText textInactiveText control controlText controlHighlight controlLtHighlight controlShadow

9 9 9 9

controlDkShadow scrollbar info infoText

1996-2003 - Java AWT SWING - Version du cours 2.8

20

10

Iremia, R.Courdier

Java AWT Impression l’impression est possible depuis les application Java mais pas depuis une Applet Java

/** objet PrintJob */ ... class PrintData { public PrintJob pj; public int pageWidth, pageHeight; PrintData(String jobName) { pj = getToolkit().getPrintJob( PrintDemo.this, jobName, null); if (pj!= null) {

récupération d’un objet PrintJob depuis un objet Toolkit par la méthode getPrintJob()

pW=pj.getPageDimension().width;

les mécanismes d’impression Java ne sont pas completement automatisés

pH=pj.getPageDimension().height; g = pj.getGraphics; } } }

© 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)

03/27/99

1996-2003 - Java AWT SWING - Version du cours 2.8

22

11

Iremia, R.Courdier

Sommaire AWT : Abstract Window Toolkit Applet et application Frame, Panel et Layout Composants GUI Les menus Les layouts Les images Animations Les polices Gestion des événements

© Rémy Courdier (Révisé M/ GANGAT)

SWING Nouvelle hiérarchie Quelques composants Quelques Thèmes Les applets Les composants

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)

03/27/99

1996-2003 - Java AWT SWING - Version du cours 2.8

24

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)

03/27/99

1996-2003 - Java AWT SWING - Version du cours 2.8

26

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.

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)

03/27/99

1996-2003 - Java AWT SWING - Version du cours 2.8

28

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)

03/27/99

1996-2003 - Java AWT SWING - Version du cours 2.8

30

15

More Documents from "Oussama Mimouni"

Javascript V2
June 2020 1
Chap7_javanet
June 2020 1
Chap2_langagejava
June 2020 2
Chap4_javaawt
June 2020 3
Proganim99
June 2020 2