J
JDaniel
Grüßt euch,
arbeite derzeit an einem Editor, welcher natürlich auch fähig sein soll, Dateien zu öffnen. Der Pfad wird mit Hilfe eines Filechoosers vom Benutzer ausgewählt und anschließend in die TextArea eingelesen. Dies funktioniert soweit auch problemlos, jedoch ist nach Einlesen der neuen Datei der Undomanager ohne Funktion bzw. wirft eine Exception.
Details zum Code:
In der Methode public void start() wird zunächst ein neuer Frame erstellt, indem sich unter anderem auch die TextArea befindet. In dieser Methode registriere ich ebenfalls die Listener für den UndoManager.
In der Methode public void oeffnen() lese ich nun mit Hilfe von .read die angegebene Datei in die TextArea ein.
Der neue Text wird angezeigt, Rückgänig oder Wiederholen lösen aber folgende Exception aus. TextIni ist der Name meiner Klasse. In diesem Fall habe ich nach dem Öffnen noch Eingaben getätigt, welche ich anschließend rückgänig machen wollte.
Der Editor wurde übrigens mit Swing realisiert.
Freue mich über eure Lösungsvorschläge.
Gruß
Daniel
arbeite derzeit an einem Editor, welcher natürlich auch fähig sein soll, Dateien zu öffnen. Der Pfad wird mit Hilfe eines Filechoosers vom Benutzer ausgewählt und anschließend in die TextArea eingelesen. Dies funktioniert soweit auch problemlos, jedoch ist nach Einlesen der neuen Datei der Undomanager ohne Funktion bzw. wirft eine Exception.
Details zum Code:
In der Methode public void start() wird zunächst ein neuer Frame erstellt, indem sich unter anderem auch die TextArea befindet. In dieser Methode registriere ich ebenfalls die Listener für den UndoManager.
Code:
textarea.getDocument().addUndoableEditListener(new UndoableEditListener()
{
public void undoableEditHappened(UndoableEditEvent e)
{
undoManager.addEdit(e.getEdit());
}
});
undoAction.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
undoManager.undo();
}
catch (CannotRedoException cre)
{
cre.printStackTrace();
}
}
});
redoAction.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
undoManager.redo();
}
catch (CannotRedoException cre)
{
cre.printStackTrace();
}
}
});
In der Methode public void oeffnen() lese ich nun mit Hilfe von .read die angegebene Datei in die TextArea ein.
Code:
public void oeffnen()
{
try
{
JFileChooser fC = new JFileChooser();
fC.showOpenDialog(frame);
textarea.read(new FileReader(fC.getSelectedFile()), null);
}
catch(Exception e)
{
e.printStackTrace();
}
}
Der neue Text wird angezeigt, Rückgänig oder Wiederholen lösen aber folgende Exception aus. TextIni ist der Name meiner Klasse. In diesem Fall habe ich nach dem Öffnen noch Eingaben getätigt, welche ich anschließend rückgänig machen wollte.
Code:
Exception in thread "AWT-EventQueue-0" javax.swing.undo.CannotUndoException
at javax.swing.undo.UndoManager.undo(UndoManager.java:396)
at TextIni$2.actionPerformed(TextIni.java:151)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.AbstractButton.doClick(AbstractButton.java:337)
at javax.swing.plaf.basic.BasicMenuItemUI$Actions.actionPerformed(BasicMenuItemUI.java:1194)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2849)
at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:670)
at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:678)
at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:678)
at javax.swing.JMenuBar.processKeyBinding(JMenuBar.java:649)
at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:267)
at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:254)
at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2926)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2918)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2812)
at java.awt.Component.processEvent(Component.java:5911)
at java.awt.Container.processEvent(Container.java:2023)
at java.awt.Component.dispatchEventImpl(Component.java:4501)
at java.awt.Container.dispatchEventImpl(Container.java:2081)
at java.awt.Component.dispatchEvent(Component.java:4331)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:704)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:969)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:841)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:668)
at java.awt.Component.dispatchEventImpl(Component.java:4373)
at java.awt.Container.dispatchEventImpl(Container.java:2081)
at java.awt.Window.dispatchEventImpl(Window.java:2458)
at java.awt.Component.dispatchEvent(Component.java:4331)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Der Editor wurde übrigens mit Swing realisiert.
Freue mich über eure Lösungsvorschläge.
Gruß
Daniel