[PDF] [PDF] Programmation événementielle & interfaces graphiques Java Swing





Previous PDF Next PDF



Guide dutilisation dEclipse pour créer des applications en Java

Guide Eclipse pour applications en Java - M. Dalmau IUT de Bayonne-Pays Basque Un nouvel onglet apparaît contenant la classe de l'interface graphique :.



Cours Java interface graphique (IHM) - Introduction

Les API d'interfaces graphiques Java Une interface graphique assure la communication ... package SWT-JFace : développement sous eclipse.



Programmation événementielle & interfaces graphiques Java Swing

Toolkits graphiques Java. Pour le Desktop. • JavaFX nouveau inspiré du Web. • Swing. • AWT Components obsolète. • SWT. Eclipse Foundation. Swing.



Cours 2 : programmation des interfaces graphiques

13 févr. 2014 getSource(); … } } événements et listeners (Java) all events inherit from the class EventObject all listeners correspond to an interface that.



05 - IG par appli auton

Ce paquetage fournit un ensemble de classes permettant de construire et de manipuler les interfaces graphiques. Exemple import java.awt.*; public class Appli2 



Projet de développement Introduction à Eclipse

Conçu sur la base d'un EDI Java (VA4J) Eclipse devient un EDI pour développer Non dédiée à un langage ou système d'exploitation ou interface graphique.



Un convertisseur de monaie 1 Configuration dEclipse 2 Créer une

Le but de cet exercice est de réaliser une application java pour un petit convertisseur de 1 Configuration d'Eclipse ... 4 Créer une interface graphique.



Stéphane HUOT Dpt. Informatique Applications interactives

Interfaces graphiques en java. • Et maintenant comment programmer tout cela ? o Analyse « MVC » o Programmation et tests du modèle.



License Profesionnelle CISI 2009-2010 Cours 11 : Interface

La manière de réaliser une GUI en JAVA consiste à employer des composants graphiques Dans une interface graphique on imbrique généralement.





[PDF] Guide dutilisation dEclipse pour créer des applications en Java

1 Créer un projet Java avec Eclipse 1 Lancer Eclipse Choisir un répertoire de travail 2 Quand 'Eclipse a démarré aller dans le menu : File ? New 



[PDF] Interfaces graphiques en Java - Introduction

Interface graphique 10 Boîtes à outils graphiques • Les boîtes à outils graphiques offrent des facilités pour utiliser et gérer la file d'attente des



[PDF] Créer des interfaces graphiques en Java - Cedric-Cnam

Ce paquetage fournit un ensemble de classes permettant de construire et de manipuler les interfaces graphiques Exemple import java awt *; public class Appli2 



[PDF] Programmation événementielle & interfaces graphiques Java Swing

Page 1 Programmation événementielle et interfaces graphiques - Eric Lecolinet – Telecom ParisTech Programmation événementielle interfaces graphiques 



[PDF] Interfaces graphiques - Irif

Dans un système d'interface graphique le Lightweight écrit en Java et dessiné dans un heavyweight graphiques sont dans une unique file d'event-



[PDF] Les bases de la programmation graphique Java

Une interface graphique en Java est un assemblage conteneurs (Container) et de composants (Component) • Un composant est une partie "visible" de 



[PDF] Interfaces graphique java pdf - Squarespace

Eclipse Systèmes d'exploitation : Windows/macOS/Linux Site web : Type : IDE Prix : Gratuit Eclipse est un IDE très complet et souvent recommandés aux débutants 



[PDF] Cours Java interface graphique (IHM) - Introduction - LIPN

Cours Java interface graphique (IHM) juin 2014 1 / 31 Les API d'interfaces graphiques Java création d'interface graphique au format XML créé



[PDF] Interface graphique - cloudfrontnet

Les interfaces graphiques assurent le dialogue entre les utilisateurs et une application • En java il existe deux types de composants graphiques :



[PDF] Applications interactives - Programmation dinterfaces graphiques

Interfaces graphiques en java • Et maintenant comment programmer tout base (1) • Méthodes définies dans JComponent ou héritées de java awt Component

:

Page 1Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechProgrammation événementielle & interfaces graphiques Java SwingEric LecolinetTélécom Paris -IP Pariswww.telecom-paris.fr/~elcOct. 2022

Page 2Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechToolkits graphiques Java Pour le desktop•JavaFXle plus récent, inspiré du Web•Swing•AWT Componentsobsolète•SWTEclipse FoundationSwing•multi-plateformes•repose surAWT Components(à ne pas confondre avec Swing!) -attention : JButton!= Button!

Page 3Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechComposants Swing Source: documentation IBM

Page 4Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechInteracteurs

Page 5Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechBoutonsJButtonJCheckbox:choix idépendantsJRadioButton:choix exclusif : cf. ButtonGroupSource: documentation Java Oracle

Page 6Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechTexteJTextFieldJPasswordFieldJEditorPane: texte avec stylescompatible HTML et RTFJTextArea: texte simple multilignesAscenseurs :JScrollPane

Page 7Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechConteneursJPanel: conteneur génériqueJScrollPane: avec ascenseurs intégrésJSplitPane: avec "diviseur» intégré...

Page 8Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechConteneursJTabbedPane: ongletsJTableJTreeJToolBar: barre d'outils(sous la barre de menus)

Page 10Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechFenêtresJFrame: fenêtre principalede l'applicationJDialog: fenêtre secondaire•dépendante de la JFrame(en théorie pas d'iconification séparée, toujours au dessus)JDialog modal: bloque l'interaction => l'utilisateur de répondre

Page 11Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechFenêtresCréent des paneaux intermédiaires•ContentPane: conteneur où on ajouteles composants graphiques•GlassPane: conteneur transparentsuperposé (pour usages avancés)

Page 12Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechBoîtes de dialogue prédéfiniesJFileChooserJOptionPane(multiples variantes)JColorChooserPeuvent être créés :•comme boîtes de dialogue•ou comme conteneurs

Page 13Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechMenusraccourciclavier(accelerator)mnémonique

Page 14Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechArbre d'instanciationArbre d'instanciation•arbre de filiationdes instancesde composants graphiques

Page 15Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechArbre d'instanciationChaque objet graphique "contient» ses enfants•superposition: enfants affichés au dessus des parents•clipping: enfants "découpés» : ne dépassent pas des parents

Page 16Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechArbre d'instanciationAttention : ne pas confondre avec l'arbre d'héritage !•arbre d'instanciation= arbre de filiation des instances•arbre d'héritage= hiérarchie des classes

Page 17Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechArbre d'instanciationJFrame = objet de plus haut niveauLes conteneurspeuvent être emboîtés •en particulier les JPanelsLes layout managersassurent la disposition spatiale•un layout manager par conteneur•défaut pour JPanel: FlowLayout, pour JWindow: BorderLayoutNe pas oublier d'appeler :•frame.pack( ) // calcul récursifdes positions et des tailles•frame.setVisible(true)// fait apparaîtrela fenêtre

Page 18Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechExemple : version 0importjavax.swing.*; public classBipBipextends JFrame { // fenêtre principaleJButtonbutton= null; public static void main(Stringargv[ ]) { BipBip toplevel =new BipBip();// en gris : optionnel} public BipBip(){ button = new JButton("Please Click Me !");getContentPane().add(button); // en gris : avant version 5setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle("Bib Bip");pack(); // calcule la disposition spatiale setVisible(true);// rend l'interface visible } }

Page 19Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechExemple : version 0Notes : •package javax.swing•une seule classe publicpar fichier, le fichier doit avoir le même nom•buttonest une variable d'instance (on peut l'initialiser contrairement à C++)•toplevelest une variable locale•main() est une méthode de classe(cf. static)•les méthodes d'instanceont automatiquement accès aux variables d'instanceelles ont un paramètre caché thisqui pointe sur l'instance•getContentPane() nécesaire avant la version 5 à cause du JRootPane JWindow.add() a été redéfini dans les versions ultérieure de Java

Page 20Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechEvénementsEvénements•envoyés à l'application ciblée •à chaque action élémentaire de l'utilisateur

Page 21Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechBoucle de gestion des événementsBoucle infinie qui •récupère les événements•notifie les composants graphiquesLancée automatiquement•à la fin de la méthode main() dans le cas de Java

Page 22Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechEvénements JavaEvénements AWT et Swing•objetscorrespondant àdes catégories d'évenements •les principaux héritent de java.awt.event.AWTEvent Evénements de "bas niveau" •MouseEventappuyer, relacher, bouger la souris ...•KeyEventappuyer, relacher une touche clavier...•WindowEventfermeture des fenêtres ....•FocusEventfocus clavier (= où vont les caractères tapés au clavier)etc. Evénements de "haut niveau"•ActionEventactiverun bouton, un champ textuel ...abstractiondes événements de bas niveau•TextEventmodification du texte entréetc.

Page 23Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechEvénements JavaMéthodes communes aux AWTEvent•getSource() objetproducteur(Object)•getID()typed'événement (int) Exemple: méthodes de MouseEvent•getX(), getY()•getClickCount()•getModifiers()•getWhen()•etc.

Page 24Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechDétecter les événements Principe : patron Observateur / Observé•Associer un ou des observateursaux objets observés•Lesobservateurs sont notifiésautomatiquement •quand une certaine condition se produit sur un observésource: Wikipedia

Page 25Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechEvent listenersA chaque classe d'événementcorrespond une classe d'Event Listener(sauf cas particuliers)Exemple : ActionEvent•Evénement: ActionEvent•Listener: ActionListener•Méthode: actionPerformed(ActionEvent)

Page 26Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechEvent listenersExemple : MouseEvent•Evénement: MouseEvent•Listener: MouseListener•Méthodes:•mouseClicked(MouseEvent) •mouseEntered(MouseEvent) •mouseExited(MouseEvent) •mousePressed(MouseEvent)•mouseReleased(MouseEvent) Remarque•toutesles méthodes doivent être implémentées•car les Listenerssont des interfaces(au sens du langage Java)•Listener: MouseMotionListener•Méthodes:•mouseDragged(MouseEvent) •mouseMoved(MouseEvent)

Page 27Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechRendre les composants réactifsAssocier des Listeners aux composants graphiques•un composantpeut avoir plusieurs listeners•un même listenerpeut être associé à plusieurs composants

Page 28Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechExemple : version 1importjavax.swing.*; importjava.awt.event.*; public classBipBipextends JFrame { JButton button; public static void main(Stringargv[ ]) { new BipBip();} public BipBip(){ button = new JButton ("Do It");add(button); // créer et associer un ActionListener Ecouteelc = new Ecoute(); button.addActionListener(elc); setDefaultCloseOperation(EXIT_ON_CLOSE);pack(); setVisible(true);} } classEcouteimplements ActionListener { // méthode appelée quand on active le bouton public void actionPerformed(ActionEvent e) { System.out.println("Done!"); } } Inconvénients ?

Page 29Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechimportjavax.swing.*; importjava.awt.event.*; public classBipBipextends JFrame { JButton button; JLabel label= new JLabel(); public static void main(Stringargv[ ]) { new BipBip();} public BipBip(){ button = new JButton ("Do It");add(button); Ecouteelc = new Ecoute(); button.addActionListener(elc); setDefaultCloseOperation(EXIT_ON_CLOSE);pack(); setVisible(true);} }classEcouteimplements ActionListener { public void actionPerformed(ActionEvente) { System.out.println("Done!"); label.setText("Done!"); // ne compile pas !} } Communication entre objetscomment le Listener peut-il agirsur les composants graphiques ?

Page 30Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechclassEcouteimplements ActionListener { BipBipbipbip; public Ecoute(BipBip bipbip) { this.bipbip= bipbip;}public void actionPerformed(ActionEvente) { System.out.println("Done!"); bipbip.label.setText("Done!"); } } Solution•le Listenera une référencevers la partie graphique•solution flexiblemais lourdeimportjavax.swing.*; importjava.awt.event.*; public classBipBipextends JFrame { JButton button; JLabel label= new JLabel(); public static void main(Stringargv[ ]) { new BipBip();} public BipBip(){ button = new JButton ("Do It");add(button); Ecouteelc = new Ecoute(); button.addActionListener(elc); setDefaultCloseOperation(EXIT_ON_CLOSE);pack(); setVisible(true);} }

Page 31Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechObjets hybridesA la foiscomposant graphique et Listener•un seulobjet => plus de problème de communicationentre objets !•principe de l'héritage multiple•restreint avec Java: on peut "hériter» de plusieurs interfaces•(mais pas de plusieurs classes)

Page 32Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechExemple : version 2importjavax.swing.*; importjava.awt.event.*; public classBipBipextends JFrame implements ActionListener { JButton button; JLabel label= new JLabel(); public static void main(Stringargv[ ]) { new BipBip();} public BipBip(){ add( button = new JButton ("Do It") );// BibBip est à la fois un JFrame et un Listenerbutton.addActionListener(this); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); setVisible(true);} public voidactionPerformed(ActionEvente) { label.setText("Done!"); } } actionPerformed() à accès à labelcar c'est une méthode d'instancede BibBipInconvénients ?

Page 33Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechPlusieurs boutons ?comment avoir plusieurscomportementsavec un seulListener ?importjavax.swing.*; importjava.awt.event.*; public classBipBipextends JFrame implements ActionListener { JButton button; JLabel label= new JLabel(); public static void main(Stringargv[ ]) { new BipBip();} public BipBip(){ add( button = new JButton ("Do It") );// BibBip est à la fois un JFrame et un Listenerbutton.addActionListener(this); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); setVisible(true);} public voidactionPerformed(ActionEvente) { label.setText("Done!"); } }

Page 34Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechimportjavax.swing.*; import java.awt.event.*; public classBipBipextends JFrame implements ActionListener{ JButton doIt, close; JLabel label = new JLabel(); public static void main(Stringargv[ ]) { new BipBip();} public BipBip(){ add(doIt = new JButton("Do It"));add(close = new JButton("Close"));doIt.addActionListener(this); close.addActionListener(this); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); setVisible(true);} // suite de la classe BipBippublic void actionPerformed(ActionEvente) {if (e.getSource() == doIt) label.setText("Done!"); else if (e.getSource() == close) System.exit(0);} } // fin de la classe !On peut distinguer les boutons viagetSource() Autre solution getActionCommand()(moins sûre car dépend des noms)

Page 35Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechAvantages et inconvénientsVersion 1•plus souple :autant de listeners que l'on veut•peu concise :on multiplie les objets et les lignes de code Version 2•plus simple mais limitée :on ne peut avoir qu'une seuleméthode actionPerformed()•peu adaptéesi beaucoup de commandes

Page 36Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechClasses imbriquéesClasses définies à l'intérieurd'une autre classe•ont accès aux variables d'instancedes classes les contenant•rappel : pas en C++ !Avantages des 2 solutions précédentes•souplesse sans la lourdeur !Notes•le terme exact est inner classes•elles peuvent êtrestatic(sert à structurer en sous-parties)

Page 37Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechExemple : version 3importjavax.swing.*; importjava.awt.event.*; BipBip extends JFrame { JButtondoIt, close; JLabellabel= new JLabel(); public static void main(Stringargv[ ]) { new BipBip();} public BipBip(){ add( doIt = new JButton("Do It") );add( close = new JButton("Close!") );doIt.addActionListener(new DoItListener( )); close.addActionListener(new CloseListener( )); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); setVisible(true);} classDoItListenerimplements ActionListener { public void actionPerformed(ActionEvente){ label.setText("Done!"); } } classCloseListenerimplements ActionListener { public void actionPerformed(ActionEvente){ System.exit(0); } } }// fin de la classe BibBipactionPerformed()à accès à labelcar DoItListenerest une classeimbriquéede BibBip

Page 38Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechSynthèse

Page 39Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechClasses imbriquées anonymes & lambdaspublic classBipBip extends JFrame { JLabellabel= new JLabel(); public BipBip(){ vardoIt = new JButton("Do It"); //var= inférence de type (comme autoen C++)add(doIt);doIt.addActionListener( new ActionListener( ){ //sous-classe anonymede ActionListenerpublic void actionPerformed( ActionEventevent) { label.setText("Done!"); } } ); OU :// expression lambdadoIt.addActionListener( (ActionEventevent) -> label.setText("Done!") ); OU :doIt.addActionListener( (event) ->label.setText("Done!") ); // si le type peut etre inféré OU :doIt.addActionListener( event ->label.setText("Done!") ); // si un seul argument }......

Page 40Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechMélanger les plaisirs !abstractclass MyButtonextends JButton implements ActionListener{MyButton(Stringname) {super(name);addActionListener(this);}}public classBipBip extends JFrame { JLabellabel= new JLabel(); ......public BipBip(){ add(new MyButton("Do It")) { public void actionPerformed(ActionEvente) { label.setText("Done!"); } }); ......

Page 41Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechConflitsMême nom de variable dans classe imbriquanteet classe imbriquéeÞ1) à éviter ! Þ2) préfixer par le nom de la classepublic classBipBip extendsJFrame {JButton close= newJButton("Close");classCloseListener implementsActionListener{boolean close= falsepublic voidactionPerformed(ActionEvente) {setVisible(close); // OKsetVisible(BipBip.close); // FAUX : pas le bon "close»this.setVisible(close); // ERREUR : pas le bon "this» BipBip.this.setVisible(close);// OK}}

Page 42Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechCompléments sur les constructeursabstract class MyButton extends JButton implements ActionListener{publicMyButton(String name, Icon icon) {super(name, icon); ........}publicMyButton(String name) { this(name, null);}}Un constructeur peut en appeler un autre !Note: en C++11: •MyButton(string name) : MyButton(name, nullptr) {}•on pourrait aussi utiliser les paramètres par défautabstract class Toto {static { .......}}Constructeur de classe•Pour initaliser des variables de classes•Pas d'équivalent direct en C++

Page 43Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechDessin importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;classCanvasextendsJPanel{privateintlast_x, last_y;Canvas() {setBackground(Color.white);addMouseListener(newMouseAdapter() {publicvoidmousePressed(MouseEvente) {last_x= e.getX();last_y= e.getY();}});addMouseMotionListener(newMouseMotionAdapter() {publicvoidmouseDragged(MouseEvente) {intx= e.getX();inty= e.getY();varg= getGraphics();g.drawLine(last_x, last_y, x, y);last_x= x;last_y= y;}});}public voidmouseReleased (MouseEvente) { } public voidmouseClicked (MouseEvente) { }public voidmouseEntered (MouseEvente) { } public voidmouseExited(MouseEvente) { }si on u'lisaitMouseListener ou MouseMo'onListeneril faudrait implémenter :

Page 44Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechDessin publicclassScribble1extendsJFrame{publicstaticvoidmain(Stringargv[]) {newScribble1();}Scribble1( ) {varcanvas= newCanvas();varclear= newJButton("Clear");clear.addActionListener(e-> canvas.clear());add(BorderLayout.CENTER, canvas);add(BorderLayout.SOUTH, clear);setTitle("Scribble");setDefaultCloseOperation(EXIT_ON_CLOSE);setMinimumSize(newDimension(400, 400));pack();setVisible(true);}}// fin de la classe Canvasvoidclear() {varg= getGraphics();g.setColor(Color.white);g.fillRect(0, 0, getSize().width,getSize().height);}}Problème ?

Page 45Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechPersistance de l'affichageProblème : l'affichage du dessin n'est pas persistant•dessin effacési on retaille, iconifie, etc.•les méthodes des listenersne devraient pas dessiner !si on retaille...

Page 46Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechModèle "damaged / repaint"repaint()paintComponent()PrincipeLes listeners :•sauvegardentles opérations sans afficher•notifientle toolkit en appelant repaintLa méthode paintComponentrepaintle widget (et le dessin !)

Page 47Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechPersistance de l'affichageclassCanvasextendsJPanel{privateArrayList points= newArrayList();Canvas() {setBackground(Color.white);addMouseListener(newMouseAdapter() {publicvoidmousePressed(MouseEvente) {points.add(newPoint(e.getX(), e.getY()));}});addMouseMotionListener(newMouseMotionAdapter() {publicvoidmouseDragged(MouseEvente) {points.add(newPoint(e.getX(), e.getY()));repaint();}});}voidclear() {points.clear();repaint();}protectedvoidpaintComponent(Graphicsg) {super.paintComponent(g);for(intk= 0; k< points.size()-1; ++k) {g.drawLine((int)points.get(k).getX(),(int)points.get(k).getY(),(int)points.get(k+1).getX(),(int)points.get(k+1).getY());}}}

Page 48Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechNotesDivers•Appeler revalidate() dans certains cas de changements de taille•Taille des bords: getInsets()•Opacitédes widgets•certains composants sont opaques, d'autres sont transparents•setOpaque() rend le composant opaque Swing vs. AWT •avec AWTredéfinir la méthode paint()•avec Swing, paint() appelle :•paintComponent() puis paintBorder() puis paintChildren()

Page 49Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechJFileChooser Ouvre la boîte de dialogue et bloquel'interaction (dialogue modal) :int returnVal = chooser.showOpenDialog(parent);if (returnVal == JFileChooser.APPROVE_OPTION) {System.out.println("You chose to open this file: " + chooser.getSelectedFile().getName());}Filtre JFileChooserchooser = new JFileChooser();var filter = new FileNameExtensionFilter("JPG & GIF", "jpg", "gif");chooser.setFileFilter(filter);

Page 50Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechDisposition spatialeLes LayoutManagers•calculent automatiquementla disposition spatialedes enfants des conteneursA chaque conteneurest associé un LayoutManager•qui dépend du type de conteneur•qui peut être changé par la méthode : setLayout() Pour faire le calcul "à la main" •à éviter sauf cas particuliers : setLayout(null)

Page 51Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechAvantages des LayoutManagersC'est plus simple•pas de calculscompliqués à programmer !Configurabilité•accessibilité: indépendance par rapport aux tailles des polices•internationalisation: indépendance par rapport à la taille du texte•langues orientales : texte ~1/3 plus petitque l'anglais•français, allemand : texte ~1/3 plus grandque l'anglaisAdaptativité •les composants graphiques se retaillent automatiquement•quand l'utilisateur retailleles fenêtres

Page 52Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechPrincipaux LayoutManagersFlowLayout•défaut des JPanel•met les objetsà la suitecomme un "flux textuel" dans une page•de gauche à droite puis à la ligne

Page 53Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechPrincipaux LayoutManagersBorderLayout•défaut des JFrameet JDialog•disposition de type points cardinaux•via constantes: BorderLayout.CENTER, EAST, NORTH, SOUTH, WEST•retaille automatiquementles enfants

Page 54Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechPrincipaux LayoutManagers (2)GridLayout•divise le conteneur en cellules de même taille(grille virtuelle)•de gauche à droite et de haut en bas•retaille automatiquementles enfants

Page 55Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechPrincipaux LayoutManagers (2)GridBagLayout•grille+ contraintes spatiales•les enfants n'ont pas tous la même taille•spécification par des GridBagConstraints

Page 56Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechPrincipaux LayoutManagers (3)CardLayout•empileles enfants (et les met à la même taille)•usage typique: ongletsBoxLayout•disposition verticaleou horizontale•exemple :panel.setLayout(newBoxLayout(panel, BoxLayout.Y_AXIS));SpringLayout•contraintes entre les bordsdes enfants•usage typique : formulaires

Page 57Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechArchitecture SwingSwing est inspiré du modèle MVC•Model: données de l'application•View: représentation visuelle•Controller: gestion des entréessource: enode.com

Page 58Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechArchitecture SwingSwing est inspiré du modèle MVC•Model: données de l'application•View: représentation visuelle•Controller: gestion des entréesBut de MVC•mieux structurer les applications•représentations multi-vues•un modèlepeut être associé à plusieurs vues•la synchronisation est impliciteEn pratique•Vfortement lié à C•plusieurs variantesde MVC!source: enode.com

Page 59Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechArchitecture Swing (2)"Separable Model Architecture"•Viewet Controllerregroupés dans un UIComponent•Model: reste séparé"Pluggable Look and Feel"•chaque JComponentSwingencapsule un UIComponent•les UIComponentpeuvent être changés dynamiquement par le UIManager

Page 60Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechArchitecture Swing (3)Modèles et multi-vues•(la plupart des) JComponentSwingcréent implicitement un Modèle•qui peut être "exporté" et partagé avec un autre JComponentExemple•JSlideret JScrollbar: même modèle BoundedRangeModel•mise commun du modèle => synchronisationautomatique

Page 61Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechExempleDans l'API de JSlider et JScrollBar : publicBoundedRangeModelgetModel();public voidsetModel(BoundedRangeModel);Changer le modèle du slider et du scrollbar : JSliderslider = newJSlider(); BoundedRangeModelmyModel = newDefaultBoundedRangeModel( ) { public voidsetValue(intn) { System.out.println("SetValue: "+ n); super.setValue(n);} }); slider.setModel(myModel); scrollbar.setModel(myModel); On peut aussi ignorer l'existence des modèles :JSliderslider = newJSlider();intvalue = slider.getValue();// cohérent car dans l'API de JSlider :public intgetValue() {returngetModel().getValue(); }

Page 62Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechAutres visions de MVCA plus haut niveau, autre vision possible•Controllers = Listeners Swing(Controleurs de haut niveau)•Views = Components Swing(incluant des Controleurs de bas niveau)•ModelsVision Web•cf. illustrationAutres variantes•model-view-adapter (MVA)•model-view-presenter (MVP)•model-view-view model (MVVM)•hierarchical model-view-controller (HMVC)

Page 63Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechPluggable Look and FeelJava Metal public static voidmain(String[ ] args) { try{ UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch(Exception e) { } //Create and show the GUI... .....} Windows UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" );

Page 64Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechGraphics2DCouche graphique évoluée•plus sophistiquée que GraphicsQuelques caractéristiques•système de coordonnées indépendant du type de sortie (écran, imprimante)•et transformations affines : translations, rotations, homothéties •package java.awt.geom •transparence •AlphaComposite, BITMASK , OPAQUE, TRANSLUCENT ...•Composition•Paths et Shapes •Fonts et Glyphs•etc... (voir démo Java2D de Sun)

Page 65Programmation événementielle et interfaces graphiques -Eric Lecolinet -Telecom ParisTechPour en savoir plusSite pédagogique de l'UE INF224•http://www.telecom-paristech.fr/~elc/cours/inf224.htmlUEs liées à INF224•IGR201: Développement d'applications interactives 2D, 3D, Mobile et Web•IGR203: Interaction Homme-Machine

quotesdbs_dbs6.pdfusesText_11
[PDF] créer+interface+graphique+java+netbeans

[PDF] cours java swing pdf

[PDF] sclérodermie espérance de vie

[PDF] photos d'un cancer peau

[PDF] sclérodermie photo

[PDF] auréole cutanée

[PDF] sclérodermie systémique diffuse

[PDF] sclérodermie cutanée localisée

[PDF] dermatologie cours et images

[PDF] lesion elementaire en dermatologie pdf

[PDF] livre de dermatologie pdf

[PDF] atlas dermatologie pdf

[PDF] cours dermatologie ppt

[PDF] affections dermatologiques courantes

[PDF] guide pratique de dermatologie pdf