CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV JFC/Swing Module Java Expert
Module UV Java Page 2 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Module Java n Vue densemble du langage Java n Le langage Java : syntaxe et sémantique n Programmation multi-tâche : les threads n Accéder aux bases de données n Composants réutilisables : le modèle JFC/Swing (MVC) n Développement Client/Serveur n Présentation dun IDE : WSAD / Forté / JBuilder n Les serveurs dapplications J2EE n Les Enterprise JavaBeans n Ré-ingénierie dapplications Java
Module UV Java Page 3 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Introduction aux JFC/Swing Module Java
Module UV Java Page 4 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Plan n Introduction n Packages n Composants n Les Evénements n Utilisation avancée des Composants
Module UV Java Page 5 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Quest ce que les JFC? n JFC Java Foundation Classes n 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 Java Page 6 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Quest-ce que Swing? n Abstract Window Toolkit (AWT) V2 n 100% Pure Java –Nécessite le JDK ou supérieur n Fait parti des JFC –Composants –Nouveaux composants de haut niveau –Look & Feel modulable
Module UV Java Page 7 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Philosophie de lAWT n Le plus petit dénominateur Commun –Si non disponible en natif sur lune des plate-formes Java, alors non disponible sur toutes les plate-formes Java n Ensemble de Composant Simple n Composants basés Peer –La Plate-forme contrôle lapparence des composants –Inconsistances dans les implémentations Interfaçage avec la plate-forme native => erreur
Module UV Java Page 8 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Ce qui était Mauvais n AWT pas assez efficace n Chacun crée de nouveaux Composants –IFC Netscape –AFC, WFC Microsoft,... n Temps de chargement de lApplet trop long –Les éditeurs voulaient leur ensemble de composants, incorporés dans les browsers
Module UV Java Page 9 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Philosophie Swing n Ensemble plus Riche de Composants –Remplace lAWT –Ajoute des composants plus complexes n Composants Swing sont basés sur Java –Si des problèmes, les même problèmes partout n 100% Pure Java –Java nécessaire –Uniquement le modèle d'événements de Java 1.1
Module UV Java Page 10 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les Particularités de Swing n Inclut avec les API Java 2 (JDK 1.2) n 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 Java Page 11 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Deux Vues des Swing n Alternative aux composants AWT Java 1.1 –modèle dévénements 1.0 NON supporté –Quelques nouveaux composants. n Interface Model/View/Controller –Séparer les données des vues écrans et des interactions –Plus de travail nécessaire
Module UV Java Page 12 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Lensemble des composants Swing n Exemple de programme basé sur les Swing
Module UV Java Page 13 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle De lAWT aux SWING n Pour la plupart des composants, ajouter J avant le nom –Button JButton, Applet JApplet, … n Modèle d'événements Java 1.1 n Les containers Swing intègrent le double-buffer –Evite le scintillement des composants Swing
Module UV Java Page 14 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Swing : le remplacement de lAWT Module Java
Module UV Java Page 15 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Le Look and Feel n Personnaliser l aspect des composants graphiques : –indépendant des plate-formes : style Metal –dépendant du système :windows,...
Module UV Java Page 16 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Le Look and Feel
Module UV Java Page 17 / 117 Deruelle Laurent Copyright © 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 Java Page 18 / 117 Deruelle Laurent Copyright © 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 Java Page 19 / 117 Deruelle Laurent Copyright © 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 Java Page 20 / 117 Deruelle Laurent Copyright © 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 Java Page 21 / 117 Deruelle Laurent Copyright © 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 Java Page 22 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Amélioration des JButton n Support des composants Image –Actuellement supporte les Icon –MediaTracker non nécessaires –Serializable n Séparer les Icons des différents états –Normal / Disabled / Disabled-Selected / Pressed / Rollover / Selected n Texte daide : ToolTip n Raccourcis clavier
Module UV Java Page 23 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Vue des composants Swing Module Java
Module UV Java Page 24 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Vue des paquetages Swing n La collection Swing est constitué de 17 paquetages n 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 Java Page 25 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Vue des paquetages Swing n 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. n javax.swing.colorchooser –Le paquetage colorchooser contient les classes pour choisir la couleur du composant.
Module UV Java Page 26 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Vue des paquetages Swing n 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. n javax.swing.filechooser –le paquetage filechooser contient les classes pour la sélection de fichiers.
Module UV Java Page 27 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Vue des paquetages Swing n 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 Java Page 28 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Vue des paquetages Swing n javax.swing.text –Le paquetage text contient les classes pour le framework des documents Swing. n 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 Java Page 29 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Vue des paquetages Swing n javax.swing.text.rtf –Le paquetage text.rtf définit les classes pour le rendu de documents basic Rich Text Format (RTF). n javax.swing.tree –Le paquetage tree contient les interfaces et les classes qui supportent l affichage sous forme d arbres (explorateur Window).
Module UV Java Page 30 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Vue des paquetages Swing n javax.swing.undo –Le paquetage undo permet le support des classes pour implémenter les capacités du undo/redo dans une GUI. n 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 Java Page 31 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Hiérarchie Swing
Module UV Java Page 32 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Hiérarchie Swing
Module UV Java Page 33 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les Icônes n Une image de taille fixe n Peuvent être utilisées avec la plupart des composants (e.g. JButton) n Icon est une interface que nimporte quelle classe peut implémenter n Icon utilisé à la place de Image car Image est chargé de manière asynchrone et non sérialisable
Module UV Java Page 34 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Exemple de création d Icône ImageIcon image1 = new ImageIcon(bouton1.gif); ImageIcon image2 = new ImageIcon(bouton2.gif);
Module UV Java Page 35 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Utilisation des composants Swing Module Java
Module UV Java Page 36 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Composants de haut niveau n Toutes les sous-classes de Window, non de JComponent n Non portables, ils ont des composants peer n Composants ajoutés au panel de contenu –interface RootPaneContainer - délégué au container
Module UV Java Page 37 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Utilisation du RootPaneContainer n Ne pas ajouter de composants directement dans les containers de haut niveau : –aFrame.add (new Button (Help)); n Ajouter au panel de contenu:content pane –aJFrame.getContentPane().add (…); –possède un Layout manager - par défaut: BorderLayout n JDialog, JFrame, JWindow, JApplet, JInternalFrame
Module UV Java Page 38 / 117 Deruelle Laurent Copyright © 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 Java Page 39 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Comportement de fermeture dune JFrame n Lorsque lutilisateur sélectionne loption de fermeture de la fenêtre Jframe => comportement par défaut –Frame ne fait rien –JFrame est caché (mais non détruite) n setDefaultCloseOperation (opération) –JFrame.DO_NOTHING_ON_CLOSE –JFrame.HIDE_ON_CLOSE –JFrame.DISPOSE_ON_CLOSE –JFrame.EXIT_ON_CLOSE
Module UV Java Page 40 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle JApplet n Lutilisation de composants Swing dans une applet nécessite dutiliser 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 Java Page 41 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle JOptionPane n Boîtes de dialogues standard –Yes, No, Cancel - ou paramétrables –Message davertissement, une question –Saisies utilisateurs –Les boîtes de dialogues bloquent le thread courant –String response = JOptionPane.showInputDialog(this, "Enter input:");
Module UV Java Page 42 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle 4 types de JOptionPane n ConfirmDialog –pose une question, avec des boutons réponses : Yes, No et Cancel n InputDialog –Invite à saisir du texte n MessageDialog –affiche un message n OptionDialog –inclut les 3 autres types de boîtes
Module UV Java Page 43 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Exemples de JOptionPane
Module UV Java Page 44 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n 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 Java Page 45 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n 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 Java Page 46 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n La ConfirmDialog Retourne –JOptionPane.YES_OPTION, –JOptionPane.NO_OPTION –JOptionPane.CANCEL_OPTION Le composant ConfirmDialog
Module UV Java Page 47 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n Le paramètre TypeBoite spécifie licône –JOptionPane.ERROR_MESSAGE –JOptionPane.INFORMATION_MESSAGE –JOptionPane.PLAIN_MESSAGE –JOptionPane.QUESTION_MESSAGE –JOptionPane.WARNING_MESSAGE Le composant ConfirmDialog
Module UV Java Page 48 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Exemple de ConfirmDialog int reponse; reponse = JOptionPane.showConfirmDialog(null, Voulez-vous… ?);
Module UV Java Page 49 / 117 Deruelle Laurent Copyright © 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 Java Page 50 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n 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 Java Page 51 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n La InputDialog Retourne –String n 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 Java Page 52 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Exemple de InputDialog String reponse; reponse = JOptionPane.showInputDialog(null, Saisir … ?);
Module UV Java Page 53 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Exemple de InputDialog String reponse; reponse = JOptionPane.showInputDialog(null, Saisir … ?, Boite Saisie, JOptionPane.QUESTION_MESSAGE);
Module UV Java Page 54 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n Pour créer une boîte de message : –showMessageDialog(Composant, Objet) –showMessageDialog(Composant, Objet, Titre, TypeBoite) Le composant MessageDialog
Module UV Java Page 55 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n La MessageDialog Retourne –PAS DE VALEUR DE RETOUR n 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 Java Page 56 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Exemple de MessageDialog JOptionPane.showMessageDialog(null, Attention … !?);
Module UV Java Page 57 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Exemple de MessageDialog JOptionPane.showMessageDialog(null, Attention … !?, Avertissement, JOptionPane.WARNING_MESSAGE);
Module UV Java Page 58 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n 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 Java Page 59 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n La OptionDialog Retourne –JOptionPane.YES_OPTION, –JOptionPane.NO_OPTION –JOptionPane.CANCEL_OPTION –le numéro du bouton sélectionné Le composant OptionDialog
Module UV Java Page 60 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n 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 Java Page 61 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle n Le paramètre TypeBoite spécifie licône –JOptionPane.ERROR_MESSAGE –JOptionPane.INFORMATION_MESSAGE –JOptionPane.PLAIN_MESSAGE –JOptionPane.QUESTION_MESSAGE –JOptionPane.WARNING_MESSAGE Le composant OptionDialog
Module UV Java Page 62 / 117 Deruelle Laurent Copyright © 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 Java Page 63 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements de lAWT n JLabel - comme Label –Simple ligne de texte –supporte également Icon, Border, –Position du text/icon dans 9 zones, vs. 3 alignements n JButton - comme Button –Simple libellé de texte –Supporte Icon, positionnement,...
Module UV Java Page 64 / 117 Deruelle Laurent Copyright © 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 Java Page 65 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les JButton Icon tigerIcon = new ImageIcon("SmallTiger.gif"); JButton myButton = new JButton("Tiger", tigerIcon); add(myButton);
Module UV Java Page 66 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements de lAWT /2 n JPanel - comme Panel –Double-buffer (pas comme JCanvas) n JCheckBox - commeCheckbox: case à cocher –choix Oui-Non, ou les états On-Off n JRadioButton :case à cocher (cercle) –groupé avec ButtonGroup, pas CheckboxGroup n JToggleButton - pas déquivalent AWT –Offre un état stay pressed –A utiliser pour les barres doutils –Sous classes directes : JCheckBox, JRadioButton
Module UV Java Page 67 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les JPanels n Les JPanels permettent d afficher toutes sortes d éléments graphiques. n Ils disposent d une surface d affichage Graphics, permettant de dessiner les composants à l aide de paintComponent() n Ils fonctionnent souvent de manière autonomes (Threads), pour obtenir un affichage régulier.
Module UV Java Page 68 / 117 Deruelle Laurent Copyright © 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 Java Page 69 / 117 Deruelle Laurent Copyright © 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 Java Page 70 / 117 Deruelle Laurent Copyright © 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 Java Page 71 / 117 Deruelle Laurent Copyright © 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 Java Page 72 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements de lAWT : JRadioButton n JRadioButton et ButtonGroup JRadioButton 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 Java Page 73 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements de lAWT : JToggleButton n 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 Java Page 74 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements de AWT : JComboBox n 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 dun élément sélectionné : getSelectedIndex() –Récupérer le texte de lélément sélectionné : getSelectedItem()
Module UV Java Page 75 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle JComboBox n Modèle de données - ComboBoxModel –hérite de ListModel –get/setSelectedItem n Vue - ListCellRenderer –getListCellRendererComponent()
Module UV Java Page 76 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements de AWT : JList n JList - like List –Auto-initialise à partir dun tableau ou dun 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 Java Page 77 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements de AWT : JList n JList : quelques méthodes pratiques –Retourner lindice(s) du (des) premier(s) élément(s) sélectionné(s): getSelectedIndex() ou getSelectedIndices() –Retourner lobjet(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 Java Page 78 / 117 Deruelle Laurent Copyright © 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 Java Page 79 / 117 Deruelle Laurent Copyright © 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 Java Page 80 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les JList n Plus seulement du texte n peut afficher des Icônes n peut modifier laffichage dune ligne lorsquelle est sélectionnée n Modèle de données- ListModel –defaut: DefaultListModel –getSize / getElementAt (position) n Vue - ListCellRenderer –getListCellRendererComponent()
Module UV Java Page 81 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements de AWT : JScrollPane n 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 lun 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 Java Page 82 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Le ViewPort n Permet de faire scroller soi-même les barres de défilement
Module UV Java Page 83 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements de AWT: JScrollPane n 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 Java Page 84 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements de AWT JScrollPane n 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 Java Page 85 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle La JTable n Peut créer une JTable à partir dun tableau[][] et des noms de colonnes[] n Modèle de données - TableDataModel –defaut: DefaultTableModel –getRowCount, getValueAt, setValueAt, getColumnCount, getColumnName,... n Vue - JTable –Contient JTableColumns
Module UV Java Page 86 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les JTable public class TablePanel extends JPanel { TablePanel() { setLayout (new BorderLayout()); // Créer le modèle de données EmployeeDataModel 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 écran add(scrollPane, BorderLayout.CENTER); }
Module UV Java Page 87 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les JTable class EmployeeDataModel extends AbstractTableModel { // hériter de AbstractTableModel, au lieu dimplémenter TableModel soi-même, // AbstractTableModel s occupe de la gestion de la liste TableModelListener String 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 Java Page 88 / 117 Deruelle Laurent Copyright © 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 Java Page 89 / 117 Deruelle Laurent Copyright © 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 Java Page 90 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Exemple de JTable
Module UV Java Page 91 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements du texte AWT n 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) actions (ActionListener)
Module UV Java Page 92 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Le JTextComponent n 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 Java Page 93 / 117 Deruelle Laurent Copyright © 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 Java Page 94 / 117 Deruelle Laurent Copyright © 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 Java Page 95 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements du texte AWT n JTextField - comme TextField –Supporte la justification du text –JPasswordField pour les passwords n JTextArea - commeTextArea
Module UV Java Page 96 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements du texte AWT n JEditorPane - éditeur/viewer portable pour lHTML/RTF n 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 Java Page 97 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements du texte AWT n JTextPane - attributs du document –static final String NORMAL = "Normal"; –static final String ITALIC = "Italic"; –static final String BIG = "Big";
Module UV Java Page 98 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements du texte AWT n 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 Java Page 99 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements du texte AWT n JTextPane - attributs du document // effacer le document courant pane.setStyledDocument(doc = new DefaultStyledDocument()); // Prendre le style NORMAL AttributeSet defaultStyle = (AttributeSet) paraStyles.get(NORMAL); // Prendre le style ITALIC AttributeSet italicStyle = (AttributeSet) paraStyles.get(ITALIC); // Prendre le style BIG AttributeSet bigStyle = (AttributeSet) paraStyles.get(BIG); // Insérer du texte dans le document doc.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 Java Page 100 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements du texte AWT
Module UV Java Page 101 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Remplacements des ScrollBar n JScrollBar - comme Scrollbar n JSlider - Scrollbar pour la sélection de valeurs –Associer des labels aux cotations
Module UV Java Page 102 / 117 Deruelle Laurent Copyright © 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 Java Page 103 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les barres de Progression n Affiche la progression dune opération –Peut être utilisé comme une jauge n Initialisation de la barre de progression –JProgressBar() –JProgressBar(valMin, valMax) –JProgressBar(valMin, valMax, orientation) –Lorientation peut être: SwingConstants.VERTICAL SwingConstants.HORIZONTAL
Module UV Java Page 104 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les barres de Progression n Utilisation: –Initialiser JProgressBar progressBar = new JProgressBar(); progressBar.setMinimum(0); progressBar.setMaximum(nombreOperations); –Lancer progressBar.setValue(progressBar.getMinimum()); for (int i = 0; i < numberSubOperations; i++) { progressBar.setValue(i); executerOperation(i); } –Laffichage du taux de progression est réalisé par la méthode setStringPainted(true)
Module UV Java Page 105 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Tool tips n Chaîne de texte dépendant du contexte qui saffiche lorsque la souris est présente au dessus dun objet n La classe JToolTip le supporte –rarement utilisé –Utilise la méthode setToolTipText de JComponent n ToolTipManager gère les bulles dinformations
Module UV Java Page 106 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les barres doutils n Affiche les composants en ligne/colonne n peut être flottante ou accrochée n Peut contenir nimporte quel composant –Mieux si identique, ou similaire –Utiliser les JToggleButton n Possède la méthode addSeparator
Module UV Java Page 107 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les Panneaux à Onglets n Les panneaux à onglets permettent de gérer et daccéder à de multiples panels daffichage n Les onglets sont ajoutés en utilisant –addTab(TexteOnglet, Icone, Composant) –addTab(TexteOnglet, Composant)
Module UV Java Page 108 / 117 Deruelle Laurent Copyright © 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 Java Page 109 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Quelques événements Swing Module Java
Module UV Java Page 110 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Swing Events
Module UV Java Page 111 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les Evénements n Les classes Listener pour le support de chaque type dévénements n Chaque événement possède une source Swing (composant) n Héritent des événements des Composants / Container 1.1
Module UV Java Page 112 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les événements Actions n Linterface 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 dActions supportés par les JMenu, JPopupMenu, et les JToolBar
Module UV Java Page 113 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les Actions n Il est possible dajouter une Action une barre doutil n La barre doutils crée un bouton et demande lAction que licône invoque n Facilite la séparation entre le comportement et lUI –faciliter de programmation de linterface
Module UV Java Page 114 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Implémentation des Actions n Définition dune Action class CutAction extends AbstractAction { public CutAction () { super (Cut, new ImageIcon(Scissors.gif); } public void actionPerformed (ActionEvent e) { System.out.println ("Selected: " + getValue (Action.NAME)); } n Insérer à différents endroits (Action a = new MyAction(...);) –aJMenu.add (a) / aJToolBar.add (a) / …
Module UV Java Page 115 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les Actions Text n TextAction hérite de AbstractAction n demande au composant texte comment gérer une opération –Action actions[] = aJTextComp.getActions(); n Trouve lAction pour exécuter une opération –recherche à travers un tableau n Associer une Action à un composant –addActionListener(...)
Module UV Java Page 116 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Les Actions Text n Récupérer la liste des Actions Hashtable 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); } n Trouver une action / un composant JButton cut = new JButton("Cut"); Action cutIt = (Action)commands.get (DefaultEditorKit.cutAction); cut.addActionListener (cutIt);
Module UV Java Page 117 / 117 Deruelle Laurent Copyright © 2002 Laurent Deruelle Lappui de touches n KeyStroke représente une touche clavier KeyStroke stroke = KeyStroke.getKeyStroke (KeyEvent.VK_J, ActionEvent.ALT_MASK, true); // ALT-J n Associé à un JComponent jb.registerKeyboardAction (new MyActionListener(), stroke, JComponent.WHEN_FOCUSED); n Lorsque lappui de la touche survient, laction est déclenchée –Conditions: WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT