problème avec l'utilisation d'un StateEdit

problème avec l'utilisation d'un StateEdit - Java - Programmation

Marsh Posté le 06-03-2007 à 20:04:46    

Bonjour,
    J'ai un petit soucis avec un petit exercice que je me suis posé : je cherche a apprendre a utiliser les fonctions undo() et redo() de Swing. Donc d'après la doc de Sun. je suis arrivé a ça :
 

Code :
  1. import javax.swing.*;
  2. import javax.swing.undo.*;
  3. import java.awt.event.*;
  4. import java.awt.*;
  5. public class Form extends JFrame
  6. {
  7.     JButton bouton, bouton2;
  8.     Test t;
  9.     StateEdit s;
  10.     public Form()
  11.     {
  12.         super("hello World" );
  13.         setSize(400, 300);
  14.         t=new Test();
  15.         s = new StateEdit(t);
  16.         getContentPane().setLayout(new BorderLayout());
  17.         bouton = new JButton(new ActivationAction(t,s));
  18.         bouton2 = new JButton(new ActivationAction2(t,s));
  19.         getContentPane().add(BorderLayout.NORTH, bouton);
  20.         getContentPane().add(BorderLayout.SOUTH, bouton2);
  21.         setVisible(true);
  22.     }
  23.     public class ActivationAction extends AbstractAction
  24.     {
  25.         Test t;
  26.         StateEdit s;
  27.         ActivationAction(Test t, StateEdit s)
  28.         {
  29.             super("Do" );
  30.             this.t = t;
  31.             this.s = s;
  32.         }
  33.         public void actionPerformed(ActionEvent e)
  34.         {
  35.             t.setX(t.getX()+1);
  36.             System.out.println("x : "+t.getX());
  37.             s.end();
  38.         }
  39.     }
  40.     public class ActivationAction2 extends AbstractAction
  41.     {
  42.         Test t;
  43.         StateEdit s;
  44.         ActivationAction2(Test t, StateEdit s)
  45.         {
  46.             super("undo" );
  47.             this.s = s;
  48.             this.t = t;
  49.         }
  50.         public void actionPerformed(ActionEvent e)
  51.         {
  52.             s.undo();
  53.             System.out.println("x : "+t.getX());
  54.         }
  55.     }
  56.     public class Test implements StateEditable
  57.     {
  58.        private int x;
  59.        public void setX(int x)
  60.        {
  61.            this.x = x;
  62.        }
  63.        public int getX()
  64.        {
  65.            return x;
  66.        }
  67.        public void storeState(java.util.Hashtable h)
  68.        {
  69.            h.put("x", new Integer(x));
  70.        }
  71.        public void restoreState(java.util.Hashtable h)
  72.        {
  73.            Integer i;
  74.            if((i = (Integer)h.get("x" ))!=null)
  75.                x= i.intValue();
  76.        }
  77.     }
  78.     public static void main(String[] args)
  79.     {
  80.         Form f = new Form();
  81.     }
  82. }


et la ça marche pas comme je le pensais : quand je presse le bouton "do", ça s'incrémente, la ok... mais quand je clicke sur undo, ça revien au cas initial et non le précédent... Donc il n'a pas l'air de conserver mes modifications. Pourtant j'appelle bien la méthode end() du stateEdit donc je pensais que ça suffisait... :/  
 
Si vous avez une idée de ce que je n'ai pas fait, je serai content de comprendre pourquoi ça marche pas.  
 
Merci :)

Reply

Marsh Posté le 06-03-2007 à 20:04:46   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed