# JTable und Undo



## ralf (6. Mai 2004)

Hallo,

ich möchte gerne eine JTable um die Undo/Redo-Eigenschaft erweitern. Anscheind bin ich zu doof dafür, das selbst zu machen. 

Hat jemand vielleicht einen Tipp für mich?
Mein Problem ist, dass ich ja alles zurücknehmen können muss, also 
* Einträge in Zellen
* Neue Zeile / Spalte
* Zeile / Spalte löschen
* Größenänderungen der Zellen (?)
* ...

Ich bin doch nicht der einzigste, der so etwas braucht, oder??

Vielleicht gibt's ja auch schon was fertiges. Das wäre natürlich auch toll.

Vielen Dank für Eure Hilfe

Ralf


----------



## bygones (7. Mai 2004)

vielleicht gibts schon sowas ?

aber du kannst dir doch einen Stack hernehmen in dem du die letzten Aktionen speicherst - wenn nun Undo gewählt wurde holst du dir die letze Aktion aus dem Stack und machst sie rückgängig....


----------



## McSnoop (16. Dez 2004)

Wie mache ich die Aktionen rückwärts??

Alle einzelnen Fälle abfragen??

mfg
Snoop


----------



## Illuvatar (16. Dez 2004)

Bissle Code von mir, als Hilfestellung:

```
//UndoManager.java
package de.illu.util;

import java.util.Stack;

/**
 * Manager der Undo/Redo - Funktionen.
 * @author Illuvatar
 */
public class UndoManager 
{
	/**
     * Fügt die UndoRedoAction oben auf dem Stack hinzu
     */
	public void done(UndoRedoAction a) 
	{
		undo.push(a);
		redo.clear();
	}
	/**
     * Führt redo() auf der obersten UndoRedoAction des undo-Stacks aus unt fügt diese dem redo-Stack hinzu.
     */
	public void undo() 
	{
		if (undo.empty())
			return;
		UndoRedoAction a = undo.pop();
		a.undo();
		redo.push(a);
	}
	/**
     * Führt undo() auf der obersten UndoRedoAction des redo-Stacks aus unt fügt diese dem undo-Stack hinzu.
     */
	public void redo() 
	{
		if (redo.empty())
			return;
		UndoRedoAction a = redo.pop();
		a.redo();
		undo.push(a);
	}
	private Stack<UndoRedoAction> redo  = new Stack<UndoRedoAction>();
	private Stack<UndoRedoAction> undo  = new Stack<UndoRedoAction>();
}
```


```
//UndoRedoAction.java
package de.illu.util;

/**
 * Abstrakte Superklasse für alle möglichen Aktionen.
 * @author Illuvatar
 */
public abstract class UndoRedoAction 
{
	public abstract void undo();
	public abstract void redo();
}
```


----------

