UndoableJText - Manuel

Yann D'Isanto

UndoabeJText est une API Java permettant d'implémenter très facilement les fonctionnalités undo et redo sur des JTextComponents.

- Titre : UndoableJText - Manuel

- Auteur : Yann D'Isanto

- Parution : 28 décembre 2012

- Mise à jour : 28 décembre 2012

- Licence : Copyright ® 2012 Yann D'Isanto. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Présentation

- II. Implémenter les fonctionnalités undo et redo sur un JTextComponent

- III. Personnaliser les raccourcis clavier

- IV. Ecouter les évenements undo et redo avec un UndoListener

I - Présentation

UndoabeJText est une API Java permettant d'implémenter très facilement les fonctionnalités undo et redo sur des JTextComponents.

II - Implémenter les fonctionnalités undo et redo sur un JTextComponent

Pour implémenter les fonctionnalités undo/redo sur un JTextComponent il suffit de récupérer l'instance de classe UndoableJTextManager et de passer le JTextComponent à la méthode makesUndoable().

1. JTextComponent myJTextComponent = new JTextField();

3. UndoableJTextManager undoManager = UndoableJTextManager.getUndoableJTextManager();

5. undoManager.makesUndoable(myJTextComponent);

Note importante (versions < 1.0.2 uniquement) :
Dans le cas où vous affecteriez un Document au JTextComponent, vous devez impérativement le faire avant de passer le JTextComponent à la méthode makesUndoable().

La méthode makesUndoable() renvoie un objet UndoMapping qui permet notamment de récupérer les Actions associés aux événements undo et redo.

1. JTextComponent myJTextComponent = new JTextField();

3. UndoableJTextManager undoManager = UndoableJTextManager.getUndoableJTextManager();

5. UndoMapping mapping = undoManager.makesUndoable(myJTextComponent);

7. Action redoAction = mapping.getRedoAction();

9. Action undoAction = mapping.getUndoAction();

III - Personnaliser les raccourcis clavier

Par défaut, des raccourcis clavier sont créés pour les actions undo et redo (respectivement Ctrl+Z et Ctrl+Y). Vous pouvez spécifier vos propres raccourcis en passant à la méthode makesUndoable() les KeyStrokes associés.

1. JTextComponent myJTextComponent = new JTextField();

3. UndoableJTextManager undoManager = UndoableJTextManager.getUndoableJTextManager();

7. // Définition d'un KeyStroke représentant le raccourci clavier Ctrl+U

9. KeyStroke undoKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK);

13. // Définition d'un KeyStroke représentant le raccourci clavier Ctrl+R

15. KeyStroke redoKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_MASK);

19. undo.makeUndoable(textField, undoKeyStroke, redoKeyStroke);

Pour ne pas créer de raccourci clavier il vous suffit de spécifier la valeur null en guise de KeyStroke.

IV - Ecouter les évenements undo et redo avec un UndoListener

L'interface UndoListener permet d'exécuter du code lors du déclenchement d'une Action undo/redo. Les UndoListeners doivent être enregistrés auprès d'un objet UndoMapping, un UndoListener peut également être spécifié lors de l'appel à la méthode makesUndoable(). Le code devant être exécuté doit être écrit dans la méthode undoPerformed() où un objet UndoEvent permet de savoir s'il sagit d'un évènement undo ou redo.

1. JTextComponent myJTextComponent = new JTextField();

3. UndoableJTextManager undoManager = UndoableJTextManager.getUndoableJTextManager();

5. UndoMapping mapping = undoManager.makesUndoable(textField, new UndoListener() {

7. public void undoPerformed(UndoEvent e) {

9. if(e.getType() == e.UNDO) {

11. System.out.println("undo event has occured");

13. } else if(e.getType() == e.REDO) {

15. System.out.println("redo event has occured");

17. }

19. }

21. });