CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV JFC/Swing Module Java Expert.

Post on 03-Apr-2015

105 views 0 download

Transcript of CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV JFC/Swing Module Java Expert.

CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT

UV JFC/Swing

Module Java Expert

Module UV JavaPage 2 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Module Java

Vue d’ensemble du langage Java Le langage Java : syntaxe et sémantique Programmation multi-tâche : les threads Accéder aux bases de données Composants réutilisables : le modèle JFC/Swing (MVC) Développement Client/Serveur Présentation d’un IDE : WSAD / Forté / JBuilder Les serveurs d’applications J2EE Les Enterprise JavaBeans Ré-ingénierie d’applications Java

Module UV JavaPage 3 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Introduction aux JFC/Swing

Module Java

Module UV JavaPage 4 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Plan

Introduction Packages Composants Les Evénements Utilisation avancée des Composants

Module UV JavaPage 5 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Qu’est ce que les JFC?

JFC Java Foundation Classes 5 parties :

– Java 1.1 Abstract Window Toolkit (AWT)– Java2D API– ***Swing***– Native Drag and Drop, et Copy and Paste– API pour l'Accessibilité (aveugle, ...)

Module UV JavaPage 6 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Qu’est-ce que Swing?

Abstract Window Toolkit (AWT) V2 100% Pure Java

– Nécessite le JDK 1.1.2 ou supérieur

Fait parti des JFC– Composants– Nouveaux composants de haut niveau– Look & Feel modulable

Module UV JavaPage 7 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Philosophie de l’AWT

Le plus petit dénominateur Commun– Si non disponible en natif sur l’une des plate-formes Java,

alors non disponible sur toutes les plate-formes Java

Ensemble de Composant Simple Composants basés Peer

– La Plate-forme contrôle l’apparence des composants– Inconsistances dans les implémentations

• Interfaçage avec la plate-forme native => erreur

Module UV JavaPage 8 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Ce qui était Mauvais

AWT pas assez efficace Chacun crée de nouveaux Composants

– IFC Netscape– AFC, WFC Microsoft, ...

Temps de chargement de l’Applet trop long– Les éditeurs voulaient leur ensemble de composants,

incorporés dans les browsers

Module UV JavaPage 9 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Philosophie Swing

Ensemble plus Riche de Composants– Remplace l’AWT– Ajoute des composants plus complexes

Composants Swing sont basés sur Java– Si des problèmes, les même problèmes partout

100% Pure Java– Java 1.1.2+ nécessaire– Uniquement le modèle d'événements de Java 1.1

Module UV JavaPage 10 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les Particularités de Swing

Inclut avec les API Java 2 (JDK 1.2) Utilisable dans les Environnements Java 1.1

– javax.swing.*– Ne peut être dans la hiérarchie java.* et être

téléchargé par des browsers JDK 1.1

Module UV JavaPage 11 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Deux Vues des Swing

Alternative aux composants AWT Java 1.1– modèle d’événements 1.0 NON supporté– Quelques nouveaux composants.

Interface Model/View/Controller– Séparer les données des vues écrans et des interactions– Plus de travail nécessaire

Module UV JavaPage 12 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

L’ensemble des composants Swing

Exemple de programme basé sur les Swing

Module UV JavaPage 13 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

De l’AWT aux SWING

Pour la plupart des composants, ajouter J avant le nom– Button JButton, Applet JApplet, …

Modèle d'événements Java 1.1 Les containers Swing intègrent le double-buffer

– Evite le scintillement des composants Swing

Module UV JavaPage 14 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Swing : le remplacement de l’AWT

Module Java

Module UV JavaPage 15 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le Look and Feel

Personnaliser l ’aspect des composants graphiques :– indépendant des plate-formes : style Metal– dépendant du système :windows, ...

Module UV JavaPage 16 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le Look and Feel

Module UV JavaPage 17 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le Look and Feel

Utiliser le look d ’affichage Metal

try { UIManager.setLookAndFeel (

"javax.swing.plaf.metal.MetalLookAndFeel");} catch (java.lang.ClassNotFoundException e) { // Ne peut changer le look and feel}

Module UV JavaPage 18 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le Look and Feel

Utiliser le look d ’affichage Metal

try { UIManager.setLookAndFeel (

UIManager.getCrossPlatformLookAndFeelClassName());} catch (java.lang.ClassNotFoundException e) { // Ne peut changer le look and feel}

Module UV JavaPage 19 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le Look and Feel

Utiliser le look d ’affichage du système

try { UIManager.setLookAndFeel (

UIManager.getSystemLookAndFeelClassName());} catch (java.lang.ClassNotFoundException e) { // Ne peut changer le look and feel}

Module UV JavaPage 20 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Swing vs. AWT 1.1

class MyActionListener implements ActionListener { public void actionPerformed (ActionEvent e) { System.out.println (e.getActionCommand()); }}...ActionListener al = new MyActionListener();Button b1 = new Button ("Hello");b1.addActionListener (al);add (b1, BorderLayout.NORTH);

JButton b2 = new JButton ("World");b2.addActionListener (al);add (b2, BorderLayout.SOUTH);

Module UV JavaPage 21 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les JButton Swing

import java.awt.*; import javax.swing.*;public class MyFrame1 extends Frame { Icon icon1 = new ImageIcon ("space01.jpg"); Icon icon2 = new ImageIcon ("space02.jpg"); Icon icon3 = new ImageIcon ("space03.jpg"); public MyFrame1() { JButton b1 = new JButton (icon1); b1.setPressedIcon (icon2); b1.setRolloverIcon (icon3); b1.setRolloverEnabled (true); b1.setToolTipText ("Hello"); add (b1, BorderLayout.NORTH); } public static void main (String args[]) { Frame f = new MyFrame1(); f.pack(); f.show(); }}

Module UV JavaPage 22 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Amélioration des JButton

Support des composants Image– Actuellement supporte les “Icon”– MediaTracker non nécessaires – Serializable

Séparer les Icons des différents états– Normal / Disabled / Disabled-Selected / Pressed / Rollover /

Selected

Texte d’aide : ToolTip Raccourcis clavier

Module UV JavaPage 23 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Vue des composants Swing

Module Java

Module UV JavaPage 24 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Vue des paquetages Swing

La collection Swing est constitué de 17 paquetages

javax.swing – le paquetage Swing racine définit les composants, les

adapters, les modèles par défaut des composants, et les interfaces pour tous les modèles et les containers.

Module UV JavaPage 25 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Vue des paquetages Swing

javax.swing.border – Le paquetage border déclare l ’interface Border et ses classes, afin

de définir les styles d ’affichage spécifiques aux bords des composants.

javax.swing.colorchooser – Le paquetage colorchooser contient les classes pour choisir la

couleur du composant.

Module UV JavaPage 26 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Vue des paquetages Swing

javax.swing.event – Le paquetage event est pour les types d ’événements et les

listeners spécifiques des composants Swing. En plus des types java.awt.event, les composants Swing peuvent générer leurs propres types d ’événements.

javax.swing.filechooser – le paquetage filechooser contient les classes pour la sélection de

fichiers.

Module UV JavaPage 27 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Vue des paquetages Swing

javax.swing.plaf.* – Le paquetage look-and-feel (Pluggable Look And Feel) contient

les classes (delegates) de l ’Interface Utilisateur (UI) qui implémentent les aspects des composants Swing. javax.swing.table

– Le paquetage table définit les interfaces et les classes pour les tableaux.

Module UV JavaPage 28 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Vue des paquetages Swing

javax.swing.text – Le paquetage text contient les classes pour le framework des

documents Swing.

javax.swing.text.html.* – Le paquetage text.html contient les classes pour l ’analyse et

l ’affichage de l ’HTML version 3.2.

Module UV JavaPage 29 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Vue des paquetages Swing

javax.swing.text.rtf – Le paquetage text.rtf définit les classes pour le rendu de

documents basic Rich Text Format (RTF).

javax.swing.tree – Le paquetage tree contient les interfaces et les classes qui

supportent l ’affichage sous forme d ’arbres (explorateur Window).

Module UV JavaPage 30 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Vue des paquetages Swing

javax.swing.undo – Le paquetage undo permet le support des classes pour

implémenter les capacités du undo/redo dans une GUI.

javax.accessibility – Le paquetage JFC Accessibility est inclu avec les classes

Swing, pour le support d ’outils d ’aide aux personnes handicapées.

Module UV JavaPage 31 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Hiérarchie Swing

Module UV JavaPage 32 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Hiérarchie Swing

Module UV JavaPage 33 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les Icônes

Une image de taille fixe Peuvent être utilisées avec la plupart des composants

(e.g. JButton) Icon est une interface que n’importe quelle classe peut

implémenter Icon utilisé à la place de Image car Image est chargé

de manière asynchrone et non sérialisable

Module UV JavaPage 34 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de création d ’Icône

ImageIcon image1 = new ImageIcon(’’bouton1.gif’’);

ImageIcon image2 = new ImageIcon(’’bouton2.gif’’);

Module UV JavaPage 35 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Utilisation des composants Swing

Module Java

Module UV JavaPage 36 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Composants de haut niveau

Toutes les sous-classes de Window, non de JComponent Non portables, ils ont des composants peer Composants ajoutés au panel de contenu

– interface RootPaneContainer - délégué au container

Module UV JavaPage 37 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Utilisation du RootPaneContainer

Ne pas ajouter de composants directement dans les containers de haut niveau :– aFrame.add (new Button (“Help”));

Ajouter au panel de contenu:“content pane”– aJFrame.getContentPane().add (…);– possède un Layout manager - par défaut: BorderLayout

JDialog, JFrame, JWindow, JApplet, JInternalFrame

Module UV JavaPage 38 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de JFrame

public class FrameTester { public static void main (String args[]) { JFrame f = new JFrame ("JFrame Example"); Container c = f.getContentPane(); c.setLayout (new FlowLayout()); for (int i = 0; i < 5; i++) { c.add (new JButton ("No")); c.add (new Button ("Batter")); } c.add (new JLabel ("Swing")); f.setSize (300, 200); f.show(); }}

Module UV JavaPage 39 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Comportement de fermeture d’une JFrame

Lorsque l’utilisateur sélectionne l’option de fermeture de la fenêtre Jframe => comportement par défaut– Frame ne fait rien– JFrame est caché (mais non détruite)

setDefaultCloseOperation (opération)– JFrame.DO_NOTHING_ON_CLOSE– JFrame.HIDE_ON_CLOSE– JFrame.DISPOSE_ON_CLOSE– JFrame.EXIT_ON_CLOSE

Module UV JavaPage 40 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

JApplet

L’utilisation de composants Swing dans une applet nécessite d’utiliser la sous-classe JApplet, et non Applet– JApplet est une sous-classe de Applet– Peut avoir une JMenuBar– LayoutManager par défaut est BorderLayout

Module UV JavaPage 41 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

JOptionPane

Boîtes de dialogues standard– Yes, No, Cancel - ou paramétrables– Message d’avertissement, une question– Saisies utilisateurs– Les boîtes de dialogues bloquent le thread courant– String response =

JOptionPane.showInputDialog(this, "Enter input:");

Module UV JavaPage 42 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

4 types de JOptionPane

ConfirmDialog– pose une question, avec des boutons réponses : Yes, No et

Cancel

InputDialog– Invite à saisir du texte

MessageDialog– affiche un message

OptionDialog– inclut les 3 autres types de boîtes

Module UV JavaPage 43 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemples de JOptionPane

Module UV JavaPage 44 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Pour créer une boîte de dialogue :– showConfirmDialog(Composant, Objet)– Composant est le conteneur à considérer comme le parent de la boîte

de dialogue (null autorisé)– Objet est soit une chaîne, un composant ou une icône (à la place du

message)

Le composant ConfirmDialog

Module UV JavaPage 45 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Pour créer une boîte de dialogue :– showConfirmDialog(Composant, Objet, Titre, BoutonsOption,

TypeBoite)– BoutonsOption pour configurer les types de boutons– TypeBoite pour spécifier le type de message à afficher

Le composant ConfirmDialog

Module UV JavaPage 46 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

La ConfirmDialog Retourne – JOptionPane.YES_OPTION, – JOptionPane.NO_OPTION – JOptionPane.CANCEL_OPTION

Le composant ConfirmDialog

Module UV JavaPage 47 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le paramètre TypeBoite spécifie l’icône– JOptionPane.ERROR_MESSAGE– JOptionPane.INFORMATION_MESSAGE– JOptionPane.PLAIN_MESSAGE– JOptionPane.QUESTION_MESSAGE– JOptionPane.WARNING_MESSAGE

Le composant ConfirmDialog

Module UV JavaPage 48 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de ConfirmDialog

int reponse;

reponse = JOptionPane.showConfirmDialog(null, ’’Voulez-vous… ?’’);

Module UV JavaPage 49 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de ConfirmDialog

int reponse;

reponse = JOptionPane.showConfirmDialog(null, ’’Voulez-vous… ?’’,

’’ Titre Question’’,

JOptionPane.YES_NO_OPTION,

JOptionPane.ERROR_MESSAGE);

Module UV JavaPage 50 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Pour créer une boîte de dialogue d ’entrée de texte :– showInputDialog(Composant, Objet)– showInputDialog(Composant, Objet, Titre, TypeBoite)

Le composant InputDialog

Module UV JavaPage 51 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

La InputDialog Retourne – String

Paramétrage de la InputDialog :– JOptionPane.ERROR_MESSAGE– JOptionPane.INFORMATION_MESSAGE– JOptionPane.PLAIN_MESSAGE– JOptionPane.QUESTION_MESSAGE– JOptionPane.WARNING_MESSAGE

Le composant InputDialog

Module UV JavaPage 52 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de InputDialog

String reponse;

reponse = JOptionPane.showInputDialog(null, ’’Saisir … ?’’);

Module UV JavaPage 53 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de InputDialog

String reponse;

reponse = JOptionPane.showInputDialog(null, ’’Saisir … ?’’,

’’ Boite Saisie ’’, JOptionPane.QUESTION_MESSAGE);

Module UV JavaPage 54 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Pour créer une boîte de message :– showMessageDialog(Composant, Objet)– showMessageDialog(Composant, Objet, Titre, TypeBoite)

Le composant MessageDialog

Module UV JavaPage 55 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

La MessageDialog Retourne – PAS DE VALEUR DE RETOUR

Paramétrage de la MessageDialog :– JOptionPane.ERROR_MESSAGE– JOptionPane.INFORMATION_MESSAGE– JOptionPane.PLAIN_MESSAGE– JOptionPane.QUESTION_MESSAGE– JOptionPane.WARNING_MESSAGE

Le composant MessageDialog

Module UV JavaPage 56 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de MessageDialog

JOptionPane.showMessageDialog(null, ’’Attention … !?’’);

Module UV JavaPage 57 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de MessageDialog

JOptionPane.showMessageDialog(null, ’’Attention … !?’’,

’’ Avertissement ’’,

JOptionPane.WARNING_MESSAGE);

Module UV JavaPage 58 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Pour créer une boîte de dialogue entièrement paramétrable :– showOptionDialog(Composant, Objet,

Titre,

BoutonsOption,

TypeBoite,

IconTypeBoite,

Object[], ObjetDefaut)

Le composant OptionDialog

Module UV JavaPage 59 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

La OptionDialog Retourne – JOptionPane.YES_OPTION, – JOptionPane.NO_OPTION – JOptionPane.CANCEL_OPTION– le numéro du bouton sélectionné

Le composant OptionDialog

Module UV JavaPage 60 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le paramètre BoutonsOption – JOptionPane.YES_NO_CANCEL_OPTION, – JOptionPane.YES_NO_OPTION – 0 pour spécifier des boutons spécifiques

Le composant OptionDialog

Module UV JavaPage 61 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le paramètre TypeBoite spécifie l’icône– JOptionPane.ERROR_MESSAGE– JOptionPane.INFORMATION_MESSAGE– JOptionPane.PLAIN_MESSAGE– JOptionPane.QUESTION_MESSAGE– JOptionPane.WARNING_MESSAGE

Le composant OptionDialog

Module UV JavaPage 62 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de OptionDialog

JButton[] genre = new JButton[3];

genre[0] = new JButton(’’ Homme’’);

genre[1] = new JButton(’’ Femme’’);

JOptionPane.showOptionDialog(null, ’’Genre Humain’’,

’’Sexe’’, // titre

0, // Boutons spécifiques

JOptionPane.INFORMATION_MESSAGE,

null, // pas d ’icône spécifique

genre, // liste des boutons

genre[1]); // le bouton défaut

Module UV JavaPage 63 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de l’AWT

JLabel - comme Label– Simple ligne de texte– supporte également Icon, Border, – Position du text/icon dans 9 zones, vs. 3 alignements

JButton - comme Button– Simple libellé de texte– Supporte Icon, positionnement, ...

Module UV JavaPage 64 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les JLabels

JLabel fancyLabel = new JLabel("Fancy Big Label");

// Instantiate a Font object to use for the label

Font fancyFont = new Font("Serif", Font.BOLD | Font.ITALIC, 32);

// Associate the font with the label

fancyLabel.setFont(fancyFont);

// Create an Icon

Icon tigerIcon = new ImageIcon("SmallTiger.gif");

// Place the Icon in the label

fancyLabel.setIcon(tigerIcon);

// Align the text to the right of the Icon

fancyLabel.setHorizontalAlignment(JLabel.RIGHT);

Module UV JavaPage 65 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les JButton

Icon tigerIcon = new ImageIcon("SmallTiger.gif"); JButton myButton = new

JButton("Tiger", tigerIcon); add(myButton);

Module UV JavaPage 66 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de l’AWT /2

JPanel - comme Panel– Double-buffer (pas comme JCanvas)

JCheckBox - commeCheckbox: case à cocher– choix Oui-Non, ou les états On-Off

JRadioButton :case à cocher (cercle)– groupé avec ButtonGroup, pas CheckboxGroup

JToggleButton - pas d’équivalent AWT– Offre un état “stay pressed”

– A utiliser pour les barres d’outils

– Sous classes directes : JCheckBox, JRadioButton

Module UV JavaPage 67 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les JPanels

Les JPanels permettent d ’afficher toutes sortes d ’éléments graphiques.

Ils disposent d ’une surface d ’affichage Graphics, permettant de dessiner les composants à l ’aide de paintComponent()

Ils fonctionnent souvent de manière autonomes (Threads), pour obtenir un affichage régulier.

Module UV JavaPage 68 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Création d ’un JPanel

Class monPanel extends JPanel

{ // constructeur

monPanel()

{}

// affichage des composants graphiques

public void paintComponent(Graphics g)

{ Graphics2D g2d = (Graphics2D) g;

g.drawString(’’hello’’);

}

}

Module UV JavaPage 69 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Création d ’un JPanel autonome

Class monPanel extends JPanel implements Runnable

{ Tread panel; //thread chargé de l ’affichage du panel

// constructeur

monPanel()

{ panel = new Thread(this); //création du thread

panel.start(); //lancement du thread

}

public void paintComponent(){//…

}

public void run()

{ while(true)

{ repaint(); / demander le ré-affichage

}

}

}

Module UV JavaPage 70 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de JCheckBox

public class CheckboxPanel extends JPanel { Icon unchecked = new ToggleIcon (false); Icon checked = new ToggleIcon (true); public CheckboxPanel() { // Set the layout for the JPanel

setLayout(new GridLayout(2, 1)); // initialized to true JCheckBox cb1 = new JCheckBox("Choose Me", true); cb1.setIcon(unchecked); cb1.setSelectedIcon(checked); // initialized to false JCheckBox cb2 = new JCheckBox( "No Choose Me", false); cb2.setIcon(unchecked); cb2.setSelectedIcon(checked); add(cb1);add(cb2); }

Module UV JavaPage 71 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de JCheckBox

class ToggleIcon implements Icon { boolean state; public ToggleIcon (boolean s) { state = s; } public void paintIcon (Component c, Graphics g, int x, int y) { int width = getIconWidth();

int height = getIconHeight(); g.setColor (Color.black); if (state)

g.fillRect (x, y, width, height); else g.drawRect (x, y, width, height);

} public int getIconWidth() { return 10; } public int getIconHeight() { return 10; } } }

Module UV JavaPage 72 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de l’AWT : JRadioButton

JRadioButton et ButtonGroupJRadioButton radioButton; ButtonGroup rbg = new ButtonGroup(); JLabel label = new JLabel("Annual Salary: "); radioButton = new JRadioButton("$45,000");add(radioButton);rbg.add (radioButton); radioButton.setSelected(true); radioButton = new JRadioButton("$60,000"); add(radioButton);rbg.add (radioButton); radioButton = new JRadioButton("$75,000"); add(radioButton);rbg.add (radioButton);

Module UV JavaPage 73 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de l’AWT : JToggleButton

JToggleButton:JToggleButton feetToggle = new JToggleButton();

feetToggle.setSelected(true);

feetToggle.setText("feetToggleButton.label");

feetToggle.setToolTipText("feetToggleButton.tooltip");

feetToggle.addChangeListener(new ChangeListener() {

public void stateChanged(ChangeEvent event)

{ if (feetToggle.isSelected())

{ // actions

}

}});

Module UV JavaPage 74 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de AWT : JComboBox

JComboBox - Comme Choice– liste modifiable : éditable - setEditable(true)

– Auto-initialiser suivant la taille de la liste• JComboBox jc = new JComboBox (ObjectArray);

– Ajouter un élément : addItem(Objet)

– Récupérer un élément : getItemAt(int indice)

– connaître le nombre d’éléments : getItemCount()

– Récupérer la position d’un élément sélectionné : getSelectedIndex()

– Récupérer le texte de l’élément sélectionné : getSelectedItem()

Module UV JavaPage 75 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

JComboBox

Modèle de données - ComboBoxModel– hérite de ListModel

– get/setSelectedItem

Vue - ListCellRenderer– getListCellRendererComponent()

Module UV JavaPage 76 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de AWT : JList

JList - like List– Auto-initialise à partir d’un tableau ou d’un vecteur

• setListData(Tableau), setListData(Vecteur)

– Défillement non supporté• Doit être mise dans un JScrollPane

JList dataList = new JList(vecteur);

JScrollPane scrollPane = new JScrollPane(dataList);

– Supporte la séléction simple ou multiple

String[] data = {"one", "two", "free", "four"}; JList dataList = new JList(data); dataList.setSelectedIndex(1); dataList.getSelectedValue(); // returns "two"

Module UV JavaPage 77 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de AWT : JList

JList : quelques méthodes pratiques– Retourner l’indice(s) du (des) premier(s) élément(s) sélectionné(s):

getSelectedIndex() ou getSelectedIndices()

– Retourner l’objet(s) du (des) premier(s) élément(s) sélectionné(s): getSelectedValue() ou getSelectedValues()

– spécifier une sélection multiple :• setSelectionMode(int selectionMode)

– ListSelectionModel.SINGLE_SELECTION

– ListSelectionModel.SINGLE_INTERVAL_SELECTION

– ListSelectionModel.MULTIPLE_INTERVAL_SELECTION

Module UV JavaPage 78 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de AWT : JList

final JList list = new JList(dataModel);

MouseListener mouseListener = new MouseAdapter()

{ public void mouseClicked(MouseEvent e)

{ if (e.getClickCount() == 2)

{ int index = list.locationToIndex(e.getPoint()); System.out.println("Double click sur l ’Item " + index);

}

}

};

list.addMouseListener(mouseListener);

Module UV JavaPage 79 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de AWT : JList

DefaultListModel model = new DefaultListModel();

JList statusList = new JList(model);

// modifier la liste des items

model.addElement("test line one");

model.addElement("foo foo foo");

model.addElement("quick brown fox");

Module UV JavaPage 80 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les JList

Plus seulement du texte peut afficher des Icônes peut modifier l’affichage d’une ligne lorsqu’elle est

sélectionnée Modèle de données- ListModel

– defaut: DefaultListModel

– getSize / getElementAt (position)

Vue - ListCellRenderer– getListCellRendererComponent()

Module UV JavaPage 81 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de AWT : JScrollPane

JScrollPane - comme ScrollPane– Défilement de composants

• donnés dans le constructeur

• délégués au Container– Ajouté au viewport par getViewPort().add()

– Peut placer des objets dans l’un des quatre coins internes (entêtes des colonnes ou entêtes de lignes)

• Les Tables utilisent automatiquement la zone d'en-tête colonne

Module UV JavaPage 82 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le ViewPort

Permet de faire scroller

soi-même les barres de

défilement

Module UV JavaPage 83 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de AWT: JScrollPane

Initialiser un JScrollPane– JScrollPane(Composant)– JScrollPane(Composant, barreVerticale, barreHorizontale)– les barres sont des entiers (exemple vertical):

• ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS

• ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED

• ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER

Module UV JavaPage 84 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements de AWT JScrollPane

Exemple de JScrollPane

JPanel panel = new JPanel();

JTextArea lettre = new JTextArea(5,15);

JScrollPane scroll = new JScrollPane(lettre,

ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,

ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER,

);

panel.add(scroll); //afficher la lettre dans le panel

setContentPane(panel); // associer le panel à une Jframe

setLayout(new BorderLayout());

Icon bigTiger = new ImageIcon("BigTiger.gif");

JLabel tigerLabel = new JLabel(bigTiger);

JScrollPane scrollPane = new JScrollPane(tigerLabel);

add(scrollPane, BorderLayout.CENTER);

Module UV JavaPage 85 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

La JTable

Peut créer une JTable à partir d’un tableau[][] et des noms de colonnes[]

Modèle de données - TableDataModel – defaut: DefaultTableModel

– getRowCount, getValueAt, setValueAt, getColumnCount, getColumnName, ...

Vue - JTable– Contient JTableColumns

Module UV JavaPage 86 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les JTable

public class TablePanel extends JPanel { TablePanel()

{ setLayout (new BorderLayout());

// Créer le modèle de donnéesEmployeeDataModel employeeModel = new EmployeeDataModel();

// Créer/initialiser la table JTable table = new JTable (employeeModel);

// Placer la table dans un JScrollPane JScrollPane scrollPane = new JScrollPane (table); // Ajouter à l ’écranadd(scrollPane, BorderLayout.CENTER);

} }

Module UV JavaPage 87 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les JTable

class EmployeeDataModel extends AbstractTableModel { // hériter de AbstractTableModel, au lieu d’implémenter TableModel soi-même,

// AbstractTableModel s ’occupe de la gestion de la liste TableModelListenerString columns[] = {"Employee ID", "First Name", "Last Name", "Department"}; String rows[][] = { {"0181", "Bill", "Cat", "Political Candidate"}, {"0915", "Opus", "Penguin", "Lost and Found"}, {"1912", "Milo", "Bloom", "Reporter"}, {"3182", "Steve", "Dallas", "Legal"}, {"4104", "Hodge", "Podge", "Style"}, {"5476", "Billy", "Boinger", "Entertainment"}, {"6289", "Oliver", "Jones", "Science"}, {"7268", "Cutter", "John", "Travel"} ,

{"8133", "W. A.", "Thornhump", "C.E.O"}, {"9923", "Berke", "Breathed", "Editor"} }

};

Module UV JavaPage 88 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les JTable

private int numColumns = columns.length; private int numRows = rows.length;

public int getColumnCount() { return numColumns; }

public int getRowCount() { return numRows; }

public Object getValueAt (int row, int column) { return rows[row][column]; }

public String getColumnName (int columnIndex) { return columns[columnIndex]; }

Module UV JavaPage 89 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les JTable

public void setValueAt (Object aValue, int row, int column) { String cellValue;

if (aValue instanceof String) cellValue = (String)aValue;

else cellValue = aValue.toString();

rows[row][column] = cellValue; fireTableCellUpdated (row, column);

} public boolean isCellEditable(int row, int column)

{ // first column is read-only return (column != 0); }

}

Module UV JavaPage 90 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Exemple de JTable

Module UV JavaPage 91 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements du texte AWT

JTextComponent est le composant parent de tous les composants textes :– Un modèle séparé connu sous le nom de document, pour gérer le

contenu du document.

– Une vue séparée, en charge de l ’affichage du composant à l ’écran.

– Un controller séparé, connu sous le nom editor kit, qui permet de lire et écrire du texte et qui implémente les capacités d ’édition avec des actions (ActionListener)

Module UV JavaPage 92 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le JTextComponent

Quelques méthodes communes :

– copy() copie la selection courante de texte dans le presse-papier

– cut() coupe la selection courante de texte dans le presse-papier

– paste() colle le contenu du presse-papier dans le document

– getSelectedText() retourne la selection de texte contenu dans le document

Module UV JavaPage 93 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le JTextComponent

– setSelectionStart(int) mettre le point de départ de la selection à la position passé en paramètre

– setSelectionEnd(int) mettre le point de fin de la selection à la position passé en paramètre

– selectAll() sélectionne tout le texte dans le document

– replaceSelection(String) remplace la selection courante par le texte en paramètre

Module UV JavaPage 94 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Le JTextComponent

– getText() retourne le texte contenu dans le composant

– setText(String) mettre du texte dans le document

– setEditable(boolean) indique si le document est éditable

Module UV JavaPage 95 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements du texte AWT

JTextField - comme TextField– Supporte la justification du text– JPasswordField pour les passwords

JTextArea - commeTextArea

Module UV JavaPage 96 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements du texte AWT

JEditorPane - éditeur/viewer portable pour l’HTML/RTF JTextPane - supporte le texte stylisé

– Créer un DefaultStyledDocument pour les données

DefaultStyledDocument doc = new DefaultStyledDocument();

– Créer un JTextPane utilisant le modèle.

JTextPane pane = new JTextPane (doc);

– Placer le JTextPane dans un JScrollPane

JScrollPane scrollPane = new JScrollPane(pane);

Module UV JavaPage 97 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements du texte AWT

JTextPane - attributs du document– static final String NORMAL = "Normal";

– static final String ITALIC = "Italic";

– static final String BIG = "Big";

Module UV JavaPage 98 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements du texte AWT

JTextPane - attributs du document// Stocker l ’ensemble des styles;

paraStyles = new Hashtable();

SimpleAttributeSet attr = new SimpleAttributeSet();

paraStyles.put(NORMAL, attr);

attr = new SimpleAttributeSet();

StyleConstants.setItalic(attr, true);

paraStyles.put(ITALIC, attr);

attr = new SimpleAttributeSet();

StyleConstants.setFontSize(attr, 36);

paraStyles.put(BIG, attr);

Module UV JavaPage 99 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements du texte AWT

JTextPane - attributs du document// effacer le document courantpane.setStyledDocument(doc = new DefaultStyledDocument());// Prendre le style NORMALAttributeSet defaultStyle = (AttributeSet) paraStyles.get(NORMAL);// Prendre le style ITALICAttributeSet italicStyle = (AttributeSet) paraStyles.get(ITALIC);// Prendre le style BIGAttributeSet bigStyle = (AttributeSet) paraStyles.get(BIG);// Insérer du texte dans le documentdoc.insertString(doc.getLength(), "Hello World\n", bigStyle);doc.insertString(doc.getLength(), "What's up Doc?\n", italicStyle);doc.insertString(doc.getLength(), "Boring...\n", defaultStyle);

Module UV JavaPage 100 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements du texte AWT

Module UV JavaPage 101 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Remplacements des ScrollBar

JScrollBar - comme Scrollbar JSlider - Scrollbar pour la sélection de valeurs

– Associer des labels aux cotations

Module UV JavaPage 102 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

JSlider Example

JSlider right, bottom;

right = new JSlider(JSlider.VERTICAL, 1, 9, 3);

Hashtable h = new Hashtable();

h.put (new Integer (1), new JLabel("Mercury"));

h.put (new Integer (2), new JLabel("Venus"));

...

h.put (new Integer (9), new JLabel("Pluto"));

right.setLabelTable (h);

right.setPaintLabels (true);

right.setInverted (true);

bottom = new JSlider(JSlider.HORIZONTAL, 0, 100, 25);

bottom.setMajorTickSpacing (10);

bottom.setPaintLabels (true);

Module UV JavaPage 103 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les barres de Progression

Affiche la progression d’une opération– Peut être utilisé comme une jauge

Initialisation de la barre de progression– JProgressBar()– JProgressBar(valMin, valMax)– JProgressBar(valMin, valMax, orientation)– L’orientation peut être:

• SwingConstants.VERTICAL• SwingConstants.HORIZONTAL

Module UV JavaPage 104 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les barres de Progression

Utilisation:– Initialiser

JProgressBar progressBar = new JProgressBar();progressBar.setMinimum(0);progressBar.setMaximum(nombreOperations);

– LancerprogressBar.setValue(progressBar.getMinimum());for (int i = 0; i < numberSubOperations; i++) { progressBar.setValue(i); executerOperation(i);}

– L’affichage du taux de progression est réalisé par la méthode setStringPainted(true)

Module UV JavaPage 105 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Tool tips

Chaîne de texte dépendant du contexte qui s’affiche lorsque la souris est présente au dessus d’un objet

La classe JToolTip le supporte– rarement utilisé– Utilise la méthode setToolTipText de JComponent

ToolTipManager gère les bulles d’informations

Module UV JavaPage 106 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les barres d’outils

Affiche les composants enligne/colonne

peut être flottante ou accrochée Peut contenir n’importe quel composant

– Mieux si identique, ou similaire– Utiliser les JToggleButton

Possède la méthode addSeparator

Module UV JavaPage 107 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les Panneaux à Onglets

Les panneaux à onglets permettent de gérer et d’accéder à de multiples panels d’affichage

Les onglets sont ajoutés en utilisant – addTab(TexteOnglet, Icone, Composant)– addTab(TexteOnglet, Composant)

Module UV JavaPage 108 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les Panneaux à Onglets

public class TabbedPanel extends JPanel { String tabs[] = {"One", "Two", "Three", "Four"}; public JTabbedPane tabbedPane = new JTabbedPane(); public TabbedPanel() { setLayout (new BorderLayout()); for (int i=0;i<tabs.length;i++) tabbedPane.addTab (tabs[i], null, createPane (tabs[i])); tabbedPane.setSelectedIndex(0); add (tabbedPane, BorderLayout.CENTER); } JPanel createPane(String s) { JPanel p = new JPanel(); p.add(new JLabel(s)); return p; }}

Module UV JavaPage 109 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Quelques événements Swing

Module Java

Module UV JavaPage 110 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Swing Events

Module UV JavaPage 111 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les Evénements

Les classes Listener pour le support de chaque type d’événements

Chaque événement possède une source Swing (composant)

Héritent des événements des Composants / Container 1.1

Module UV JavaPage 112 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les événements Actions

L’interface Action hérite de ActionListener– lorsque des contrôles multiples sont nécessaires– classe AbstractAction implémente Action

• gère la liste des contrôles et des actions

– Ajouts d’Actions supportés par les JMenu, JPopupMenu, et les JToolBar

Module UV JavaPage 113 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les Actions

Il est possible d’ajouter une Action une barre d’outil La barre d’outils crée un bouton et demande l’Action

que l’icône invoque Facilite la séparation entre le comportement et l’UI

– faciliter de programmation de l’interface

Module UV JavaPage 114 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Implémentation des Actions

Définition d’une Actionclass CutAction extends AbstractAction { public CutAction () { super (“Cut”, new ImageIcon(“Scissors.gif”); } public void actionPerformed (ActionEvent e) { System.out.println ("Selected: " + getValue (Action.NAME)); }}

Insérer à différents endroits (Action a = new MyAction(...);)

– aJMenu.add (a) / aJToolBar.add (a) / …

Module UV JavaPage 115 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les Actions Text

TextAction hérite de AbstractAction demande au composant texte comment gérer une

opération– Action actions[] = aJTextComp.getActions();

Trouve l’Action pour exécuter une opération– recherche à travers un tableau

Associer une Action à un composant– addActionListener(...)

Module UV JavaPage 116 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

Les Actions Text

Récupérer la liste des ActionsHashtable commands = new Hashtable();

Action[] actions = jt.getActions();

for (int i = 0; i < actions.length; i++) {

Action a = actions[i];

commands.put(a.getValue(Action.NAME), a);

}

Trouver une action / un composantJButton cut = new JButton("Cut");

Action cutIt = (Action)commands.get (DefaultEditorKit.cutAction);

cut.addActionListener (cutIt);

Module UV JavaPage 117 / 117

Deruelle LaurentCopyright © 2002 Laurent Deruelle

L’appui de touches

KeyStroke représente une touche clavierKeyStroke stroke = KeyStroke.getKeyStroke (KeyEvent.VK_J, ActionEvent.ALT_MASK, true); //

ALT-J

Associé à un JComponentjb.registerKeyboardAction (new MyActionListener(), stroke, JComponent.WHEN_FOCUSED);

Lorsque l’appui de la touche survient, l’action est déclenchée– Conditions: WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW,

WHEN_ANCESTOR_OF_FOCUSED_COMPONENT