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





Previous PDF Next PDF



Cours 5 - interface graphique.key

Java : un langage indépendant de la plateforme. • Une API pour les interfaces graphiques indépendantes de la plateforme ? – aspect graphique : classes et 



Interfaces graphiques en Java - Introduction

Richard Grin. Interface graphique. 2. Contributions. • Des exemples de cette partie du cours sont fortement inspirés du livre. Au cœur de Java 2.



Cours Java interface graphique (IHM) - Introduction

Les composants graphiques. Les agents de placement. La structure du code. Les menus. (IUT Informatique Villetaneuse). Cours Java interface graphique (IHM).



Programmation événementielle & interfaces graphiques Java Swing

comment avoir plusieurs comportements avec un seul Listener ? import javax.swing.*; import java.awt.event.*; public class BipBip extends JFrame implements 



License Profesionnelle CISI 2009-2010 Cours 11 : Interface

Bibliothèque proposant un grand nombre de classe GUI appelées « classe fondation Java » qui est la plus riches des bibliothèques de classes graphiques.



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.



Interfaces graphiques

existantes mais en cours de remplacement par Java FX. 3. Java FX. Cette leçon décrit Swing



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.



TD 7 IJA Les interfaces graphiques JAVA

Première bibliothèque graphique JAVA: AWT. – Package java.awt. – Utilisation de code natif. – Composants limités. • Nouvelle bibliothèque: SWING.



lAPI Swing Création dinterfaces graphiques

l'API Swing. Création d'interfaces graphiques. Cours Java - F. Michel Toute classe Java hérite fatalement d'une autre classe (excepté Object).



[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] Cours 5 - interface graphiquekey

aspect graphique : classes et interface pour « dessiner » Inspiré de: Bruce Eckel Thinking in Java 2e édition placer dans une file d'attente



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

d'après le cours de S Szulman IUT Informatique Villetaneuse juin 2014 (IUT Informatique Villetaneuse) Cours Java interface graphique (IHM) juin 2014 1 



[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] 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] 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



[PDF] Cours 11 : Interface graphique- GUI - Loria

Page 1 Java License Profesionnelle CISI 2009-2010 Cours 11 : Interface graphique- GUI Dans une interface graphique on imbrique généralement



[PDF] lAPI Swing Création dinterfaces graphiques - LIRMM

Page 1 l'API Swing Création d'interfaces graphiques Cours Java - F Michel Page 2 L'API Swing ? javax accessibility ? javax swing



[PDF] TD 7 IJA Les interfaces graphiques JAVA

Première bibliothèque graphique JAVA: AWT – Package java awt – Utilisation de code natif – Composants limités • Nouvelle bibliothèque: SWING



[PDF] Interface graphique - MIS

Programmation Objet 1 - GUI 2 Historiquement AWT (Abstract Window Toolkit) est la première librairie graphique de Java

:

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_dbs5.pdfusesText_9
[PDF] interface graphique java avec netbeans pdf

[PDF] programmation evenementielle java pdf

[PDF] exercice corrige java interface graphique pdf

[PDF] interface graphique java eclipse pdf

[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