[PDF] [PDF] The Definitive Guide to Java Swing





Previous PDF Next PDF



Java Homework Projects: A NetBeans GUI Swing Programming

PDF format. You also need to have the current Java Development Kit (JDK) and the current version of NetBeans the Integrated Development Environment (IDE) ...



Learn Java GUI Applications: A JFC Swing Tutorial - PDFDrive.com

Lou is by far one of the best application developers and tutorial writers I have ever worked with. Thanks Lou for collaborating with me on this book project.





g9 Modeling Tools

12 авг. 2020 г. generate the classes into the qs-swing java project. Double-click the Swing configuration to display the parameters. Close the dialog and ...



Information Technology Solutions

Make your email/document records independent of email servers. With. SWING PDF Converter you can archive any collection of emails or documents (e.g. project- 



Study of Development of Java Applications in Eclipse Environment

Java Swing API has been used for building GUI (graphical user interface) of To start a project Click File > New > Java Project. The following Figures ...



Java Project Demo

➢The Java Swing GUI Library. ➢A computer with monitor keyboard and mouse Swing.pdf. Page 9. Why Multi-threading in Swing? Terrible UI program: Good UI ...



The Definitive Guide to Java Swing

Charlie Castaneda and Robert Castaneda



URCap Software Development Tutorial Swing

5 Structure of a URCap Project. The services: • HelloWorldInstallationNodeService.java. • HelloWorldProgramNodeService.java the main Java AWT thread but ...



Mining Extension Point Patterns in Scala

extension patterns in Java projects to the Scala context. Our goal is to SWING projects hosted on Github. The characteristics of each project are ...



Java Homework Projects: A NetBeans GUI Swing Programming

Our product LEARN JAVA GUI APPLICATIONS can provide the needed background. You will also need the ability to view and print documents saved in Acrobat. PDF 



12. Java Swing Individual Project 2

Java Swing? • Java GUI building library. • Not very famous for standalone. applicaVon. – Slow (because of JVM). – Current trends move to web.



Information Technology Solutions

our LotusScript or Java API SWING PDF Converter is a solution for enabling Notes users and ... whether for personal use or enterprise-level projects.



Java Swing

https://www.engr.mun.ca/~theo/Courses/sd/5895-downloads/calculatorlab.pdf



Dr.Explain 4.10 : User Guide

click this button to export the current project into PDF File. which are required to create PDF files and to capture Java Swing application screenshots.



Automated COSMIC Measurement of Java Swing Applications

6 oct. 2014 Keywords: COSMIC method Functional size measurement



Global-Status-of-CCS-Report-English.pdf

and Australia are boosting the number of projects under active Central Java. ... CO2 from its reformer units using vacuum swing adsorption72.



The Definitive Guide to Java Swing

team working on numerous Java and integration-based projects in Australia and many classes in the libraries for the Swing project descend from classes ...



Multiagent Simulation And the MASON Library

several projects underway towards developing distributed versions of MASON. MASON doesn't use the strictfp keyword or the java.lang.



userguide.pdf

Gradle takes a leaf out of Maven's book and makes common types of projects — such as Java projects — easy to build by implementing conventions.



[PDF] The Definitive Guide to Java Swing

The information in this book is distributed on an “as is” basis without warranty Although every precaution has been taken in the preparation of this work 



[PDF] Java Homework Projects: A NetBeans GUI Swing Programming

Snowball Toss Game Project Java Code Listing Appendix Distributing a Java Project Preview Executable jar Files Creating a jar File in NetBeans



[PDF] Java swing programming pdf - Squarespace

Java swing programming pdf Java Swing tutorial is a part of Java Foundation Classes (JFC) that is used to create window-based applications



Pdf to Word Java Java Swing Project Pdf to Docx in Java Java GUI

13 fév 2022 · PDF to Word Converter using Java Convert PDF to Word programmatically In this java Durée : 25:20Postée : 13 fév 2022



Java Swing Tutorial

Step 1: Create a new Java project by selecting " java project " from the Select a wizard and click on Next button Step 2: Give a project name click finish



Designing a Swing GUI in NetBeans IDE

An IDE project is a group of Java source files plus its associated meta data In this step we'll create a container using the JFrame component and place 



soumyadip007/Java-JavaFx-Swing-Projects-Desktop-Application

All projects are based on ? Java(Swing All projects are database(MySql) connected and Step 8: Run any JAVA SWING program from src file (src/--- java) 



SuwaidAslam/E-Learning-System-Java-GUI-Application - GitHub

This project aims at serving Students and Teachers in Online-based learning a desktop-based Windows application developed in Java with Swing and AWT



GUI Programming Part 2 - Java Programming Tutorial

JDK demo includes a folder " jfc " which has many interesting demo on Swing and Java2D 1 More on Swing's JComponents The class hierarchy of Swing's 

:

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_dbs14.pdfusesText_20
[PDF] java threads book pdf

[PDF] java tips and tricks pdf

[PDF] java to kotlin cheat sheet

[PDF] java true false questions and answers pdf

[PDF] java true or false questions

[PDF] java tutorial download

[PDF] java tutorial for beginners

[PDF] java tutorial for beginners pdf

[PDF] java tutorial pdf free download

[PDF] java tutorial point pdf drive

[PDF] java tutorials point pdf free download

[PDF] java tutorialspoint pdf download

[PDF] java tutorialspoint pdf free

[PDF] java windows programming

[PDF] java: a beginner's guide pdf