Comment implémenter un simple undo/redo pour les actions en java?
J'ai créé un éditeur XML et je suis coincé à la dernière phase: l'ajout d'annuler/rétablir la fonctionnalité.
J'ai seulement eu à ajouter undo/redo pour lorsque les utilisateurs ajoutent des éléments, des attributs, ou le texte à la JTree.
Je suis encore assez nouveau à cela, mais à l'école aujourd'hui, j'ai tenté (sans succès) pour créer deux pile object [] s'appelle défaire et refaire et à ajouter les actions effectuées.
Par exemple, j'ai:
Action AddElement() {
//some code
public void actionPerformed(ActionEvent e) {
performElementAction();
}
}
la performElementAction juste ajouter un Élément à la JTree.
Je veux ajouter un moyen d'ajouter cette action effectuée à ma pile d'annulation. est-il un moyen simple de simplement annuler.push( l'ensemble de l'action réalisée) ou quelque chose?
Désolé pour sonner comme un méchant, mais qu'est ce que je suis 🙁
OriginalL'auteur Chea Indian | 2012-07-17
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à la Modèle De Commande, ses utilisations comprennent la mise en œuvre annuler/rétablir la fonctionnalité.
OriginalL'auteur Óscar López
TL;DR: Vous pouvez soutenir annuler et rétablir des actions par la mise en œuvre de la Commande et de Mémento de schémas (Les Modèles de conception - Gama et. al).
Le Souvenir Modèle
Ce modèle simple permet d'enregistrer les états d'un objet. Enroulez simplement l'objet d'une nouvelle classe et à chaque fois que ses changements d'état, la mise à jour.
Le Modèle De Commande
Le modèle de Commande stocke l'objet d'origine (que nous voulons soutenir undo/redo) et le souvenir de l'objet, dont nous avons besoin dans le cas d'une annulation. En outre, les 2 méthodes sont définies:
Code:
À la définition de la logique "Actions" qui s'étendent de Commande (par exemple, Insertion):
Appliquant les modèles:
Cette dernière étape définit la fonction annuler/rétablir le comportement. Ils l'idée de base est de stocker une pile de commandes qui fonctionne comme une histoire-liste des commandes. À l'appui de refaire, vous pouvez garder un secondaire pointeur à chaque fois que la commande annuler est appliquée. Notez que chaque fois qu'un nouvel objet est inséré, puis toutes les commandes après sa position actuelle retirés; qui est atteint par la
deleteElementsAfterPointer
méthode définie ci-dessous:Conclusion:
Ce qui rend cette conception est le fait que vous pouvez ajouter autant de commandes que vous le souhaitez (par extension de la
Command
classe), par exemple,RemoveCommand
,UpdateCommand
et ainsi de suite. En outre, le même modèle est applicable à tout type d'objet, design réutilisables et modifiables à travers différents cas d'utilisation.vous pouvez avoir un seuil (par exemple,
int threshhold = 30
), puis supprimer tous les "anciens" des commandes basé sur la taille de la pile. Par exemple, si vous appelezinsertCommand()
et votrecommandStack.size()
est plus grand que 30, alors vous supprimer le premier élément (commandStack.remove(0)
). L'idée principale est de limiter votre pile à un certain seuil de taille. Oui, plus complexe, de cas d'utilisation, mais certainement faisable 🙂J'ai suivi ce mettre mon max taille de la pile: ntsblog.homedev.com.ua/index.php/2010/05/06/...
OriginalL'auteur Menelaos Kotsollaris
Ce tutoriel explique les fondamentaux du Modèle de Commande et le mécanisme d'annuler/refaire pour le Swing. Espérons que cela aide.
OriginalL'auteur Chris911
Je voudrais essayer de créer une classe d'Action, avec un AddElementAction classe héritant hors d'Action.
AddElementAction pourrait avoir un Do() et Annuler() méthode qui permettrait d'ajouter/supprimer des éléments en conséquence. Vous pouvez ensuite faire deux piles d'Actions pour les annuler/refaire, et il suffit d'appeler N'()/Annuler() sur l'élément de plus haut niveau avant de les faire éclater.
javax.swing.undo.UndoManager
OriginalL'auteur nolegs
You have to define undo(), redo() operations along with execute() in Command interface itself
.exemple:
Définir un État dans votre ConcreteCommand classe. Selon l'État actuel après la méthode execute (), vous devez décider si la commande doit être ajouté à la Pile d'Annulation ou de Refaire de la Pile et de prendre des décisions en conséquence.
Jetez un oeil à cette undo-redo de commande de l'article pour une meilleure compréhension.
OriginalL'auteur Ravindra babu