Implementa un deshacer / rehacer en MVC
-
04-10-2019 - |
Pregunta
Tengo una aplicación Java y quiero poner en práctica una opción de deshacer / rehacer. el valor que quiero de valores y que yo quiero ser capaz de recuperarse es un entero.
implementos Model
mi clase de la interfaz de StateEditable
y yo tenemos que redefinir las 2 funciones restoreState(Hashtable<?, ?> state)
y storeState(Hashtable<Object, Object> state)
pero no sé qué poner en ellos. Va a ser muy grande si alguien me puede ayudar a hacer eso.
Estas son las primeras líneas de mi clase Model
, el valor que yo quiero hacer un deshacer / rehacer en él es value
public class Model extends Observable implements StateEditable
{
private int value = 5;
private UndoManager undoRedo = new UndoManager();
final UndoableEditListener editListener = new UndoableEditListener() {
public void undoableEditHappened(UndoableEditEvent evt) {
undoRedo.addEdit(evt.getEdit());
}
};
@Override
public void restoreState(Hashtable<?, ?> state)
{
}
@Override
public void storeState(Hashtable<Object, Object> state)
{
}
}
Solución
De mirar a través de un ejemplo de StateEditable
, se Parece ser que en su método storeState
, es necesario rellenar la Hashtable
que se pasa. del mismo modo, el estado de asignación en su restoreState
del Hashtable
que se pasa. usted tendrá que definir una clave para el valor en el Hashtable
. Con esto en mente, sugiero que se agrega
private final String KEY = "myKey";
a la parte superior de su archivo, y luego llenar los dos métodos de esta manera:
@Override
public void restoreState(Hashtable<?, ?> state)
{
Object val = state.get(KEY);
if( val instanceof Integer ) //performs the null test for us.
{
value = val;
}
}
@Override
public void storeState(Hashtable<Object, Object> state)
{
state.put(KEY, value);
}