24
Jean-Rémi LECQ Jean-Rémi LECQ Version 0.1 Version 0.1 Développement Développement d’interfaces d’interfaces graphiques en graphiques en Java à l’aide de Java à l’aide de SWING SWING

Jean-Rémi LECQ Version 0.1

  • Upload
    adonica

  • View
    58

  • Download
    1

Embed Size (px)

DESCRIPTION

Jean-Rémi LECQ Version 0.1. Développement d’interfaces graphiques en Java à l’aide de SWING. Sommaire. Introduction Rappel sur les JFC AWT Swing Première Application (TD1) Fenêtres, panneaux Fenêtres : JFrame, JDialog, JWindow Panneaux : JRootPane, J Panel, JMenuBar PremierJMenu (TD2) - PowerPoint PPT Presentation

Citation preview

Page 1: Jean-Rémi LECQ Version 0.1

Jean-Rémi LECQJean-Rémi LECQVersion 0.1Version 0.1

Développement Développement d’interfaces d’interfaces

graphiques en Java graphiques en Java à l’aide de à l’aide de

SWINGSWING

Page 2: Jean-Rémi LECQ Version 0.1

SommaireSommaire IntroductionIntroduction

Rappel sur les JFCRappel sur les JFC AWTAWT SwingSwing

Première Application (TD1)Première Application (TD1) Fenêtres, panneauxFenêtres, panneaux

Fenêtres : JFrame, JDialog, JWindowFenêtres : JFrame, JDialog, JWindow Panneaux : JRootPane, J Panel, JMenuBarPanneaux : JRootPane, J Panel, JMenuBar

PremierJMenu (TD2) PremierJMenu (TD2) Les évènementsLes évènements PremierJMenu (TD2 – suite) + SecondJMenu PremierJMenu (TD2 – suite) + SecondJMenu

+FocusEvent+FocusEvent

Page 3: Jean-Rémi LECQ Version 0.1

Rappel sur les JFCRappel sur les JFCJFC = Java Foundation Classes.JFC = Java Foundation Classes.

Ensemble de librairies Java permettant la Ensemble de librairies Java permettant la constructions d’applications graphiques constructions d’applications graphiques (GUI et graphiques) sous n’importe quel OS.(GUI et graphiques) sous n’importe quel OS.

Les 5 parties majeures des JFC :Les 5 parties majeures des JFC :AWT – SWING – Accessibility - Java2D AWT – SWING – Accessibility - Java2D - Internationalization- Internationalization

Page 4: Jean-Rémi LECQ Version 0.1

Native Windows Look and Feelsupported on Microsoft Windows only                                                                                                          

Native Mac Look and Feel "Aqua"implemented by Apple and supported on Mac only

                                                                                                         

Java Look and Feel "Metal"supported on all platforms                                                                                                          

Motif Look and Feel (Solaris & Linux)supported on all platforms                                                                                                          

Page 5: Jean-Rémi LECQ Version 0.1

1- Contexte1- ContexteD’abord…D’abord…

AWTAWT : Abstract Windowing Toolkit. : Abstract Windowing Toolkit.

Première librairie fournie par SUN pour Première librairie fournie par SUN pour le développement d’interfaces le développement d’interfaces graphiques.graphiques.

Eléments graphiques auront l’apparence Eléments graphiques auront l’apparence que l’OS leur donne (utilisation que l’OS leur donne (utilisation ressources systèmes via abstractions) !ressources systèmes via abstractions) !

Page 6: Jean-Rémi LECQ Version 0.1

1- Contexte1- ContexteEnsuite …Ensuite …

SWINGSWING : utilise des éléments d’AWT. : utilise des éléments d’AWT.

SWING peut être considérée comme une SWING peut être considérée comme une évolution d’AWT.évolution d’AWT.

Eléments graphiques dessinés par la Eléments graphiques dessinés par la librairie elle-même ! Composant graphique librairie elle-même ! Composant graphique peut ne pas avoir d’équivalent système.peut ne pas avoir d’équivalent système.

Donc -> Portabilité accrue.Donc -> Portabilité accrue.

SWING ne remplace pas AWT, c’est juste SWING ne remplace pas AWT, c’est juste un couche au dessus. un couche au dessus.

Page 7: Jean-Rémi LECQ Version 0.1

2- TD n°1 Première 2- TD n°1 Première application SWINGapplication SWING

Ordre des tâches à effectuer ;Ordre des tâches à effectuer ;1.1. Ecriture du code de la classe,Ecriture du code de la classe,2.2. Compilation (javac.exe) et debugage (?),Compilation (javac.exe) et debugage (?),3.3. Création du Manifest,Création du Manifest,4.4. Création de l’archive auto exécutable Création de l’archive auto exécutable

(jar.exe),(jar.exe),5.5. Exécution de notre archive auto Exécution de notre archive auto

exécutable (java.exe)exécutable (java.exe)

Page 8: Jean-Rémi LECQ Version 0.1

2.1- Ecriture du code de 2.1- Ecriture du code de la classela classeimportimport javax.swing.*; javax.swing.*;

publicpublic classclass PremiereApp { PremiereApp {privateprivate staticstatic String texte = "Hello World!"; String texte = "Hello World!";

publicpublic staticstatic voidvoid main(String[ ] args) main(String[ ] args){{

JFrame maFenetre = JFrame maFenetre = newnew JFrame( JFrame("ma première fenêtre SWING");"ma première fenêtre SWING");

maFenetre.setSize(250,80);maFenetre.setSize(250,80);JLabel monLabel = JLabel monLabel = newnew JLabel(texte, JLabel(texte,

SwingConstants.LEFT);SwingConstants.LEFT);maFenetre.getContentPane().add(monLabel);maFenetre.getContentPane().add(monLabel);maFenetre.show();maFenetre.show();maFenetre.setDefaultCloseOperation(maFenetre.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE);JFrame.EXIT_ON_CLOSE);}}

}}

Page 9: Jean-Rémi LECQ Version 0.1

2.2- Compilation 2.2- Compilation (javac.exe) et debugage(javac.exe) et debugage

Sous Eclipse ou autre Framework -> Sous Eclipse ou autre Framework -> automatique.automatique.

En ligne de commande -> En ligne de commande -> positionnez vous dans le répertoire positionnez vous dans le répertoire qui contient votre classe java, puis :qui contient votre classe java, puis :

"/"/pathtojavac.exepathtojavac.exe/javac" /javac" MaClass.javaMaClass.java

Page 10: Jean-Rémi LECQ Version 0.1

2.3 - Création du 2.3 - Création du ManifestManifest

Manifest -> Qu'est ce que c'est ?Manifest -> Qu'est ce que c'est ?C'est un fichier qui spécifie la classe C'est un fichier qui spécifie la classe "exécutable"."exécutable".Celle qui contient la méthode ???Celle qui contient la méthode ???

public static void main (String[ ] args){public static void main (String[ ] args){……

}}

Page 11: Jean-Rémi LECQ Version 0.1

2.3 - Création du 2.3 - Création du ManifestManifest

Créez un fichier Créez un fichier Manifest.mfManifest.mf..

Contenu :Contenu :Main-Class: MaClassMain-Class: MaClass

Attention :Attention :- Pas d'espace entre "Main-Class" et ":",- Pas d'espace entre "Main-Class" et ":",- un espace entre ":" et "MaClass",- un espace entre ":" et "MaClass",- (au moins) un retour à la ligne à la fin de cette - (au moins) un retour à la ligne à la fin de cette ligne !ligne !

Page 12: Jean-Rémi LECQ Version 0.1

2.4 - Création de 2.4 - Création de l’archive auto exécutable l’archive auto exécutable

(jar.exe)(jar.exe)Sous Eclipse ou autre Framework -> automatique.Sous Eclipse ou autre Framework -> automatique.

En ligne de commande -> positionnez vous dans le répertoire En ligne de commande -> positionnez vous dans le répertoire qui contient votre classe java, puis :qui contient votre classe java, puis :

"/"/pathtojarexepathtojarexe/jar" -cmf Manifest.mf NomduJar.jar /jar" -cmf Manifest.mf NomduJar.jar MaClass1.class MaClass2.classMaClass1.class MaClass2.class

Pour notre exemple :Pour notre exemple :

"/"/pathtojar.exepathtojar.exe/jar" -cmf Manifest.mf PremiereApp.jar /jar" -cmf Manifest.mf PremiereApp.jar PremiereApp.classPremiereApp.class

Sur moka :Sur moka : U:/ U:/pathtojar.exepathtojar.exe/> "C:\Program Files\java\/> "C:\Program Files\java\j2sdk1.4.1_02\bin\jar" j2sdk1.4.1_02\bin\jar"  -cmf manifest.mf PremiereApp.jar PremiereApp.class -cmf manifest.mf PremiereApp.jar PremiereApp.class

Page 13: Jean-Rémi LECQ Version 0.1

2.5- Exécution de notre 2.5- Exécution de notre archive auto exécutable archive auto exécutable

(java.exe)(java.exe)En mode "fenêtre" : double clic sur l'archive En mode "fenêtre" : double clic sur l'archive

auto exécutable "MonArchive.jar".auto exécutable "MonArchive.jar".

En mode console :En mode console :

"/"/pathtojava.exepathtojava.exe/java" -jar MonArchive.jar /java" -jar MonArchive.jar

Page 14: Jean-Rémi LECQ Version 0.1

2.6- Listing du contenu 2.6- Listing du contenu d'un jard'un jar

En mode console :En mode console :

jar –tvf MonArchive.jar jar –tvf MonArchive.jar

Page 15: Jean-Rémi LECQ Version 0.1

3 – Fenêtres, panneaux et 3 – Fenêtres, panneaux et borduresbordures

3.1- FENETRES3.1- FENETRESEn SWING :En SWING :

JFrame,JFrame, JDialog (fenêtres secondaires modales),JDialog (fenêtres secondaires modales), JWindow (Splash screen).JWindow (Splash screen).

Page 16: Jean-Rémi LECQ Version 0.1

JFrame

JRootPane

glassPane layeredPane ( JLayeredPane) (1 Jpannel par défaut)

contentPane menuBar (1 JPannel par défaut) (Null JmenuBar par défaut)

3.1.1- JFrame - 3.1.1- JFrame - ArchitectureArchitecture

Page 17: Jean-Rémi LECQ Version 0.1

3.1.1- JFrame - 3.1.1- JFrame - ArchitectureArchitecture

glassPane

menuBar

layeredPane

contentPane

Page 18: Jean-Rémi LECQ Version 0.1

3.2 – Les panneaux3.2 – Les panneauxConteneursConteneurs

JRootPane.JRootPane. glassPane (attrape événements).glassPane (attrape événements). layeredPane (conteneur de fenêtres filles),layeredPane (conteneur de fenêtres filles),

contentPane (JPane par défaut).contentPane (JPane par défaut). menuBar (null par défaut).menuBar (null par défaut).

JPanel : conteneur de composant(s), leur JPanel : conteneur de composant(s), leur organisation dépend d'un "layour organisation dépend d'un "layour manager".manager".

JMenuBar : "null", sinon unique par JMenuBar : "null", sinon unique par JFrame.JFrame.

Page 19: Jean-Rémi LECQ Version 0.1

3- TD n°2 Premier JMenu3- TD n°2 Premier JMenuCréer la fenêtre suivante (l'affichage seulement, Créer la fenêtre suivante (l'affichage seulement,

les évènements seront ajoutés après).les évènements seront ajoutés après).

Page 20: Jean-Rémi LECQ Version 0.1

3.2.4- La gestion des 3.2.4- La gestion des évènementsévènements

Evènement : action de l'utilisateur (en règle Evènement : action de l'utilisateur (en règle générale), clic sur un bouton; sélection, simple générale), clic sur un bouton; sélection, simple déplacement souris.déplacement souris.

Exemples de classes d’évènements :Exemples de classes d’évènements :FocusEvent : FocusEvent : Passage du focus à un Passage du focus à un

composantcomposantMouseEvent : MouseEvent : Clic sur un JPanelClic sur un JPanelActionEvent :ActionEvent : Clic sur un JButtonClic sur un JButtonDocumentEvent : DocumentEvent : Ajout d’une lettre à un Ajout d’une lettre à un

JTextFieldJTextField

Objet évènement Objet évènement contient des informations sur contient des informations sur son contexte d'apparition(coordonnée, source, son contexte d'apparition(coordonnée, source, valeur d'une touche).valeur d'une touche).

Page 21: Jean-Rémi LECQ Version 0.1

3.2.4- La gestion des 3.2.4- La gestion des évènementsévènements

Classe java.util.EventObject :Classe java.util.EventObject :Superclasse de tous les évènements.Superclasse de tous les évènements.

Exemple de classe d'évènements :Exemple de classe d'évènements :ActionEvent ActionEvent -> clic sur un composant,-> clic sur un composant,ComponentEventComponentEvent -> modification d'un -> modification d'un

composantcomposantContainerEvent ContainerEvent  -> composant ajouté à un -> composant ajouté à un

conteneurconteneurFocusEventFocusEventKeyEvent KeyEvent MouseEvent  MouseEvent 

Page 22: Jean-Rémi LECQ Version 0.1

3.2.4- La gestion des 3.2.4- La gestion des évènementsévènements

Listener : Listener : objet java à l'écoute d'un objet java à l'écoute d'un évènement sur un composant déterminé.évènement sur un composant déterminé.-info sur lui-même,-info sur lui-même,-sur l'objet à son origine (source).-sur l'objet à son origine (source).

Notification

Abonnement

Bouton Listener

addActionListener, addActionListener, addKeyListener, addKeyListener,

addFocusListeneraddFocusListener

Page 23: Jean-Rémi LECQ Version 0.1

3.2.4- La gestion des 3.2.4- La gestion des évènementsévènements

ListenerListener = classe qui implémente une des = classe qui implémente une des interfaces de java.awt.Event (à importer).interfaces de java.awt.Event (à importer).

Méthodes à redéfinir (cf. cours)Méthodes à redéfinir (cf. cours)

ExempleExemple : :public classpublic class PremierMenu PremierMenu extendsextends JFrame JFrame

implementsimplements ActionListener { ActionListener {public voidpublic void actionPerformed(ActionEvent e) { actionPerformed(ActionEvent e) {

……}}

}}

Page 24: Jean-Rémi LECQ Version 0.1

TD n°2 Premier JMenu TD n°2 Premier JMenu (suite)(suite)

Ajout des évènementsAjout des évènements

TD n°2 Second MenuTD n°2 Second Menu

TD n°3 FocusEventTD n°3 FocusEvent- Color JFrame.getBackground()- Color JFrame.getBackground()- java.awt.Color -> Color.GREEN- java.awt.Color -> Color.GREEN