Java Swing. Principes de base  Des composants graphiques (exemple: JFrame, JButton …)  Hiérarchie de classes  Des événements et les actions à effectuer.

Slides:



Advertisements
Présentations similaires
Réaliser en Java un programme client d’une Base de Données
Advertisements

Conception d’IHM en Java
1 Swing par la pratique contrat Creative Commons Paternité-Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique.
X.Blanc & J.Daniel Swing et Applet X.Blanc & J.Daniel
Evénements Java Beans Java RMI
Les Interfaces Graphiques
Gestion des événements (suite)
Patrons Observateur/MVC programmation évènementielle
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
TP 7.1 synchronized et join Écrire un programme Java qui crée 1000 threads et maintient un compteur nb du nombre de threads créés jusque-là. Le thread.
Page 1 Les applets Jacques Lonchamp. Page 2 Présentation Une applet est téléchargée à partir dune machine distante qui fournit le code. Ce chargement.
(Classes prédéfinies – API Java)
F. Voisin : Introduction à Java 1 Introduction à Java - les interfaces - Frédéric VOISIN FIIFO - « Remise à Niveau »
Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties.
Les composants Graphiques Atomiques
Les technologies XML Cours 3 : Les APIS XML Janvier Version 1.0 -
MIKHAYLOVA Vera Exposé Java principe de fonctionnement Lundi 17 mai 2004 DEUG 1ère année Science du langage Paris III.
contrat Creative Commons Paternité-Pas d'Utilisation Commerciale- Partage des Conditions Initiales à l'Identique.
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Leçon 3 : Héritage IUP 2 Génie Informatique
بسم الله الرحمن الرحيم. Institut Supérieure des Etudes Technologiques de Kébili.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
POO-L3 H. Fauconnier1 Chapitre IV 1. classe Object, clonage 2. interfaces 3. classes internes et imbriquées.
1 1 Université Evry Val d'Essonne Y. Laborde Une calculatrice (sans MVC) fonctionnant sur la base d'un modèle en Java.
Écouteurs de click d'une fenêtre
Exceptions (fin) Généricité
Interface graphiques.
Graphical User Interface (GUI)
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Gestion des événements liés à la fenêtre et aux périphériques dentrée.
Graphical User Interface
Programmation concurrente
Design Pattern: Decorator
PROJET DE GENIE LOGICIEL 2005
Multi-Thread Jian-Yun Nie
IFT 6800 Atelier en Technologies d’information
PROGRAMMATION MULTI-TÂCHES (MULTITHREADING)
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Badr Benmammar Formation Développeur Java Thread et Swing Badr Benmammar
Java Swing.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
TYPES DE COMPOSANTES SWING Cours 420-B43. On peut distinguer 3 Niveaux 3 niveaux Haut niveau : toute application graphique doit comprendre au moins une.
Exploration de la programmation android Formation Assurer par: Club FreeWays Réalisé par: BOUHJJA Lamia.
Propriétés. Propriétés ► Les propriétés peuvent être visibles dans les environnements de scripts ► Les propriétés peuvent être accédées par programmation.
Cours 7 Classes locales Clonage Divers: tableaux.
Cours 91 9 Interfaces graphiques avec awt. Cours 92 Plan Introduction : deux bibliothèques graphiques 1.Comment se dessine une fenêtre ?  Un exemple.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Interfaces graphiques. Composants d'interface utilisateur graphique (GUI) 1 Bibliothèques Awt et Swing Procédures communes pour l'utilisation de ces clases.
14 La gestion d’événements
Programmation Système et Réseau
Schéma de conception Factory Method Exemple Sylvain Giroux.
Cours 2 Introduction. POO-L3 H. Fauconnier2 D) Un exemple…  Pile abstraite et diverses implémentations.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Iup MIAGe 3° année Projet MIAGe Toulouse – Groupe 21 Charte graphique.
 1) Il faut connaître le modèle et son fonctionnement  2) Définir le contrôle que l’on veut faire ouvrir, fermer, afficher, etc.) sur le modèle  3)
Cours du 26 octobre  Classes internes  Clones POO-L3 H. Fauconnier1.
Service de vidéo à la demande Projet Tutoré : Groupe C3 Université Paris 5.
Cours d’introduction à Java Christophe Vaudry IUT - Cycle IRISM Année
1 Cpt JAVA : Eclipse (bis) Debogage. 2 Code à tester public class siecle { int t; public siecle() { super(); t=1; } static public boolean vrai() { return(false);
Programmation événementielle. Logiciel traditionnel, sans interface utilisateur { Lire les entrées d’un fichier Effectuer des calculs Écrire les sorties.
Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 1 TD 7 IJA Les interfaces graphiques JAVA.
Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y();
Présentation SWING Siwar hadj hassen Omar ben yahya.
Transcription de la présentation:

Java Swing

Principes de base  Des composants graphiques (exemple: JFrame, JButton …)  Hiérarchie de classes  Des événements et les actions à effectuer (exemple presser un bouton)  (Et d'autres choses…)

Principes  Définir les composants (instance de classes)  Les placer à la main (layout Manager) dans un JPanel ou un "content pane" ou en utilisant des outils comme eclipse ou netbeans  Définir les actions associées aux événements (Listener) et les associer aux composants graphiques

Principes  Dans une interface graphique, le programme réagit aux interactions avec l'utilisateur  Les interactions génèrent des événements  Le programme est dirigé par les événements (event-driven)

Afficher…  Pour pouvoir être affiché, il faut que le composant soit dans un top-level conteneur: (JFrame, JDialog et JApplet)  Hiérarchie des composants: arbre racine top-level

Exemple  Correspond à la hiérarchie

Le codecode import java.awt.*; import javax.swing.*; public class TopLevel { /** * Affiche une fenêtre JFrame top level * avec une barre de menu JMenuBar verte * et un JLabel jaune */ private static void afficherMaFenetre() { //créer la Jframe //créer la JMenuBar //créer le Jlabel // mettre le JMenuBar et le Jlable dans la Jframe //afficher la Jframe }

Le code //Creer la JFrame JFrame frame = new JFrame("TopLevelDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Créer la JMenuBar JMenuBar greenMenuBar = new JMenuBar(); greenMenuBar.setOpaque(true); greenMenuBar.setBackground(new Color(0, 200, 0)); greenMenuBar.setPreferredSize(new Dimension(200, 20)); //Créer le JLabel JLabel yellowLabel = new JLabel(); yellowLabel.setOpaque(true); yellowLabel.setBackground(new Color(250, 250, 0)); yellowLabel.setPreferredSize(new Dimension(200, 180)); //mettre la JmenuBar et position le JLabel frame.setJMenuBar(greenMenuBar); frame.getContentPane().add(yellowLabel, BorderLayout.CENTER); //afficher... frame.pack(); frame.setVisible(true);

Et le main public class TopLevel {//afficherMaFenetre() public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { afficherMaFenetre(); } }); }

Evénements: principes  Dans un système d'interface graphique: Quand l'utilisateur presse un bouton, un "événement" est posté et va dans une boucle d'événements Les événements dans la boucle d'événements sont transmis aux applications qui se sont enregistrées pour écouter.

Evénements  Chaque composant génère des événements: Presser un JButton génère un ActionEvent (système d'interface graphique)  Cet ActionEvent contient des infos (quel bouton, position de la souris, modificateurs…) Un event listener (implémente ActionListener)  définit une méthode actionPerformed  S'enregistre auprès du bouton addActionListener Quand le bouton est "clické",l'actionPerformed sera exécuté (avec l'ActionEvent comme paramètre)

Exemples Buttons

Un exemple  Un bouton qui réagit

Le code:  Un JButton  Un JLabel  Implementer ActionListener actionPerfomed définit ce qui se passe quand le bouton est cliqué  Placer le bouton et le label

CodeCode: import java.awt.*; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.Jcomponent; import java.awt.Toolkit; import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JLabel; public class UnBouton extends Jpanel implements ActionListener { JButton bouton; String contenu="Rien Reçu"; JLabel label=new JLabel(contenu); int cmp=0; public UnBouton() { //…} public void actionPerformed(ActionEvent e) {//…} private static void maFenetre(){//…} public static void main(String[] args) {//…} }

Code public UnBouton() { super(new BorderLayout()); bouton = new JButton("Click"); bouton.setPreferredSize(new Dimension(200, 80)); add(bouton, BorderLayout.NORTH); label = new JLabel(contenu); label.setPreferredSize(new Dimension(200, 80)); add(label,BorderLayout.SOUTH); bouton.addActionListener(this); } public void actionPerformed(ActionEvent e) { Toolkit.getDefaultToolkit().beep(); label.setText("clické "+ (++cmp)+ " fois"); }

Code private static void maFenetre() { JFrame frame = new JFrame("UnBouton"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JComponent newContentPane = new UnBouton(); newContentPane.setOpaque(true); frame.setContentPane(newContentPane); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { //Formule magique javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { maFenetre(); } }); }

Variante public class UnBoutonBis extends JPanel { //… bouton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Toolkit.getDefaultToolkit().beep(); label.setText("clické " + (++cmp) + " fois"); } }); } //… }

Hiérarchie des classes… POO-L3 H. Fauconnier19

Un exemple  Un traceur de fonctions Une interface graphique swing

Organisation  TraceurSwing contient la partie interface graphique. TraceurSwing  Le panel contenant le graphe du tracé est dans GraphePanel qui trace les fonctions par la méthode draw de Graphe (paramètres du tracé dans TraceurSettings GraphePanelGraphe TraceurSettings  Graphe est la classe qui réalise l'affichage (en définissant draw). Graphe  (InteractifGraphePanel est une extension de GraphePanel qui modifie le tracé avec la souris)InteractifGraphePanel GraphePanel POO-L3 H. Fauconnier22

Fonctions à tracer…  Traceur est une classe abstraite contenant la méthode trace qui réalise le tracé de la fonction Traceur  TraceurFonction est une classe abstraite extension de la précédente qui réalise le tracé à partir de la méthode (abstraite) getY (qui retourne f(x) pour une fonction f) TraceurFonction  Une fonction à tracer sera une extension de TraceurFonction qui définit getY. TraceurFonction Exemple:ParaboleParabole POO-L3 H. Fauconnier23

Principe du tracé public void trace(Graphe graphe, Graphics g, int largeurTrace, int hauteurTrace) { /* Tracer= dessiner des lignes entre deux points consécutifs*/ double prevX = 0, prevY = 0; boolean first = true; // pour le premier point double xRange = graphe.traceurSettings.getRangeX(); for (int ax = 0; ax < largeurTrace; ax++) { // getY est la méthode abstraite qui donne y double x = graphe.traceurSettings.getMinX() + ((ax / (double) largeurTrace) * xRange); double y = getY(x); // tracer la ligne if (!first && y = graphe.traceurSettings.getMinY()) { graphe.drawLine(g, prevX, prevY, x, y); } prevX = x; prevY = y; first = false; } POO-L3 H. Fauconnier24

Le mainmain public class Demo { public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable(){ public void run(){new TraceurSwing(unGraphe());} }); } public static Graphe unGraphe() { TraceurSettings p = new TraceurSettings(-2, 2, -1, 1); p.setPlotColor(Color.RED); p.setGridSpacingX(0.5); p.setGridSpacingY(0.5); p.setTitle("Une sinusoide et une parabole"); Graphe graphe = new Graphe(p); graphe.fonctions.add(new Parabole()); graphe.fonctions.add(new TraceurFonction(){ public double getY(double x) {return Math.sin(x);} public String getName(){return "Sin(x)";} }); return graphe; } POO-L3 H. Fauconnier25

Composants  Modèle Vue Contrôleur

Préliminaires…  Lightweight et heavyweight composants Dépendent ou non du système d’interface graphique  Lightweight écrit en Java et dessinés dans un heavyweight composant- indépendant de la plateforme  Les heavyweight composants s’adressent directement à l’interface graphique du système (certaines caractéristiques dépendent du look and feel).

Look and feel  Look and feel: Possibilité de choisir l’apparence de l’interface graphique. UIManager gère l’apparence de l’interface

Multithreading  Attention au « modèle, contrôleur, vue » en cas de multithreading: Tous les événements de dessin de l’interface graphiques sont dans une unique file d’event-dispatching dans une seule thread. La mise à jour du modèle doit se faire tout de suite après l’événement de visualisation dans cette thread.

Plus précisément  Swing prend en charge la gestion des composants qui sont dessinés en code Java (lightweight)  Les composants AWT sont eux liés aux composants natifs (heavyweight)  Swing dessine le composants dans un canevas AWT et utilise le traitement des événements de AWT

Suite Les threads  Main application thread  Toolkit thread  Event dispatcher thread  Toutes Les opérations d'affichage ont lieu dans une seule thread l'EDT

Principes  Une tâche longue ne doit pas être exécutée dans l'EDT  Un composant Swing doit s'exécuter dans l'EDT

Exemple public void actionPerformed(ActionEvent e){ try { Thread.sleep(4000); } catch (InterruptedException e) { } } Provoque une interruption de l'affichage pendant 4 secondes

Une solution public void actionPerformed(ActionEvent e){ try{ SwingUtilities.invokeLater(newRunnable( { public void run() { //opération longue } }); } catch (InterruptedException ie) {} catch (InvocationTargetException ite) {} }

Le main  Normalement la création d'une fenêtre ne devrait avoir lieu que dans l'EDT: public static void main(String[] args) { //Formule magique javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() {maFenetre(); } }); } invokeLater crée une nouvelle thread qui poste la thread crée dans l'EDT

Attendre le résultat: try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { show(); } }); } catch (InterruptedException ie) { } catch (InvocationTargetException ite) { }