Jean-Rémi LECQ Version 0.1
description
Transcript of 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
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
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
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
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) !
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.
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)
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);}}
}}
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
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){……
}}
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 !
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
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
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
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).
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
3.1.1- JFrame - 3.1.1- JFrame - ArchitectureArchitecture
glassPane
menuBar
layeredPane
contentPane
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.
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).
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).
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
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
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) {
……}}
}}
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