Programmation en Java Interface graphique. NGUYEN Thi Minh Tuyen



Documents pareils
Interfaces graphiques avec l API Swing

Développement Logiciel

Programmation Orientée Objet

Java 7 Les fondamentaux du langage Java

Avant-propos FICHES PRATIQUES EXERCICES DE PRISE EN MAIN CAS PRATIQUES

Construire des plug-ins pour SAS Management Console SAS 9.1

Desktop Intégration. Rémi Forax

GUIDE D UTILISATION DU BACKOFFICE

Guide de l utilisateur. Faites connaissance avec la nouvelle plateforme interactive de

Introduction à Expression Web 2

PRISE EN MAIN D UN TABLEUR. Version OPEN OFFICE

Utilisation de l éditeur.

TBI-DIRECT. Bridgit. Pour le partage de votre bureau. Écrit par : TBI Direct.

L ORDINATEUR FACILE D ACCÈS!

Cours 2 : programmation des interfaces graphiques

SOMMAIRE. Présentation assistée sur ordinateur. Collège F.Rabelais 1/10

Access 2007 FF Access FR FR Base

Optimiser pour les appareils mobiles

Form Designer Guide d utilisateur DOC-FD-UG-FR-01/01/12

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

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

pcon.planner 6 Préparer et présenter une implantation en toute simplicité

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons

WINDOWS 8. Windows 8 se distingue par la présence de 2 interfaces complémentaires :

Débuter avec Excel. Excel

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

Publication Assistée par Ordinateur

GUIDE DE DÉMARRAGE. SitagriPro Infinite FINANCEAGRI. Un service. c o r p o r a t e

Tutoriel. Votre site web en 30 minutes

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

Le cas «BOURSE» annexe

MAILING KOMPOZER... 2 CREEZ UNE PAGE... 2 FORMAT DE LA PAGE... 2 AJOUTER DU TEXTE SUR UNE PAGE... 4

145A, avenue de Port Royal, Bonaventure (Québec) G0C 1E0 Sans frais :

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

AVEC LIVE TRADER, VISEZ PLUS HAUT POUR VOS INVESTISSEMENTS

Activité 11 : Nuage de points ou diagramme de dispersion

Tapez le titre de la page «BASTIA ville méditerranéenne», puis allez deux fois à la ligne à l aide de la touche Entrée.

Auto-évaluation Programmation en Java

Note de cours. Introduction à Excel 2007

Le cas «BOURSE» annexe

Formation > Développement > Internet > Réseaux > Matériel > Maintenance

VOCABULAIRE LIÉ AUX ORDINATEURS ET À INTERNET

RECOPLUS LOGICIEL DE GESTION DES RECOMMANDES NOTICE D UTILISATION DE RECOPLUS RESEAU. N de série

F O R M A T I O N S LOTUS NOTES. 8.5 Utilisateurs rue de la Bôle. E U R L. a u c a p i t a l d e

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var Tel : bij@agasc.fr Word: Les tableaux.

PROCÉDURE D AIDE AU PARAMÉTRAGE

Création d un formulaire de contact Procédure

Publication dans le Back Office

Freeway 7. Nouvelles fonctionnalités

Support pour les langues s écrivant de droite à gauche

Silhouette Studio Leçon N 2

SpeechiTablet Notice d utilisation

Sélection du contrôleur

SOMMAIRE ÉTAPES OBLIGATOIRES. Récupérer le connecteur... 3

sommaire ÉTAPES OBLIGATOIRES Récupérer le connecteur... 3

Accès au Serveur de PAIE «SPV» par INTERNET Paramétrage du poste de travail «Windows»

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

Un exemple avec WORKSPACE d'interwrite

Édu-groupe - Version 4.3

Création et utilisation de formulaire pdf

Manuel du composant CKForms Version 1.3.2

Excel 2010 Intermediaire

MEDIAplus elearning. version 6.6

Tutorial Terminal Server sous

Cette fonctionnalité est paramétrable et accessible dans le module administration via le menu "Dossier / Administration".

L espace de travail de Photoshop

Création WEB avec DreamweaverMX

Correction des Travaux Pratiques Organiser son espace de travail

TP1 : Initiation à Java et Eclipse

Fiche Mémo : Options d accessibilité sous Windows et Internet Explorer 5

Paramètres d accessibilité des systèmes d exploitation Windows et Mac

Découvrez Windows NetMeeting

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

Licence de Biologie, 1ère année. Aide. [Aide 1] Comment utiliser l'explorateur Windows? Comment créer des dossiers?

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

Your Detecting Connection. Manuel de l utilisateur. support@xchange2.net

Connecter le lecteur réseau de Pro-Cardex 3 Vérifier la version du gestionnaire de base de données 5 Procéder à l installation 6

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE MINISTERE DE LA FORMATION PROFESSIONNELLE. Microsoft. Excel XP

Brady Mobile Application

qwertyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyuiopas dfghjklzxcvbnmqwertyuiopasdfghjklz mqwertyuiopasdfghjklzxcvbnmqwert

Niveau 1. Atelier d'initiation à l'ordinateur ... Fondation de la Bibliothèque Memphrémagog inc. Magog (Québec) J1X 2E7 Tél.

Edition de sites Jahia 6.6

Avertissement : Nos logiciels évoluent rendant parfois les nouvelles versions incompatibles avec les anciennes.

Mes premiers diaporamas avec Open Office Impress?

Le logiciel de création de site internet IZISPOT est un outil très puissant et qui est assez simple après quelques temps d utilisation.

Notice d'utilisation Site Internet administrable à distance

Utilisation de l'outil «Open Office TEXTE»

Manuel utilisateur Netviewer one2one

CREER UN PETIT SITE WEB EN COMPOSANT DES PAGES HTML

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

«Petit guide d utilisation Prezi» par Marc Nolet

I Pourquoi une messagerie?

Manuel de formation Spaceman 1 ère journée

Publier dans la Base Documentaire

Mode Opératoire Windows XP

Démarrer et quitter... 13

«Manuel Pratique» Gestion budgétaire

TUTORIEL IMPRESS. Ouvrir Impress cocher «présentation vierge», «suivant» cocher «écran», «suivant» cocher «standard», «créer»

Transcription:

Programmation en Java Interface graphique

Toolkits graphiques Java AWT Obsolète Swing Supporté par Sun/Oracle Repose sur AWT mais Swing <> AWT, JBu@on<>Bu@on SWT libre, iniaé par IBM/Eclipse 2

Swing Your ApplicaAon Swing AWT Components Bu@on Frame ScrollBar... Windows Font Dialog Frame Color Graphics AWT AWT Event Tool Kit Accessibility Java 2D Drag and Drop JFC 3

Conteneurs de haut niveau Trois classes de conteneurs premier niveau (Top- Level Containers): ne sont pas des sous classes de JComponent. Ces objets doivent leur nom au fait qu'ils consltuent toujours les objets de base d'une interface Swing. Un conteneur de premier niveau peut contenir des objets d'une des sous- classes de JComponent, mais n'est pas deslné à être contenu dans un autre conteneur de premier niveau. Ce groupe comprend les applets (JApplet), les dialogues (JDialog), et les cadres (JFrame). 4

5

JFrame Constructeur JFrame() JFrame(String) Rôle CréaAon d'une instance en précisant le Atre 6

JComponent Dérive des classes (AWT) Component et Container Ajoute elle- même de nombreuses méthodes Offre donc de très nombreuses foncaonnalités qui sont héritées par tous les composants graphiques java.lang.object java.awt.component java.awt.container javax.swing.jcomponent 7

JComponent JComponent JColorChooser JPanel JSplitPane AbstractBu@on JComboBox JPopupMenu JTabbedPane JBu@on JMenuItem JToggleBu@on JFileChooser JProgressBar JTable JCheckBox- MenuItem JRadioBu@on JInternalFrame JLabel JList JMenuBar JRootPane JScrollBar JScrollPane JSeparator JTableHeader JToolBar JToolTip JTree JTextComponent JRadioBu@on- MenuItem JMenu JCheckBox JOpAonPane JSlider JViewport JEditorPane JTextArea JTextField JLayeredPane JDesktopPane JTextPane JPasswordField 8

Etiquettes : la classe JLabel Constructeurs JLabel() JLabel(Icon) JLabel(Icon, int) JLabel(String) JLabel(String, Icon, int) JLabel(String, int) Rôle Création d'une instance sans texte ni image Création d'une instance en précisant l'image Création d'une instance en précisant l'image et l'alignement horizontal Création d'une instance en précisant le texte Création d'une instance en précisant le texte, l'image et l'alignement horizontal Création d'une instance en précisant le texte et l'alignement horizontal 9

Méthodes settext(string text) setopaque(..) setbackground(...) setfont(...) setforeground(...) sethorizontalalignment(...) setverticalalignment(...) sethorizontaltextalignment(int alignment) setverticaltextalignment(int alignment) seticon(icon icon) setdisabledicon(icon disabledicon) Rôle Permet d'initialiser ou de modifier le texte affiché Indique si le composant est transparent (paramètre false) ou opaque (true) Indique la couleur de fond du composant (setopaque doit être à true) Permet de préciser la police du texte Permet de préciser la couleur du texte Permet de modifier l'alignement horizontal du texte et de l'icône Permet de modifier l'alignement vertical du texte et de l'icône Permet de modifier l'alignement horizontal du texte uniquement Permet de modifier l'alignement vertical du texte uniquement Permet d'assigner une icône Permet de définir l'icône associée au JLabel lorsqu'il est désactivé 10

Class JButton JCheckBox JRadioButton JMenuItem JCheckBoxMenuItem JRadioButtonMenuItem JToggleButton Summary A common button. A check box button. One of a group of radio buttons. An item in a menu. A menu item that has a check box. A menu item that has a radio button. Implements toggle functionality inherited by JCheckBox and JRadioButton. Can be instantiated or subclassed to create two-state buttons. 11

Boutons JComponent AbstractBu@on JBu@on JToggleBu@on JCheckBox JRadioBu@on 12

Bouton Peut contenir du texte (qui peut être du code HTML) mais aussi une image (et on peut choisir la posiaon relaave des 2) Le caractère souligné du texte indique le caractère mnémonique (pour simuler un clic avec le clavier) Un bouton peut être invalidé (texte en «gris» du bouton de droite) 13

Constructeur JButton() JButton(String) JButton(Icon) JButton(String, Icon) Rôle préciser le texte du bouton préciser une icône préciser un texte et une icône 14

HTML dans les boutons Les dernières versions de swing ont ajouté la possibilité d inclure du code HTML dans les labels et les boutons (tous les types de boutons) Inclure le texte dans les balises <html> et </html> : new JBuYon("<html>Ligne 1<p>Ligne 2</html>") 15

HTML dans les composants Swing Les composants suivants perme@ent l ualisaaon de texte HTML : JBu@on, JLabel, JMenuItem, JMenu, JRadioBu@onMenuItem, JCheckBoxMenuItem, JTabbedPane, JToolTip, JToggleBu@on, JCheckBox, and JRadioBu@on 16

Exemple 17

ToggleButton Boutons qui ont 2 états : sélecaonnés ou pas Deux sous- classes CheckBox RadioBuYon 18

JCheckBox Constructeur JCheckBox(String) JCheckBox(String, boolean) JCheckBox(Icon) JCheckBox(Icon, boolean) JCheckBox(String, Icon) JCheckBox(String, Icon, boolean) Rôle précise l'intitulé précise l'intitulé et l'état spécifie l'icône utilisée précise l'intitulé et l'état du bouton précise l'intitulé et l'icône précise l'intitulé, une icône et l'état 19

Boîte à cocher: Traitement des événements Un clic sur un ToggleBu@on génère un AcAonEvent et un ItemEvent Avec une boîte à cocher, le plus simple est de traiter les ItemEvent avec un ItemListener Mais les boîtes à cocher n ont souvent pas d écouteurs et on relève leur valeur quand on en a besoin avec isselected() 20

Boîtes à cocher JCheckBox boite = new JCheckBox("Label"); boite.additemlistener(boiteitemlistener); // La boîte ne sera pas cochée boite.setselected(false);... // Récupère l'état de la boîte boolean on = boite.isselected(); 21

Boîtes à cocher: ItemListener class BoiteListener implements ItemListener { public void itemstatechanged(itemevent e) { Object source = e.getitemselectable(); if (source == boite) { } } } if (e.getstatechange() == ItemEvent.DESELECTED)... 22

AfIichage des boîtes à cocher Il faut ajouter toutes les boîtes à un container Le plus souvent un JPanel conaent les boîtes ; il est simple de les aligner horizontalement ou veracalement avec un GridLayout 23

JRadioButton Constructeur JRadioButton() JRadioButton(Icon) JRadioButton(Icon, boolean) JRadioButton(String) JRadioButton(String, boolean) JRadioButton(String, Icon) JRadioButton(String, Icon, boolean) Rôle Créer un bouton non sélectionné sans libellé Créer un bouton non sélectionné sans libellé avec l'icône fournie en paramètre Créer un bouton sans libellé avec l'icône et l'état fournis en paramètres Créer un bouton non sélectionné avec le libellé fourni en paramètre Créer un bouton avec le libellé et l'état fournis en paramètres Créer un bouton non sélectionné avec le libellé et l'icône fournis en paramètres Créer un bouton avec le libellé, l'icône et l'état fournis en paramètres 24

ButtonGroup Un groupe de boutons radio est encapsulé dans un objet de type BuYonGroup. Ajouter tous les JRadioBuYon du groupe en ualisant la méthode add() de la classe BuYonGroup. Pour désélecaonner tous les boutons: Appeler la méthode clearseleclon() 25

Exemple: boutons radios ButtonGroup groupe = new ButtonGroup(); JRadioButton b1 = new JRadioButton("Choix 1"); JRadioButton b2 = new JRadioButton("Choix 2"); groupe.add(b1); groupe.add(b2); panel.add(b1); panel.add(b2); 26

Bouton radio: Traitement des événements Le plus simple est d écouter avec un AcAonListener Cet événement est engendré quand le bouton radio est sélecaonné (pas quand il est désélecaonné) L ualisaaon d un ItemListener serait plus complexe car la sélecaon d un bouton du groupe désélecaonne tous les autres et engendre donc un grand nombre de ItemEvent 27

Boutons radio // Le groupe de boutons ButtonGroup group = new ButtonGroup(); // Les boutons JRadioButton b1 = new JRadioButton("Label1"); b1.setselected(true); // Sélectionne le bouton JRadioButton b2 = new JRadioButton("Label2"); // Ajoute les boutons au groupe group.add(b1);... // Ajoute les boutons dans l'interface graphique panel.add(b1);... // Ajoute les actionlisteners ; les "actioncommands" // peuvent différencier les boutons dans les listeners b1.setactioncommand("label1");... b1.addactionlistener(boutonlistener);... 28

AfIichage des boutons radio Il faut ajouter tous les boutons à un container Le plus souvent un JPanel conaent les boutons ; il est simple de les aligner horizontalement ou veracalement avec un GridLayout Le Bu@onGroup ne sert qu à indiquer quels boutons sont groupés pour désélecaonner les autres boutons quand un bouton est coché 29

Combobox 30

ComboBox Non modifiable : on choisit dans une liste Modifiable : on choisit dans une liste ou on entre un autre choix 31

2 types de ComboBox Non modifiable on l écoute par un AcAonListener qui reçoit un AcAonEvent quand l ualisateur fait un choix dans la liste Modifiable un AcAonEvent sera lancé aussi quand l ualisateur tape Return dans la zone de texte modifiable (sans doute après avoir tapé du texte) 32

Constructeurs JComboBox() JComboBox(ComboBoxModel<E> amodel) JComboBox(E[] items) JComboBox(Vector<E> items) 33

Exemple String[] petstrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; //Create the combo box, select item at index 4. //Indices start at 0, so 4 specifies the pig. JComboBox petlist = new JComboBox(petStrings); petlist.setselectedindex(4); petlist.addactionlistener(this); 34

public class ComboBoxDemo... implements ActionListener {... petlist.addactionlistener(this) {... public void actionperformed(actionevent e) { JComboBox cb = (JComboBox)e.getSource(); String petname = (String)cb.getSelectedItem();... }... } 35

String[] patternexamples = { "dd MMMMM yyyy", "dd.mm.yy", "MM/dd/yy", "yyyy.mm.dd G 'at' hh:mm:ss z", "EEE, MMM d, ''yy", "h:mm a", "H:mm:ss:SSS", "K:mm a,z", "yyyy.mmmmm.dd GGG hh:mm aaa" };... JComboBox patternlist = new JComboBox(patternExamples); patternlist.seteditable(true); patternlist.addactionlistener(this); 36

Utiliser un ComboBox Comme pour les zones de texte ou les listes, bien souvent on n écoute pas un combobox On récupère l élément choisi dans le combobox quand on en a besoin, par exemple dans l écouteur d un bouton qui a lancé une acaon 37

Récupérer l élément choisi On ualise le plus souvent la méthode Object getselecteditem() qui retourne l objet sélecaonné par l ualisateur Autre méthode : int getselectedindex() retourne le numéro du choix (- 1 si le choix n est pas dans la liste pour un combobox modifiable) 38

Composants pour la saisie de texte 39

Texte JTextField JPasswordField JComponent JTextComponent JTextArea JEditorPane JTextPane 40

JTextComponent Dans le paquetage javax.swing.text Fournit beaucoup de foncaonnalités à toutes les classes filles qui manipulent du texte 41

JTextComponent ConAent les méthodes de base pour traiter une zone de saisie ou/et d affichage de texte : {get/set}text pour obtenir ou me@re le texte (ou une parae du texte) contenu dans le composant seteditable() pour indiquer si l ualisateur peut modifier le texte copier/couper/coller avec le clipboard du système ualisaaon et gesaon du point d inseraon etc. 42

JTextField JTextField textfield = new JTextField("Texte initial"); textfield.addactionlistener( new MyActionListener()); class MyActionListener implements ActionListener { public void actionperformed(actionevent evt) { JTextField tf = (JTextField)evt.getSource(); String texte = tf.gettext(); // Traitement du texte... } } 43

Récupérer un mot de passe Les mots de passe doivent être récupérés dans un tableau de char et pas dans une String pour pouvoir les effacer de la mémoire après ualisaaon JPasswordField pwf = new JPasswordField("Texte initial"); pwf.setechochar('#'); pwf.addactionlistener(actionlistener); 44

Traiter le mot de passe public void actionperformed(actionevent e) { char[] mdp = pwf.getpassword(); if (ispasswordcorrect(mdp)) {... } else {... } // On n est jamais trop prudent... java.util.arrays.fill(mdp, 0); } La taille du tableau mdp est exactement la longueur du mot de passe tapé par l ualisateur 45

JTextArea Constructeurs textarea = new JTextArea("Ligne1\nLigne2"); //nombre de lignes et de colonnes en paramètres textarea = new JTextArea(5, 40); Le plus souvent on met la zone de texte dans un ScrollPane JScrollPane sc = new JScrollPane(textArea); gettext() récupère le texte du JTextArea settext(string) donne la valeur du texte append(string) ajoute du texte à la fin 46

Les lignes dans un JTextArea Tous les composants qui peuvent contenir du texte ualisent le caractère \n pour passer à la ligne. setlinewrap(boolean): passer true pour que les lignes trop longues soient affichées sur la ligne suivante. setwrapstyleword(boolean): passer true pour que les mots ne soient pas coupés en fin de ligne. 47

Écouteur pour composant de texte Si on veut traiter tout de suite les différentes modificaaons introduites dans le texte : textarea.getdocument().adddocumentlistener( new MyDocumentListener());... class MyDocumentListener implements DocumentListener { public void insertupdate(documentevent evt) {... } public void removeupdate(documentevent evt) {... } public void changedupdate(documentevent evt) {... } } 48

JFormattedTextField Introduite par le SDK 1.4 Permet de donner un format pour la saisie des données (et aussi éventuellement pour leur affichage) De très nombreuses possibilités sont offertes au programmeur ; Par exemple: pour dire ce qui se passe si la valeur saisie ne correspond pas au format 49

Exemple DateFormat f = new SimpleDateFormat("dd/MM/yyyy"); DateFormatter df = new DateFormatter(f); JFormattedTextField ftf = new JFormattedTextField(df); // Pour montrer le format de saisie à l utilisateur tft.setvalue(new Date()); try { MaskFormatter mf = new MaskFormatter("(##)## ## ## ##"); // Si on veut indiquer les emplacements à l utilisateur: mf.setplaceholdercharacter( _ ); JFormattedTextField ftf = new JFormattedTextField(mf); } catch(parseexception e) {... } 50

JEditorPane Afficher une page d un serveur HTML ou une aide en ligne. 51

Exemple JEditorPane ep = new JEditorPane(); ep.seteditable(false);... URL url = new URL("file://truc/aide.html"); try { ep.setpage(url); } catch (IOException e) {... } 52

Fenêtre de dialogue 53

Généralités sur les dialogues Dépend d une JFrame Peut être modale (l ualisateur doit répondre avant de faire autre chose) ou non 54

Les classes pour les dialogues JOpAonPane est un composant léger, classe fille de JComponent permet d avoir très simplement les cas les plus fréquents de fenêtres de dialogue affiche une fenêtre modale Pour les cas non prévus par JOpAonPane, on doit ualiser la classe JDialog (composant lourd) 55

Utilisation de JOptionPane 4 méthodes staac de la classe qui font afficher des fenêtres de dialogue modales de divers types : message d informaaon avec bouton OK (showmessagedialog) demande de confirmaaon avec boutons Oui, Non et Cancel (showconfirmdialog) saisie d une informaaon sous forme de texte, de choix dans une liste ou dans une combobox (showinputdialog) fenêtres plus complexes car on peut configurer les composants (showopaondialog) 56

Look de la fenêtre de dialogue Chaque type de fenêtre de dialogue a un aspect différent Cet aspect est donné par l icône placée en haut à gauche de la fenêtre les boutons placés en bas de la fenêtre 57

Types de messages On peut indiquer un type de message qui indiquera l icône affichée en haut, à gauche de la fenêtre (message d informaaon par défaut) Ce type est spécifié par des constantes : JOpAonPane.INFORMATION_MESSAGE JOpAonPane.ERROR_MESSAGE JOpAonPane.WARNING_MESSAGE JOpAonPane.QUESTION_MESSAGE JOpAonPane.PLAIN_MESSAGE 58

Boutons placés dans la fenêtre Ils dépendent des méthodes appelées : showmessagedialog : bouton Ok showinputdialog : Ok et Cancel showconfirmdialog : dépend du paramètre passé ; les différentes possibilités sont DEFAULT_OPTION YES_NO_OPTION YES_NO_CANCEL_OPTION OK_CANCEL_OPTION showopaondialog : selon le tableau d objets passé en paramètre 59

Valeurs retournées par les méthodes showconfirmdialog : une des constantes OK_OPTION CANCEL_OPTION YES_OPTION NO_OPTION CLOSED_OPTION showinputdialog : le texte (String) qu a choisi ou tapé par l ualisateur showopaondialog : le numéro du bouton sur lequel l ualisateur a cliqué ou CLOSED_OPTION 60

Message d information Le dialogue peut se limiter à un simple message envoyé à l ualisateur qui indique qu il a reçu le message en cliquant un bouton JOptionPane.showMessageDialog(frame, "Eggs aren't supposed to be green."); 61

Message d erreur JOptionPane.showMessageDialog(frame, "Le message d erreur", "Titre fenêtre dialogue", JOptionPane.ERROR_MESSAGE); 62

Saisie d une valeur Le dialogue permet à l ualisateur de saisir une valeur renvoyée String nombre = JOptionPane.showInputDialog("Donnez un nombre"); Il peut même être ualisé dans un environnement non graphique 63

ConIirmation pour quitter Demander une confirmaaon pour qui@er une applicaaon : setdefaultcloseoperation(windowconstants.do_nothing_on_close);... int reponse = JOptionPane.showConfirmDialog(this, "Voulez-vous vraiment quitter?", "Quitter l'application", JOptionPane.YES_NO_OPTION); if (reponse == JOptionPane.YES_OPTION) { } System.exit(0); 64

Franciser une fenêtre de dialogue Ce problème a été résolu dans les dernières versions du JDK Dans les anciennes versions les textes des boutons étaient en anglais Un des moyens pour les avoir en français : UIManager.put("OptionPane.yesButtonText", "Oui"); UIManager.put("OptionPane.noButtonText", "Non"); Si vous voulez connaître les autres propriétés de la classe UIManager associées au look and feel : System.out.println(UIManager.getLookAndFeelDefaults()); 65

Fenêtres de dialogue complexes Pour les fenêtres de dialogue plus complexes ou non modales, il faut hériter de la classe JDialog Par exemple: le code d une classe qui affiche une fenêtre de dialogue qui demande un nom d ualisateur et un mot de passe (les caractères tapés ne sont pas visibles) Cet exemple montre comment iniaaliser la fenêtre de dialogue, afficher la fenêtre, et finalement récupérer les valeurs saisies par l ualisateur 66

Fenêtre de dialogue complexe public class SaisieMDP extends JDialog implements ActionListener { private JPasswordField zonemdp; private JButton valider, annuler; private boolean ok; public SaisieMDP(JFrame parent) { super(parent, "Connexion", true); Container contentpane = getcontentpane(); // Panel pour mot de passe JPanel p1 = new JPanel(); p1.setlayout(new GridLayout(2, 2)); p1.add(new JLabel("Mot de passe :")); zonemdp = new JPasswordField(""); p1.add(zonemdp); contentpane.add(p1, BorderLayout.CENTER); 67...

... // Panel pour les boutons JPanel p2 = new JPanel(); valider = new JButton(Valider); valider.addactionlistener(this); p2.add(valider); annuler = new JButton(Annuler); valider.addactionlistener(this); p2.add(valider); contentpane.add(p2, BorderLayout.SOUTH); } public char[] getmdp() { return zonemdp.getpassword(); }... 68

public void actionperformed(actionevent evt) { if (evt.getsource() == valider) ok = true; else if (evt.getsource() == annuler) ok = false; setvisible(false); } public boolean affichedialog() { ok = false; setvisible(true); // reste coincé ici jusqu au clic // sur un des boutons valider ou annuler return ok; } } 69

Utilisation de la fenêtre de dialogue // this est une instance d une sous-classe de JFrame SaisieMDP smdp = null; char[] mdp; // le mot de passe... if (smdp == null) smdp = new SaisieMDP(this); // affichedialog() affiche la fenêtre de dialogue. // Le programme ne passe à la ligne suivante que // lorsque cette fenêtre est effacé par le clic du // bouton de validation ou d annulation de la fenêtre if (smdp.affichedialog()) { // récupère le mot de passe mdp = smdp.getmdp(); 70 }

Fenêtres de dialogue complexes Dans la praaque: on peut le plus souvent éviter l ualisaaon de la classe JDialog En effet, les méthodes de la classe JOpAonPane acceptent en paramètre toute instance de la classe Object et pas seulement une String. On peut ainsi passer des composants graphiques complexes 71

Fenêtres de dialogue particulières JFileChooser pour choisir un fichier 3 types : pour ouvrir pour sauvegarder à personnaliser JColorChooser pour choisir une couleur 72

Menus et barres d outils 73

Les classes Object Component Container JComponent JMenuBar JPopupMenu JAbstractBu@on JSeparator JMenuItem JMenu JCheckboxMenuItem JRadioBu@onMenuItem 74

Exemple 75

Exemple JMenuBar menubar = new JMenuBar(); frame.setjmenubar(menubar); // Un menu de la barre de menu JMenu menu = new JMenu("Un Menu"); menu.setmnemonic(keyevent.vk_m); menubar.add(menu); // Choix des menus JMenuItem menuitem; menuitem = new JMenuItem("Texte", KeyEvent.VK_T); menuitem.setaccelerator(keystroke.getkeystroke( KeyEvent.VK_1, ActionEvent.ALT_MASK)); menuitem.setactioncommand("text"); menu.add(menuitem); 76

menuitem = new JMenuItem("Texte et image", new ImageIcon("images/middle.gif")); menuitem.setmnemonic(keyevent.vk_b); menuitem.setactioncommand("text-image"); menu.add(menuitem); // Image seulement menuitem = new JMenuItem(new ImageIcon("images/middle.gif")); menu.add(menuitem); // Le menu d aide toujours à droite de la fenêtre menubar.add(box.createhorizontalglue()); menubar.add(menuaide); 77

// Groupe de boutons radio menu.addseparator(); ButtonGroup group = new ButtonGroup(); JRadioButtonMenuItem rbmenuitem = new JRadioButtonMenuItem("Un choix bouton radio"); rbmenuitem.setselected(true); rbmenuitem.setmnemonic(keyevent.vk_r); group.add(rbmenuitem); menu.add(rbmenuitem); rbmenuitem = new JRadioButtonMenuItem("Autre choix"); rbmenuitem.setmnemonic(keyevent.vk_a); group.add(rbmenuitem); 78 menu.add(rbmenuitem);

// Groupe de boîtes à cocher menu.addseparator(); JCheckBoxMenuItem cbmenuitem = new JCheckBoxMenuItem("Un boîte à cocher"); cbmenuitem.setmnemonic(keyevent.vk_c); menu.add(cbmenuitem); cbmenuitem = new JCheckBoxMenuItem("Une autre"); cbmenuitem.setmnemonic(keyevent.vk_u); menu.add(cbmenuitem); 79

// Un sous-menu menu.addseparator(); JMenu submenu = new JMenu("Un sous-menu"); submenu.setmnemonic(keyevent.vk_s); menuitem = new JMenuItem("Un choix du sous-menu"); menuitem.setaccelerator(keystroke.getkeystroke( KeyEvent.VK_2, ActionEvent.ALT_MASK)); submenu.add(menuitem); 80

Récupérer des entrées de menu Il faut ualiser les méthodes qui renvoient un Component et pas un JMenuItem (existent compaabilité avec AWT) ; Exemple : Component getmenucomponent(int n) Ces méthodes renvoient aussi les séparateurs et pas seulement des JMenuItem 81

Mnémoniques et accélérateurs On peut faciliter l ualisaaon des acaons associées aux menus de 2 façons : un mnémonique permet d associer un caractère à un choix de menu ; il permet de se déplacer dans l arborescence des menus avec le clavier Le choix doit être visible au moment de l ualisaaon du clavier la combinaison de touches à taper dépend du look & feel (Alt + caractère sous Windows) un accélérateur permet de déclencher une acaon d un menu avec le clavier, sans passer par les menus 82

Attacher des actions à un menu Pour chaque choix des menus, on ajoute un écouteur, par exemple, menuitem.addaclonlistener(this); Si un écouteur écoute plusieurs choix, on peut disanguer les choix avec getacloncommand() Pour les boîtes à cocher, on ajoute un ItemListener, par exemple : cbmenuitem.additemlistener(this); 83

Invalider des choix de menus Un choix de menu peut être invalidé par itemmenu.setenabled(false); il apparaîtra alors en grisé On peut valider ou invalider un choix d un menu juste avant l affichage du menu dans un écouteur de menu (dans la méthode menuselected() de l interface MenuListener, qui est exécutée juste avant l affichage d un menu) 84

Menus popup Ce sont des menus qui apparaissent quand l ualisateur fait une certaine acaon sur le composant dans lequel ils sont définis L acaon dépend du système sur lequel le programme s exécute (bouton droit de la souris sous Windows par exemple) Si on veut faire afficher le menu popup quand l ualisateur fait ce@e acaon sur un composant, on ualise un MouseListener du composant 85

Actions à exécuter On les code dans des AcLonListener associés aux choix du menu popup (comme dans un menu ordinaire) Ce code peut ualiser la méthode getinvoker() qui renvoie le composant sur lequel le menu popup a été appelé 86

Exemple // Création du menu JPopupMenu popup = new JPopupMenu("Titre menu"); menuitem = new JMenuItem("Un choix du menu popup"); menuitem.addactionlistener(this); popup.add(menuitem); menuitem = new JMenuItem("Autre choix");... // Ajoute un écouteur qui affiche le menu popup // aux composants qui pourront afficher ce menu MouseListener ml = new EcouteurPourPopup(); textarea.addmouselistener(ml); panel.addmouselistener(ml);... 87

class EcouteurPourPopup extends MouseAdapter { public void mousereleased(mouseevent e) { if (e.ispopuptrigger()) { popup.show(e.getcomponent(), e.getx(), e.gety()); } } } 88

Barre d outils Permet de lancer une acaon en cliquant sur une des peates icônes de la barre Une barre d ouals peut être placée horizontalement ou veracalement sur un des bords d une fenêtre Elle peut aussi apparaître dans une fenêtre «flo@ante» 89

Exemple: Barre d outils JToolBar toolbar = new JToolBar(); // Ajoute les boutons qui représentent les "outils" ImageIcon icon = new ImageIcon("image.gif"); JButton button1 = new JButton(icon); button.addactionlistener(actionlistener); toolbar.add(button); // Idem pour les autres boutons...... JPanel contentpane = new JPanel(); contentpane.setlayout(new BorderLayout());... contentpane.add(toolbar, BorderLayout.NORTH); contentpane.add(scrollpane, BorderLayout.CENTER); 90

Conteneurs intermédiaires particuliers 91

Types de containers Fenêtres internes fenêtres internes à une fenêtre SplitPane permet de diviser une fenêtre en plusieurs sous- paraes dont l ualisateur peut changer les dimensions TabbedPane onglets qui perme@ent à l ualisateur de choisir facilement (simple clic) parmi plusieurs interfaces 92

Utilité des fenêtres internes Permet de travailler sur plusieurs documents en même temps, ou sur des paraes différentes d un même document Les fenêtres internes peuvent être manipulées comme des fenêtres externes : déplacées, iconifiées, redimensionnées, 93

Fonctionnement 1. On ajoute un JDesktopPane à une fenêtre 2. On ajoute les JInternalFrame au JDesktopPane Remarques : le gesaonnaire de placement d un JDesktopPane est null pas de WindowEvent pour une JInternalFrame mais des InternalFrameEvent 94

Exemple desktop = new JDesktopPane(); setcontentpane(desktop); FenetreInterne fenetre = new FenetreInterne(); fenetre.setvisible(true); desktop.add(fenetre); try { fenetre.setselected(true); }catch (java.beans.propertyvetoexception e) {} 95

} Création fenêtre interne class FenetreInterne extends JInternalFrame { static int numfenetre = 0; static final int x = 30, y = 30; // haut-gauche fenêtre public FenetreInterne() { super("document #" + (++numfenetre), true, //redimensionnable true, //on peut la fermer true, //on peut la «maximiser» avec un clic true); //iconifiable // Ajouter des composants dans la fenêtre... // (comme avec JFrame, avec contentpane) setlocation(x*numfenetre, y*numfenetre); setsize(200, 200); // INDISPENSABLE!! 96 }

SplitPane Très uale pour travailler avec beaucoup d informaaons diverses dans une fenêtre Quand on travaille sur une des informaaons, on peut occuper toute la place en hauteur ou en largeur en cliquant sur les peats triangles, ou donner la bonne taille à la zone de travail 97

Exemple splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, splitpane.setonetouchexpandable(true); paneliste, paneimages); splitpane.setdividerlocation(150); minimumsize = new Dimension(100, 50); paneliste.setminimumsize(minimumsize); paneimages.setminimumsize(minimumsize); 98

Onglets Une autre façon que les splitpane pour travailler avec beaucoup d informaaons diverses dans une fenêtre La différence est qu on ne voit qu un seul type d informaaon à la fois avec les onglets 99

Exemple int position = JTabbedPane.BOTTOM; // TOP par défaut JTabbedPane pane = new JTabbedPane(position); ImageIcon icon = new ImageIcon("image.gif"); pane.addtab("nom de l'onglet", icon, panel, "Texte de la bulle"); 100

Exemple ImageIcon icon = new ImageIcon("images/middle.gif"); JTabbedPane tabbedpane = new JTabbedPane(); Component panel1 = maketextpanel("blah"); tabbedpane.addtab("un", icon, panel1, "Fait "); tabbedpane.setselectedindex(0); Component panel2 = maketextpanel("bla bla"); tabbedpane.addtab("deux", icon, panel2, "..."); Component panel3 = maketextpanel("bla bla bla"); tabbedpane.addtab("trois", icon, panel3, "..."); 101

Barre de progression 102

ProgressMonitor JProgressBar 103

Les différentes possibilités Elles servent à afficher la progression d une ou plusieurs tâches qui se déroulent en parallèle On peut les implanter avec plusieurs classes : ProgressMonitor pour afficher la progression d une seule tâche dans une fenêtre de dialogue ProgressMonitorInputStream, sous- classe de java.io.filterinputstream, pour suivre la lecture d un flot JProgressBar, barre de progression élémentaire pour construire une soluaon dans les cas plus complexes 104

Création d un ProgressMonitor // Un ProgressMonitor ne peut être // réutilisé, il faut en créer un nouveau à // chaque nouvelle tâche progressm = new ProgressMonitor(fenetre, "Chargement ", "", 0, 100); progressm.setprogress(0); // S affiche au bout de 2 secondes par défaut progressm.setmillistodecidetopopup(2000); 105

Utilisation du ProgressMonitor La tâche longue peut modifier les informaaons affichées par le monitor par les méthodes setnote(string message) qui affiche un message (par exemple, le nom du fichier en cours de chargement) setprogress(int progression) qui indique la progression de l opéraaon avec un nombre compris entre le minimum et le maximum donné à la créaaon du monitor (on peut les modifier en cours de route) 106

AfIichage d un ProgressMonitor Il s affiche dès sa créaaon, après le délai indiqué par setmillistodecidetopopup Il reste affiché jusqu à ce qu il a@eigne le maximum, ou jusqu à l appel de la méthode close() 107

Interruption avec un ProgressMonitor Un ProgressMonitor conaent un bouton pour interrompre la tâche en cours La méthode boolean iscancelled() permet de savoir si l ualisateur a cliqué sur ce bouton L interrupaon n est pas automaaque ; c est le code qui doit interrompre la tâche si iscancelled() renvoie true 108