对JTextArea使用undo和redo

Log*_*gan 11 java swing

我正在使用Java swing制作文本编辑器.我正在使用JTextArea.我想知道如何在JTextArea中使用撤消和重做功能,因为我无法使用它.

Seb*_*rot 13

据我了解,JTextArea没有内置的Undo/Redo功能,但Google搜索确实发现这篇文章可能会有所帮助.

显然存在一个撤销管理器javax.swing,您可以在其中连接到JTextArea的更改事件.


Mar*_*sup 5

我做了一段时间已经有一段时间了,我不记得细节,但这里有一些信息的链接:http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html

向下滚动到标题为"侦听文档的更改"的部分以开始.

  • +1,谁是贬低这个人?本教程有一个工作示例,并解释了正在发生的事情,这肯定会回答这个问题.现在由OP来阅读教程,事实上OP应该在发布这个问题之前先阅读教程.实际上,如果用户在知道可以访问有助于解决未来问题的有价值的参考之前不知道Swing教程.这是应该回答所有问题的方式. (3认同)

Riy*_*eed 5

你可以这样

UndoManager manager = new UndoManager();
textArea.getDocument().addUndoableEditListener(manager);
Run Code Online (Sandbox Code Playgroud)

将管理器附加到JTextArea的文档后,它将监视对文本区域内容的所有更改。

将管理器附加到文本组件之后,必须提供一些方法来告诉管理器撤消/重做操作。

在必要时调用UndoManager的public void undo()和public void redo()方法(例如actionlistener的actionPerformed()方法)

您可以通过以下方式将Action对象附加到按钮上,而不用调用undo()和redo()方法来简化任务:

JButton undoButton = new JButton(UndoManagerHelper.getUndoAction(manager));
JButton redoButton = new JButton(UndoManagerHelper.getRedoAction(manager));
Run Code Online (Sandbox Code Playgroud)