:: Enseignements :: Master :: M1 :: 2011-2012 :: Interface graphique I ::
[LOGO]

Fenêtres, panneaux, boutons, labels, listeners


Nous rappelons que la javadoc est généralement disponible en local à l'adresse /usr/local/jdk.../docs/api/index.html.

Exercice 1 - Exemple de JFrame

  1. Écrire une classe SimpleFrame permettant d'afficher une fenêtre. Nous utiliserons pour cela la classe javax.swing.JFrame.
    On lui donnera simplement :
    • un titre (voir le constructeur ou setTitle())
    • une taille minimale (setSize())

    Puis on l'affichera via la commande setVisible(true).
  2. Changer le comportement par défaut de la fenêtre lors de sa fermeture pour que l'application soit quittée (JFrame.setDefaultCloseOperation(EXIT_ON_CLOSE)).
  3. Dans un second temps, ajouter à cette fenêtre un label (JLabel), représentant une étiquette (un texte court). Récuperer le conteneur correspondant à l'espace client de la fenêtre avec la méthode getContentPane(), et ajouter le label à ce conteneur.
  4. Centrer le texte du JLabel en utilisant la méthode setHorizontalAlignment.
  5. L'algorithme de placement des composants de la fenêtre, est, pour une JFrame, géré par la classe BorderLayout. En lisant attentivement la description de la méthode add(Component,Object) de la classe Container, ajouter un bouton "OK" (JButton) au dessous du label.

Exercice 2 - À la découverte de nouveaux composants

  1. Créer une nouvelle JFrame nommée "Découverte" et y inclure les composants suivants :
    • un bouton (JButton)
    • un champ de texte (JTextField)
    • une zone de texte (JTextArea)
  2. Ajouter une bulle d'aide contextuelle (setToolTipText()) sur le bouton ;
  3. rendre le bouton inopérant (setEnabled()) ;
  4. changer la couleur du texte et du fond du bouton ;
  5. ajouter un texte dans le champ de texte et dans la zone de texte ;
  6. rendre le champ de texte non éditable ;
  7. ajouter une bordure au champ de texte (avec la méthode setBorder()) en fournissant un objet de type java.swing.border.Border créé via une méthode de la classe java.swing.BorderFactory, par exemple la méthode createLineBorder(Color color, int thickness) ;
  8. Modifier la forme que le curseur prend quand il passe au dessus de la zone de texte, pour qu'il garde l'aspect d'une flèche.

Exercice 3 - Associer des actions aux boutons

Le but de cet exercice est de créer une fenêtre contenant un bouton de label "Test" qui, lorsqu'il reçoit un clic, affiche "Test clic" sur la sortie standard

  1. Créer la fenêtre et le bouton ;
  2. créer une classe (elle doit être anonyme) implémentant l'interface ActionListener et effectuant l'affichage dans la méthode actionPerformed(ActionEvent) ;
  3. relier le listener au bouton grâce à la méthode addActionListener(ActionListener) du bouton.

Utiliser la même technique avec trois boutons, "Un", "Deux" et "Trois", qui permettent de changer le titre de la fenêtre principale de l'application en respectivement "*Un*", "*Deux*" et "*Trois*". Produire un code qui permette de rajouter facilement un bouton.

Exercice 4 - Auditeurs

Créer une fenêtre contenant un bouton intitulé "Add". À chaque clic sur ce bouton, il faudra ajouter un bouton dans la fenêtre, les uns à la suite des autres, numérotés à leurs créations. Quand on clique sur l'un d'entre eux, cela le fait disparaître.

Ajouter (à la suite de "Add") un bouton "Reset" qui retire tous les boutons ajoutés.

Exercice 5 - À la maison ...

On souhaite créer un panneau contenant quatre cases à cocher (JCheckBox) étiquettées "zorro", "ivanhoé", "spiderman" et "moi". On veut faire en sorte qu'il n'y ait qu'une seule case sélectionnée à la fois. Il y a deux possibilités :
  1. faire en sorte que lorsque l'on sélectionne une case, les autres soient automatiquement désélectionnées ;
  2. faire en sorte de décocher la case sélectionnée avant de sélectionner la nouvelle.

Il est possible d'obtenir tous les fils d'un Container (un JPanel est un Container) à l'aide des méthodes getComponentCount() et getComponent(int).

Dans cet exercice, il est demandé de ne pas utiliser la classe ButtonGroup mais d'en reprogrammer le comportement.