Module M4207 applications informatiques Rushed Kanawati LIPN, CNRS UMR 7030 Université Paris 13 http://lipn.fr/∼kanawati [email protected] January 28, 2016 R. Kanawati (LIPN) Programmation graphique January 28, 2016 1 / 18 Plan 1 Introduction R. Kanawati (LIPN) Programmation graphique January 28, 2016 2 / 18 Organisation du module Organisation : 4 × 1.5 h cours, 8 × 3h TP. Evaluation : Sur projet (en binômes) : Démonstration + Rapport + Soutenance. Contenu : 1 2 3 Initiation au développement d’interfaces graphiques en Java. Prise en main du paquetage SNMP4j (SNMP tools) Développement d’une simple application graphique d’interaction avec un agent SNMP. R. Kanawati (LIPN) Programmation graphique January 28, 2016 3 / 18 Introduction Objectifs Initiation à la programmation d’applications graphiques en Java Programmation par événements Programmation concurrente (threads) R. Kanawati (LIPN) Programmation graphique January 28, 2016 4 / 18 Introduction Interface graphique : WIMP Interface graphique moderne : WIMP WIMP = Window, Icon, Menu, Pointer Une interface graphique : un ensemble de widgets dotées de comportement et de rendu graphique. Concevoir une interface = dessiner une interface + spécifier les réactions aux interactions utilisateurs. R. Kanawati (LIPN) Programmation graphique January 28, 2016 5 / 18 Introduction Etapes de réalisation d’une interface graphique 1 Recenser les éléments actifs à utiliser (boutons, labels, menus, etc.) 2 Dessiner l’interface : en utilisants des éléments de structure et des objets d’agencement. 3 Relier les éléments actifs et d’affichage aux objets de traitement. R. Kanawati (LIPN) Programmation graphique January 28, 2016 6 / 18 Introduction Widgets graphiques en Java Deux types : awt : Abstract Window Toolkit : un ensemble de composants graphiques natifs (utilisant les ressources graphiques du système hôte). swing : un ensemble de composants graphiques 100% Java : le rendu graphique ne dépende plus du système hôte. R. Kanawati (LIPN) Programmation graphique January 28, 2016 7 / 18 Introduction Widgets Swing Deux types de widgets : Les containers : widgets utilisés pour structurer l’interface. Widgets actifs : boutons, listes, menus, etc. R. Kanawati (LIPN) Programmation graphique January 28, 2016 8 / 18 Introduction Les containers : La classe JFrame Implante une fenêtre avec un barre de titre + un panneau interne pour y agencer d’autres widgets. Création : JFrame f = new JFrame(”titre”); Quelques méthodes : public void setContentPane(Container contentPane) : fixer le panneau de fond de la fenêtre. public JPanel getContentPane() : retourner le panneau de fond. public Component add(Componenent c) : ajouter un composant public Component remove(Componenent c) : retirer un composant public void setVisible(boolean b) : contrôler la visibilité de la fenêtre. R. Kanawati (LIPN) Programmation graphique January 28, 2016 9 / 18 Introduction Les containers : La classe JPanel Un panneau de regroupement d’autres widgets (actifs ou de structuration) Création : JPanel p = new JPanel() Quelques méthodes : public Component add(Componenent c) : ajouter un composant public Component remove(Componenent c) : retirer un composant Agencement des widgets à l’intérieur en utilisant : LayoutManager. Utilisation : public void setLayout(layoutManager) R. Kanawati (LIPN) Programmation graphique January 28, 2016 10 / 18 Introduction Layout Managers BorderLayout (): Divise le container en 5 zones (Centre, Nord, Sud, Est et Ouest) FlowLayout (): Positionnement en flux selon la place disponible. GridLayout (): Positionnement des composants dans une grille (avec tailles des cases égales) R. Kanawati (LIPN) Programmation graphique January 28, 2016 11 / 18 Introduction Exemple : BorderLayout Division du panneau en 5 zones : CENTER, NORTH, SOUTH, EAST, WEST Permet de placer un composant par zone. Dimensionnement des widgets par rapport à leurs preferredSizes et redimensionnement proportionnel: NORTH et SOUTH étirés horizontalement EAST et WEST étirés verticalement CENTER étiré pur remplir le reste de l’espace Utilisation : f.setLayout(new BorderLayout()); f.add(b, BorderLayout.NORTH) R. Kanawati (LIPN) Programmation graphique January 28, 2016 12 / 18 Introduction BorderLayout : exemple import java . awt .*; import javax . swing .*; public class A p p l i c a t i o n B o r d e r L a y o u t { public static void main ( String [] args ) { JFrame mainFrame = new JFrame ( " Exemple de BorderLayout " ); mainFrame . setLayout ( new BorderLayout ()); mainFrame . add ( new JButton ( " North " ) , BorderLayout . NORTH ); mainFrame . add ( new JButton ( " South " ) , BorderLayout . SOUTH ); mainFrame . add ( new JButton ( " Center " ) , BorderLayout . CENTER mainFrame . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT_ON_CLOSE ); mainFrame . setVisible ( true ); } } R. Kanawati (LIPN) Programmation graphique January 28, 2016 13 / 18 Introduction Widgets actifs JButton : Un bouton qu’on peut activer (pousser). JLabel : Une ligne d’affichage de texte ou d’image. JTextField : Zone de saisie de texte (composé d’une seule ligne) JTextArea : Zone multi-lignes de saisie de texte. JCheckBox : ensemble de boutons de configuration. JRadioButton : boutons de selections exclusives. ... R. Kanawati (LIPN) Programmation graphique January 28, 2016 14 / 18 Introduction Interface widget - programme Un widget actif émet des événements prédéfinis en fonction de sa nature. Des objets Java peuvent s’abonner à l’écoute à ces événements afin de réagir à leur occurrence. Un objet écouteur doit implanter l’interface de traitement de l’événement. A la réception d’un événement, la méthode de traitement (spécifiée dans l’interface de l’écoute) est automatiquement exécutée. R. Kanawati (LIPN) Programmation graphique January 28, 2016 15 / 18 Introduction Exemple : cas d’un JButton Un JButton émet un événement Action quand il est cliqué L’interface de traitement : ActionListener offre une méthode actionPerformed(ActionEvent e) L’objet ActionEvent décrit la source de l’événement et l’action ayant lieu. R. Kanawati (LIPN) Programmation graphique January 28, 2016 16 / 18 Introduction Exemple : cas d’un JButton class Traitant implements ActionListener { public void actionPerformerd ( ActionEvenet e }{ ... } } Traitant obj = new Traitant (); ... JButton button = new JButton ( " Button " ); button . add Actio nListe ner ( obj ); R. Kanawati (LIPN) Programmation graphique January 28, 2016 17 / 18 Introduction Etude de cas: Application Montre Digitale Développement d’une simple Montre Digitale Possibilité de dériver différents modes d’affichage : texte ou graphiques, Affichage en mode 24h ou 12h. R. Kanawati (LIPN) Programmation graphique January 28, 2016 18 / 18