Interfaces Graphiques en Java
TD 4

Les actions

Exercice 1 : Les actions

Le but dans cet exercice est d'utiliser des actions génériques (Action et AbstractAction) définissant du code et utilisables (sollicitables) dans différentes cas (menus, boutons, touches clavier, etc.).

Plus particulièrement, et dans un premier temps, on veut construire un petit éditeur de textes permettant de:

Le texte en lui-même sera représenté par un JTextArea qui coupe les lignes trop longues, de préférence sans couper les mots, et bénéficiant d'ascenseurs lorsque cela est rendu nécessaire par la longueur du texte (utiliser un JScrollPane pour cela).

Pour le reste, créer une JFrame fournissant des accès à ces différentes fonctionnalités (actions), sous les forme simultanées suivantes.

  1. Une entrée dans un menu Fichier accessible à partir d'une barre de menu.
  2. Une combinaison de touches Alt + ... permettant d'atteindre le menu correspondant
    (voir la propriété : AbstractAction.MNEMONIC_KEY).
  3. Une combinaison de touches Ctrl + ... permettant d'exécuter l'action sans avoir à ouvrir le menu.
    (voir la propriété : AbstractAction.ACCELERATOR_KEY).
  4. Les boutons correspondant aux actions dans la barre d'outils.
  5. Un menu contextuel qui s'ouvre lorsqu'on clique sur le bouton droit de la souris dans la zone de texte
    (JPopupMenu et la méthode show(Component, int, int) ).

On pourra par exemple utiliser les icônes suivants :


Exercice 2: Actions pré-existantes

Dans le même esprit, on cherche à ajouter à la barre de menus un menu Edition avec des entrées offrant des fonctionnalités permettant de mettre en gras ou en italique une partie d'un texte.
Il faudra dans un premier temps remplacer le JTextArea par un JEditorPane car le JTextArea ne connait pas les styles. Ensuite, il faudra associer un StyleEditorKit (du package javax.swing.text) au JEditorPane pour lui indiquer que le texte contenue peut posséder un style.
Les fonctionnalités de mise en gras, italique etc. existent déjà et sont regroupés dans une structure associative (ActionMap) qui permet d'obtenir l'action associée à un nom donné. Demander les fonctionnalités d'un JTextArea se fait en utilisant la fonction getActionMap().

  1. Lister l'ensemble des propriétés de la table associative des action d'un JEditorPane. Utiliser pour cela, la méthode allKeys().
  2. Ensuite recupérer les actions de mise en italique, en gras etc. et ajouter les à un menu Edition.
Vous pourrez par exemple utiliser les icônes , et .


Exercice 3: Activation/désactivation d'actions

On désire maintenant avoir un comportemnet particulier de notre éditeur de texte, en particulier assurer la cohérence sur cetrains points tel que:

  1. inhiber l'édition (mise en gras/italique ou autre modification) du texte tant que l'utilisateur n'a pas explicitement sélectionné un texte (voir l'interface CaretListener et l'évenement CaretEvent du package javax.swing.event).
  2. enfoncer ou non un bouton de mise en italique, en gras etc. en fonction du fait que le curseur de texte (le caret) est à une position où le texte est en italique, gras etc. Regarder pour cela les interfaces Document et StyledDocument.


Rémi Forax 2002 Université de Marne la Vallée