Principes de base. Des composants graphiques. Des événements et les actions à effectuer. (Et d'autres choses ) (exemple: JFrame, JButton )

Documents pareils
Interfaces graphiques avec l API Swing

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Développement Logiciel

Java 7 Les fondamentaux du langage Java

Cours 2 : programmation des interfaces graphiques

Construire des plug-ins pour SAS Management Console SAS 9.1

Auto-évaluation Programmation en Java

Desktop Intégration. Rémi Forax

Le langage JAVA G. Baulieu Institut de Physique Nucléaire de Lyon Septembre 2009

Introduction au langage Java

Programmer en JAVA. par Tama

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Remote Method Invocation Les classes implémentant Serializable

TP1 : Initiation à Java et Eclipse

Corrigé des exercices sur les références

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Un ordonnanceur stupide

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Programme Compte bancaire (code)

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Synchro et Threads Java TM

Projet de programmation (IK3) : TP n 1 Correction

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Threads. Threads. USTL routier 1

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Package Java.util Classe générique

Installer GlassFish v3

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Tp 1 correction. Structures de données (IF2)

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Création d un service web avec NetBeans 5.5 et SJAS 9

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Programmation par les Objets en Java

Programmation Orientée Objet

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Calcul Parallèle. Cours 5 - JAVA RMI

Table des matières Introduction Démarrage Les composants graphiques... 26

INITIATION AU LANGAGE JAVA

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Introduction : les processus. Introduction : les threads. Plan

Bases Java - Eclipse / Netbeans

TP SIN Programmation sur androïde Support : eclipse

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Premiers Pas en Programmation Objet : les Classes et les Objets

Java 1.5 : principales nouveautés

Applet pour visualiser les variables «automate» notifiées

Chapitre 10. Les interfaces Comparable et Comparator 1

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Design patterns. Design patterns - définition. Design patterns - avantages

Utiliser Java sans BlueJ

La JVM. La machine virtuelle Java. La JVM. La JVM

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Initiation à JAVA et à la programmation objet.

RMI le langage Java XII-1 JMF

Langage Java. Classe de première SI

Java Licence Professionnelle CISII,

TD2 Programmation concurrentielle

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

TD/TP PAC - Programmation n 3

as Architecture des Systèmes d Information

Héritage presque multiple en Java (1/2)

Création d une application JEE

Objets et Programmation. origine des langages orientés-objet

Derrière toi Une machine virtuelle!

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Cours 1: Java et les objets

ACTIVITÉ DE PROGRAMMATION

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Remote Method Invocation (RMI)

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Java Licence professionnelle CISII,

TD/TP PAC - Programmation n 3

Java DataBaseConnectivity

Eclipse atelier Java

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Programmation Par Objets

Plan du cours. Historique du langage Nouveautés de Java 7

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Environnements de développement (intégrés)

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

LOG4430 : Architecture logicielle et conception avancée

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Dis papa, c est quoi un bus logiciel réparti?

Programmation Objet Java Correction

7 Développement d une application de MapReduce

Java Licence Professionnelle CISII,

Transcription:

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 code 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

Code: 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. Fauconnier 19

Un exemple Un traceur de fonctions Une interface graphique swing

Organisation TraceurSwing contient la partie interface graphique. 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 Graphe est la classe qui réalise l'affichage (en définissant draw). (InteractifGraphePanel est une extension de GraphePanel qui modifie le tracé avec la souris) POO-L3 H. Fauconnier 22

Fonctions à tracer Traceur est une classe abstraite contenant la méthode trace qui réalise le tracé de la fonction 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) Une fonction à tracer sera une extension de TraceurFonction qui définit gety. Exemple:Parabole POO-L3 H. Fauconnier 23

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.getmaxy() && y >= graphe.traceursettings.getminy()) { graphe.drawline(g, prevx, prevy, x, y); prevx = x; prevy = y; first = false; POO-L3 H. Fauconnier 24

Le main 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. Fauconnier 25

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