08 noviembre 2005

Undo - Redo en java

Java tiene un paquete javax.swing.undo que da soporte para hacer undo-redo en algunos componentes java.

Los Document (que van metidos en JTextField y similares) también tienen soporte, por lo que hacer undo - redo de los JTextComponent es casi inmediato.

El funcionamiento es básicamente el siguiente:

  • Los Document admiten un suscriptor a cambios undoables. Para suscribirse hay que llamar al método addUndoableEditListener().
  • javax.swing.undo tiene una clase UndoManager que implementa la interface UndoableEditListener, que se puede suscribir a esos cambios en los Document.
  • La clase UndoManager va guardando todos los cambios de todos los sitios en los que está suscrita. Tiene métodos de undo() y redo() para hacer y desacer los cambios de los que se ha enterado de forma secuencial, además de otro montón de métodos útiles.
En resumen, para hacer undo - redo en los JTextField, hay que hacer un código similar a este

UndoManager um = new UndoManager();
textField1.getDocument().addUndoableEditListener (um);
textField2.getDocument().addUndoableEditListener (um);
...
// cuando venga bien (pulsar algún botón que ponga "undo") se puede hacer
um.undo();


Una pequeña tontería. Todo esto lo he mirado, pero no lo he probado. Es posible que no funcione o haya alguna pega que no está aquí.

No hay comentarios: