Cours 2 Contenu du cours : " " " " " " " " " " OO avancé Introduction aux GUI un peu d’histoire : AWT et swing swing Les événements Les composants textuels Les boutons Les gestionnaires de disposition Les panneaux Les fenêtres Données et méthodes statiques Données et méthodes statiques Les méthodes et données statiques appartiennent aux classes et sont utilisables sans créer d'objets de cette classe. Il n’existe qu’une copie d’une variable statique, partagée par tous les objets d’une classe. Vie et mort des objets (1) A l'intérieur d'une méthode statique, on ne peut utiliser que les variables/méthodes statiques. Mais l'inverse n'est pas vrai. Vie et mort des objets (2) Un objet est marqué « à détruire » lorsqu’il n’existe plus de référence sur lui. La méthode finalize est exécutée lors de la destruction d’un objet. La méthode System.gc suggère l’utilisation du ramasse-miette. Vie et mort des objets (3) Surcharge de méthodes (1) Pour surcharger une méthode, il suffit d’écrire plusieurs versions de la méthode. Chaque version a le même nom, mais une liste de paramètres différents. (en anglais, on parle d’overloading) Surcharge de méthodes (2) Premier appel Dans la version de la méthode pour les entiers ! Second appel Dans la version de la méthode pour les chaîne ! POO La programmation orientée objet permet: √d'augmenter la réutilisabilité du logiciel héritage √la définition de fonctionnalités génériques polymorphisme √l'abstraction penser en terme de classes, d'objets L'héritage Java UML MaSuperClass e On dit que : :la classe MaClasse hérite de la classe MaSuperClasse :la classe MaClasse dérive de la classe MaSuperClasse :la classe MaClasse est une sous-classe de MaSuperClasse :( :la classe MaClasse est une classe fille de MaSuperClasse :la classe MaSuperClasse est la super classe de MaClasse :( :la classe MaSuperClasse est la classe mère de MaClasse :la classe MaSuperClasse est la classe parent de MaClasse MaClasse La dérivation est une spécialisation. Il n'y a pas d'héritage multiple, une classe ne peut avoir qu'une seule et unique classe super classe. On parle de super classe directe et indirecte. L'héritage Animaux Vertébrés Animaux Chiens Vertébrés Chiens Une classe représente un ensemble . Une classe fille représente un sous ensemble de l'ensemble représenté par sa classe mère. L'héritage L'héritage La classe fille hérite des fonctionalités de sa classe mère. Elle hérite de ses données membres et de ses méthodes. L'héritage Une classe fille n'a pas accés à toutes les variables ou à toutes les méthodes de sa classe mère. Elle a accès aux propriétés déclarées: :public :protected :package (si elles sont dans le même package) Elle n'a pas accès aux propriétés déclarées : /private L'héritage définit un nouveau mode de masquage de données, et il respecte la philosophie du masquage des données privées. Les membres hérités conservent le même niveau de visibilité. Accessibilité des données Modificateur d'accès Accessible à la classe Accessible à une classe du même package Accessible à une classe fille Accessible à tous public Oui Oui Oui Oui protected Oui Oui Oui Non package Oui Oui Non Non private Oui Non Non Non Hiérarchie Objets Animaux Vertébrés Chiens La hiérarchie est l'ensemble des liens d'héritage. java.lang.Object est la classe mère par défaut. En java, toutes les classes dérivent de la classe java.lang.Object. GUI (1) GUI (1) Comment faire « scroller » le contenu d’un JOptionPane ? GUI (2) GUI (3) Les événements en java .... GUI (4) événement composant Composants de base et événements GUI (5) Les événements en java .... GUI (6) événement composant Composants de base et événements GUI GUI signifie Interface Utilisateur Graphique. Une GUI est basée sur des composants réutilisables. Swing La hiérarchie de swing est basée sur l'AWT afin de profiter des mécanismes définis dans l'AWT par héritage.Les packages de swing se trouvent dans javax.swing.... Composants de Swing L'API swing propose un grand nombre de composants réutilisables. Chaque famille de composants est décrite dans une classe de Swing. Composants de Swing La classe javax.swing.JLabel Méthodes public void setVisible(boolean b) "public void setEnabled( boolean b ) "public void setSize(int w,int h) " public void setToolTipText(String s) "public void setBorder(Border b) " public void setText(String s) "public void setHorizontalTextPosition(int i) " Tous les composants sont personnalisables. Les classes de swing proposent des mécanismes généraux de manipulation des composants (par l'héritage). Composants de Swing Un composant est un objet java comme les autres. Il doit être instancié avec un constructeur,possède des méthodes .... Composants de Swing La classe javax.swing.JFrame Méthodes public Container getContentPane() "public void setSize(int w,int h); "public void show(); " Une JFrame est un objet complexe. Il délègue son rôle de « Container » à son ContentPane. SwingConstants L'interface javax.swing.SwingConstants L'interface SwingConstants définit des constantes qui sont utilisées pour les dispositions dans Swing. Les événements ? Les événements sont un mécanisme qui permet au programmes java de réagir aux actions de l'utilisateur sur le GUI. Les événements : écoute L'écoute d'un événement se fait toujours selon le même schéma. Les événements : écoute Les 3 phases de l'écoute d'un événement : Création d'une classe d'écoute (un listener) " Implantation de la méthode qui nous intéresse dans la classe d'écouteur. " Enregistrement d'une instance de la classe écouteur auprès de la source de l'événement. " L'écoute d'un événement se fait toujours selon le même schéma. Les événements : source Le composant JButton possède une donnée membre listenerList de type EventListenerList héritée de Component. handle r L'écouteur handler de type Handler contient la méthode public void actionPerformed(ActionEvent evt) car la classe Handler implémente ActionListener. listenerList ... Le Handler est l'écouteur d'événement, le JButton est la source de l'événement. Les événements : source Grâce à la méthode public void addActionListener( ActionListener l) la source s'assure que l'écouteur l possède la méthode public void actionPerformed(ActionEvent evt) avant de le mettre dans sa listenerList. " Pour déclencher son événement, la source n'a plus qu'à parcourir tous les listeners de sa listenerList et appeler leur méthode public void actionPerformed(ActionEvent evt) où evt est un objet décrivant les spécificités de l'événement.(source, genre,etc..) " Chaque source d'événement possède des méthodes add<event>Listener et remove<event>Listener où <event> représente le type d'évévenement qu'elle est capable de générer. " Les événements sont étroitement liés au modèle d'héritage de java. Les événements : hiérarchie Les événements sont eux aussi soumis à une hiérarchie. Les événements : hiérarchie Les interfaces d'écoute des événements sont, elles aussi, hiérarchisées. Les écouteurs : utilisation. MouseListener : écoute les cliks de souris, les pressions et les relâchements de boutons. " MouseMotionListener : écoute les déplacements de la souris et les drag. AdjustementListener : écoute les événements liés à des ajustements (ex : scrollbar) " " KeyListener : écoute les événements de frappe de touches. " ItemListener : écoute les événements de sélection d'item dans une liste de choix. " ActionListener : écoute les événements d'action. Les événements d'action sont les événements « attendus par défaut » (ex click pour les butons, enter pour les textfields....) " FocusListener : " écoute les événements de focus (perte/gain) " WindowListener : écoute les événements des fenêtres (agrandissement, iconification...) " Component/ContainerListener : écoute les événementsd'ajout, de redimensionnement de composants " Les interfaces sont spécifiques à un type d'événement donné. Mais rien interdit d'implémenter plusieurs interfaces dans vos Handler. Les écouteurs : exemple. Les écouteurs : utilisation. Les écouteurs : utilisation. Un handler implémentant une interface doit donner une implémentation de TOUTES les méthodes de l'interface. Handler implémente, ici, 2 interfaces. Les composants textuels javax.swing.text.JTextCompon ent javax.swing.JTextField javax.swing.JTextAera javax.swing.JPasswordFi eld La classe abstraite javax.swing.text.JTextComponent propose des méthodes générales pour la gestion du undo, cut/copy/paste, polices... Les composants textuels Les composants textuels Les JtextComponents envoie des actionEvent lorsque l'on appuie sur Entrée. On utilise getText ou getPassword pour récupérer le contenu des champs. Les boutons javax.swing.JComponent javax.swing.AbstractButto n javax.swing.JButton javax.swing.JToggleButton javax.swing.JCheckB javax.swing.JRadioButto n ox Il existe une hiérarchie dans les boutons, de manière à regrouper tout le code commun dans la classe AbstractButton et augmenter l'abstraction. Les boutons Les boutons Les gestionnaires de disposition Les LayoutManagers sont des objets permettant de gérer la disposition des composants déposés dans un container, ils gérent aussi le redimmensionnement. Les gestionnaires de disposition Les gestionnaires de disposition Le borderLayout utilise des constantes pour placer les composants. Par défaut, le composant est ajouté au centre. Les panneaux Les Jpanels sont utilisés comme des conteneurs swing , ils permettent de découper le conteneur qui les contient en zones... Les panneaux Les fenêtres Les fenêtres génèrent des événements pour leur fermeture, ouverture, iconisation, etc,...